最近要做一个直播回放,于是摸索了一下腾讯云直播,做一个学习记录,方便后期的使用
准备工作
- 注册腾讯云账号并实名认证,进入控制台开通云直播服务
- 开通的时候他会给你生成一个推流域名,在云直播>域名管理里可以添加配置自己的推流和播流域名,添加好之后,把他给到的CNAME拿到域名解析里配置一下
- 如果有录制需要,可以开通云点播,但是这个服务是收费的,开通之后在控制台>云直播>功能配置>直播录制里创建录制模版,录制的文件格式可以多选,我这里为了方便,只选了mp4,创建好之后绑定推流域名
- 如果想在停止推流后,获取直播的相关信息,可以在云直播>事件中心>直播回调里配置,我按需求使用了录制回调
如图
添加推流播流域名
域名解析
录制配置(需先开通云点播服务)
回调配置
在配置回调模版的时候,需要绑定一个回调地址,这个是需要结合自己的直播项目事先准备好的,停止推流后,他会通过POST请求向这个回调地址发送相关数据
生成推流播流地址
推流的key他给定的,播流的鉴权可以自己设置开启情况,地址生成有代码示例,可以在编译器里根据自己的逻辑封装 (我的命名不太规范,请忽略哈哈)
public static function getPushUrl($pushDomain, $streamName, $appName, $pushKey, $expireTime){
if($pushKey && $expireTime){
$txTime = strtoupper(base_convert(strtotime($expireTime),10,16));
//txSecret = MD5( KEY + streamName + txTime )
$txSecret = md5($pushKey.$streamName.$txTime);
$ext_str = "?".http_build_query(array(
"txSecret"=> $txSecret,
"txTime"=> $txTime
));
}
$liveName = "rtmp://".$pushDomain."/$appName/";//推流地址
$liveKey = $streamName . (isset($ext_str) ? $ext_str : "");//推流密钥
return ['name' => $liveName,'key'=> $liveKey];
}
public static function getplayUrl($playDomain, $streamName,$appName, $playKey, $expireTime)
{
//未开启鉴权Key的情况下
if ($playKey == '') {
$rtmp_play_url = 'rtmp://' . $playDomain . '/' . $appName . '/' . $streamName;
$flv_play_url = 'http://' . $playDomain . '/' . $appName . '/' . $streamName . '.flv';
$hls_play_url = 'http://' . $playDomain . '/' . $appName . '/' . $streamName . '.m3u8';
} else {
$timeStamp = time() + strtotime($expireTime);//转时间戳
$rtmp_sstring = '/' . $appName . '/' . $streamName . '-' . $timeStamp . '-0-0-' . $playKey;
$rtmp_md5hash = md5($rtmp_sstring);
$rtmp_play_url = 'rtmp://' . $playDomain . '/' . $appName . '/' . $streamName . '?auth_key=' . $timeStamp . '-0-0-' . $rtmp_md5hash;
$flv_sstring = '/' . $appName . '/' . $streamName . '.flv-' . $timeStamp . '-0-0-' . $playKey;
$flv_md5hash = md5($flv_sstring);
$flv_play_url = 'http://' . $playDomain . '/' . $appName . '/' . $streamName . '.flv?auth_key=' . $timeStamp . '-0-0-' . $flv_md5hash;
$hls_sstring = '/' . $appName . '/' . $streamName . '.m3u8-' . $timeStamp . '-0-0-' . $playKey;
$hls_md5hash = md5($hls_sstring);
$hls_play_url = 'http://' . $playDomain . '/' . $appName . '/' . $streamName . '.m3u8?auth_key=' . $timeStamp . '-0-0-' . $hls_md5hash;
}
return ['rtmp' => $rtmp_play_url, 'flv' => $flv_play_url, 'hls' => $hls_play_url];
}
测试
根据规则生成自己的直播间,同一个直播推流和播流的streamName需要是一致的
生成自己的播流地址渲染到播放器上
打开推流软件进行推流测试,这里用的是OBS
进入直播间观看
停止推流后,获取回调的数据
我们拿到appid和file_id使用腾讯云的超级播放器就可以播放录制的视频了,或者拿到video_url直接播放
在腾讯云的云点播里也可以进行视频管理
注意: 如果云直播绑定了录制模版,就不需要再去请求录制接口创建录制工作了,否则会生成多个视频,有的时候会返m3u8格式的video_url,不能直接拿过来使用了