LiveKit Go SDK 使用指南
server-sdk-go Client and server SDK for Golang 项目地址: https://gitcode.com/gh_mirrors/se/server-sdk-go
1. 项目介绍
LiveKit 是一个开源项目,提供了在 Golang 环境下与 LiveKit 服务进行交互的服务端 SDK。该 SDK 支持创建访问令牌、管理房间和参与者,以及发布和接收音频、视频和数据。
2. 项目快速启动
安装 SDK
首先,确保你的开发环境已经安装了 Go 1.18 或更高版本。然后,通过下面的命令获取 LiveKit Go SDK:
go get github.com/livekit/server-sdk-go/v2
创建访问令牌
要使用 LiveKit 服务,需要从你的 Go 后端创建访问令牌。以下是一个简单的例子:
import (
"time"
"github.com/livekit/server-sdk-go/v2"
"github.com/livekit/protocol/auth"
)
func getJoinToken(apiKey, apiSecret, room, identity string) (string, error) {
at := auth.NewAccessToken(apiKey, apiSecret)
grant := &auth.VideoGrant{
RoomJoin: true,
Room: room,
}
at.AddGrant(grant)
at.SetIdentity(identity)
at.SetValidFor(1 * time.Hour)
return at.ToJWT()
}
连接到房间
以下是如何使用 SDK 连接到一个房间的示例:
import (
"github.com/livekit/server-sdk-go/v2"
)
func main() {
hostURL := "https://project-123456.livekit.cloud"
apiKey := "your_api_key"
apiSecret := "your_api_secret"
roomName := "myroom"
identity := "botuser"
roomCB := &lksdk.RoomCallback{
ParticipantCallback: lksdk.ParticipantCallback{
OnTrackSubscribed: trackSubscribed,
},
}
room, err := lksdk.ConnectToRoom(hostURL, lksdk.ConnectInfo{
APIKey: apiKey,
APISecret: apiSecret,
RoomName: roomName,
ParticipantIdentity: identity,
}, roomCB)
if err != nil {
panic(err)
}
room.Disconnect()
}
func trackSubscribed(track *webrtc.TrackRemote, publication *lksdk.RemoteTrackPublication, rp *lksdk.RemoteParticipant) {
// 处理订阅的轨道
}
3. 应用案例和最佳实践
发布媒体到房间
要发布媒体到房间,你需要首先编码媒体文件为正确的格式,如 VP8、H.264 和 Opus。以下是使用 FFmpeg 将视频文件编码为 VP8 和 Opus 格式的示例命令:
ffmpeg -i <input.mp4> -c:v libvpx -keyint_min 120 -qmax 50 -maxrate 2M -b:v 1M <output.ivf> -c:a libopus -page_duration 20000 -vn <output.ogg>
然后,使用 SDK 中的 NewLocalFileTrack
方法发布编码后的文件:
file := "video.ivf"
videoWidth := 1920
videoHeight := 1080
track, err := lksdk.NewLocalFileTrack(file,
lksdk.ReaderTrackWithFrameDuration(33*time.Millisecond),
lksdk.ReaderTrackWithOnWriteComplete(func() {
fmt.Println("track finished")
}),
)
if err != nil {
return err
}
if err = room.LocalParticipant.PublishTrack(track, &lksdk.TrackPublicationOptions{
Name: file,
VideoWidth: videoWidth,
VideoHeight: videoHeight,
}); err != nil {
return err
}
接收媒体从房间
接收房间中的媒体可以通过 SDK 提供的回调函数来实现。以下是如何处理接收到的轨道的示例:
func trackSubscribed(track *webrtc.TrackRemote, publication *lksdk.RemoteTrackPublication, rp *lksdk.RemoteParticipant) {
// 使用接收到的轨道数据
}
4. 典型生态项目
目前,LiveKit Go SDK 可以与多种项目和服务集成,例如:
- 实现视频会议服务的后端
- 在在线教育平台中集成实时交互功能
- 在直播场景中管理流媒体传输
以上仅为一些示例,LiveKit Go SDK 的应用场景非常广泛,可以根据具体需求进行定制化开发。
server-sdk-go Client and server SDK for Golang 项目地址: https://gitcode.com/gh_mirrors/se/server-sdk-go