手把手教你直播APP开发录播功能,以云豹直播系统为例
从过去的角度来看,内容本身并不够硬的“直播”最大的优势在于可以现场互动,“录播”毫无用处,直播app开发从不考虑录播,但现在随着直播带货的流行,直播的内容加入科普和产品介绍元素,内容逐渐充实,受众看直播的目的不全是互动,更多的是为了对产品真实性的了解,以及产品优势、使用感的讲述。
因此,在直播app开发时,须得增加“录播”“回访”功能,下面,我们以阿里云云直播为例,系统讲述一下阿里云云直播回放如何实现。
一、直播app开发回放功能,首先要实现直播推流和播流功能。
1、 实现直播功能的核心就是创建推拉流服务,官方的参考文档:
https://help.aliyun.com/product/29949.html?spm=a2c4g.750001.list.163.37ba7b13kcpurF
2、 关键点获取推流播流地址的参考文档:
3、 关于推流和播流地址中的url鉴权生成规则可参考以下文档:
二、 代码参考
下面是云豹直播app开发团队编写的获取阿里云推流和播流地址公共方法,可供大家参考:
/**
* @desc 阿里云直播获取推拉流地址
* @param string $host 协议,如:http、rtmp
* @param string $stream 流名,如12327_1620715780
* @param int $type 类型,0表示播流,1表示推流
*/
function PrivateKey_ali($host,$stream,$type){
$push=''; //替换为自己的推流域名
$pull=''; //替换为自己的播流域名
$key_push=''; //替换为自己的推流鉴权字符串
$length_push=''; //替换为自己的推流鉴权有效时长
$key_pull=''; //替换为自己的播流鉴权字符串
$length_pull=''; //替换为自己的播流鉴权有效时长
$stream_a=explode('.',$stream);
$streamKey = isset($stream_a[0])?$stream_a[0]:'';
if($type==1){
$domain=$host.'://'.$push;
$time=time() + $length_push;
}else{
$domain=$host.'://'.$pull;
$time=time() + $length_pull;
}
$filename="/5showcam/".$stream;
if($type==1){
if($key_push!=''){
$string = $filename."-".$time."-0-0-".$key_push;
$md5=md5($string);
$auth_key="auth_key=".$time."-0-0-".$md5;
}
if($auth_key){
$auth_key='?'.$auth_key;
}
$url=array(
'cdn'=>$domain.'/5showcam',
'stream'=>$stream.$auth_key,
);
}else{
if($key_pull!=''){
$string = $filename."-".$time."-0-0-".$key_pull;
$md5=md5($string);
$auth_key="auth_key=".$time."-0-0-".$md5;
}
if($auth_key){
$auth_key='?'.$auth_key;
}
$url=$domain.$filename.$auth_key;
$site=''; //替换为自己的站点域名
if(strstr($site,'https')){
$url=str_replace('http:','https:',$url);
}
if($type==3){
$url_a=explode('/'.$stream,$url);
$url=array(
'cdn'=>$url_a[0],
'stream'=>$stream.$url_a[1],
);
}
}
return $url;
}
生成推拉流地址时,直接调用该方法即可。如:
$push_url=PrivateKey_ali('rtmp','12327_1620715780',1);
$play_url=PrivateKey_ali('rtmp','12327_1620715780',0);
三、 推流和播流地址创建成功后
直播app开发不一定要手把手写代码,在推流方面,我们可以使用obs软件进行推流,使用播放器可以查看播流地址是否可以播放。
1、 配置直播回放的参考文档如下:
2、 我们整理如下:
先登录阿里云控制台,开通oss服务。
开通后回到上图的页面,强刷下页面,会出来添加录制的信息,如下,点击【管理录制配置】
开通点播服务后,回到录制文件管理图片处,重新刷新,如下图:
然后创建存储桶(注意,存储桶的地域必须与播流域名的地域选择一样的,否则无法存储)
设置回调地址
域名/Appapi/liveback/index
3、 回调方法如下:
function index(){
$request = file_get_contents("php://input");
$this->callbacklog('callback request:'.json_encode($request));
$data = json_decode($request, true);
if(!$data){
$this->callbacklog("request para json format error");
$result['code']=4001;
echo json_encode($result);
exit;
}
if(array_key_exists("uri",$data) && array_key_exists("stream",$data)){
/* 回放回调 */
if(array_key_exists("start_time",$data) && array_key_exists("stop_time",$data) ){
$aliy_playback_site=''; //回放地址主域名
$video_url = $aliy_playback_site.'/'.$data['uri'];
$stream_id=$data['stream'];
$start_time = $data['start_time'];
$end_time = $data['stop_time'];
}else{
$this->callbacklog("request para error:回放信息参数缺少" );
$result['code']=4002;
echo json_encode($result);
exit;
}
$data1=array(
"video_url"=>$video_url
);
Db::name("live_record")->where(["stream"=>$stream_id])->update($data1);
$result['code']=$ret;
echo json_encode($result);
exit;
}else {
$this->callbacklog("request para error");
$result['code']=4002;
echo json_encode($result);
exit;
}
}
public function callbacklog($msg){ file_put_contents(CMF_ROOT.'data/liveback_'.date('Y-m-d').'.txt',date('Y-m-d H:i:s').' 提交参数信息 :'.$msg."\r\n",FILE_APPEND);
}
四、 测试
打开直播app,开播一会后关播,然后在个人中心头像右侧点击箭头,选择直播,点击最新的开播记录,如果能播放刚才的直播,表明直播app开发回放功能操作成功。
声明:以上内容为云豹科技作者本人原创,未经作者本人同意,禁止转载,否则将追究相关法律责任www.yunbaokj.com