golang 腾讯云直播开发日记(一)
前言
最近要开发一个直播类的app,由于技术和资金的问题,我们选择云端服务,首先尝试的是腾讯云的直播服务。本文将介绍使用腾讯云直播时遇到的问题和解决思路及代码。
1.直播云服务
首先要做的就是单人直播,采用腾讯云的直播云服务开发。
腾讯云提供了golang的sdk ,请自行下载,要注意的是SDK 3.0 仅支持GO 1.9以上的版本 相关链接:
https://github.com/TencentCloud/tencentcloud-sdk-go
在线测试API地址
https://console.cloud.tencent.com/api/explorer?Product=live&Version=2018-08-01
1.1推流
推流,指的是把采集阶段封包好的内容传输到服务器的过程,如想了解,可点击查看
直播推流的介绍
如何生成推流地址?
1.腾讯自带的地址生成器
https://console.cloud.tencent.com/live/addrgenerator/addrgenerator
2.计算生成
作为后端开发当然用第二种方式,但是golang的sdk并没有提供推流拉流地址生成的接口,可能是大佬们觉得太简单了,只能自己写了。
腾讯云的推流地址格式为:
domain:你的推流域名
AppName:看需求,一般为 live
StreamName:流名字,直播房间ID
txSercet:鉴权key,MD5加密
txTime:推流地址过期日期
hex(time):指的是秒级的timestamp(时间戳)
说一下txSercet的key,key可以在域名管理找到
域名管理->点击你的推流地址->推流配置->鉴权配置(主key)
golang代码如下
//MD5
func ToMd5(str string) string {
data := []byte(str)
hash := md5.New()
hash.Write(data)
md := hash.Sum(nil)
mdStr := hex.EncodeToString(md)
return mdStr
}
//生成hex(time),86400为一天的秒数,即一天的有效期
func BuildTxTime() string {
timestamp := time.Now().Unix()
timestamp = timestamp + 86400
baseTime := strconv.FormatInt(timestamp, 16)
return baseTime
}
//TxSecret
func BuildTxSecret(roomId string) string {
KEY := key //鉴权配置的key
streamName := roomId //流名字可以为房间ID
txTime := BuildTxTime()
return ToMd5(KEY + streamName + txTime)
}
//生成推流地址
func BuildStream(roomUUID string) string {
txTime := BuildTxTime()
txSecret := BuildTxSecret(roomID)
streamName := roomID
stream := "rtmp://" + PushDomain + ".livepush.myqcloud.com/live/" + streamName + "?txSecret=" + txSecret + "&txTime=" + txTime
return stream
}
1.2拉流
拉流相对简单,也没有加密
拉流地址生成代码
func BuildPullStream(streamName string) string {
stream := "rtmp://你的拉流地址/live/"+streamName
return stream
}