Go SDK 接入
Go SDK 适合在无界面的 macOS 或 Linux 程序中连接设备、接收音视频帧,并按需截图或保存播放内容。SDK 不创建播放器界面;应用通过 Output 回调取得解码帧或编码帧,自行渲染、处理或转发。
确认运行环境
- Go 1.25;
CGO_ENABLED=1;- macOS arm64 或 Linux amd64。
添加 SDK 与构建工具
在应用 module 中执行:
bash
go get github.com/tangeai/tirtc-client-go/v2@v2.4.1
go get -tool github.com/tangeai/tirtc-client-go/v2/cmd/tirtc-build@v2.4.1使用 tirtc-build 构建 Go 应用并整理运行所需的 TiRTC Native 动态库:
bash
go tool tirtc-build build --output dist/bin/app ./cmd/app部署时保留整个 dist/ 目录,不要只复制可执行文件。
初始化并创建连接
AppID 来自申请开通,CacheDir 必须是可写的绝对路径。deviceID 是目标设备 ID,clientToken 由业务服务端签发,获取方式见连接设备。
go
package main
import (
"context"
"log"
"os/signal"
"syscall"
tirtc "github.com/tangeai/tirtc-client-go/v2"
)
func main() {
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
defer stop()
err := tirtc.Init(tirtc.InitOptions{
AppID: appID,
CacheDir: "/var/lib/my-app/tirtc-cache",
})
if err != nil {
log.Fatal(err)
}
defer tirtc.Shutdown()
connectionEnded := make(chan error, 1)
notifyEnded := func(err error) {
select {
case connectionEnded <- err:
default:
}
}
var conn *tirtc.Conn
conn, err = tirtc.NewConn(tirtc.ConnOptions{
OnStateChanged: func(state tirtc.ConnState, err error) {
log.Printf("RTC state=%v err=%v", state, err)
if state == tirtc.ConnConnected {
if subscribeErr := conn.SubscribeVideo(11); subscribeErr != nil {
notifyEnded(subscribeErr)
}
}
if state == tirtc.ConnDisconnected {
notifyEnded(err)
}
},
})
if err != nil {
log.Fatal(err)
}
defer conn.Close()
videoOutput, err := tirtc.NewVideoOutput(tirtc.VideoOutputOptions{
OnFrame: func(frame tirtc.VideoFrame) {
renderOrProcess(frame)
},
})
if err != nil {
log.Fatal(err)
}
defer videoOutput.Close()
if err := videoOutput.Attach(conn, 11); err != nil {
log.Fatal(err)
}
defer videoOutput.Detach()
if err := conn.Connect(deviceID, clientToken); err != nil {
log.Fatal(err)
}
select {
case <-ctx.Done():
_ = conn.Disconnect()
case err := <-connectionEnded:
if err != nil {
log.Printf("connection ended: %v", err)
}
}
}Connect 成功只表示请求已被接受,最终结果通过 OnStateChanged 返回。上例在发起连接前绑定视频 Stream 11,连接成功后订阅同一个 Stream,并保持进程运行到连接结束或收到退出信号。音频使用 AudioOutput 和 SubscribeAudio,调用顺序相同。
需要保存播放内容或截图时,继续看保存播放内容与当前画面。完整 API 和资源释放约束见 Go API 说明。