腾讯直播码模式教程

腾讯云上提供两种直播模式:
一、直播码模式
二、频道托管模式
这次我们采用第一种模式进行接入,闲话不多说了,让我们开始接入吧。
直播码模式流程如下:
创建推流地址/观看地址-》内容提供者进行推流-》客户端进行观看。
现在我们从头开始操作:
1。创建推流地址。
官网上给出的demo很清晰。这里我们需要用到bizId/防盗链安全key。
创建推流地址首先要创建唯一的直播标示码channel_id.这个标识码建议采用时间戳或相关可逆的参数进行拼接
例子:
// 生成直播码
$steamId= Live::setStreamId($user['uid'].time());
这里我是采用当前直播的用户拼接上当前的Unix时间戳.进行拼接.
创建完直播标识码后,就可以采用官网给出的例子进行生产,无脑操作.
贴下官网的生成地址:https://www.qcloud.com/document/product/267/7977
生成完推流地址,就可以进行直播了.为了更加方便进行测试,会在本机搭建一个直播环境(我也是主播了哦)
小编是mac系统,就以mac系统为例,所使用的工具都包含各种平台.
1.安装直播工具.OBS安装
这个工具是免费的推流工具,可以进行屏幕直播,摄像头等等.具体功能就不具体说明了.
安装完毕后进行设置推流地址设置:

这里需要注意的是推流地址需要拆分为两部分.
设置完推流后.就需要设置直播方式


这里有很多视频捕捉方式,就是直播方式.任君选择,选择完毕之后开始推流`.就开始直播啦``
需要播放直播需要额外下载其他播放器小编用的是VLC.
直播流程就到这结束了,剩下就是等待服务器的消息推送.
以下是小编封装的直播相关的接口.

/**
* 直播操作类
* User: tom
* Date: 17/3/27
* Time: 09:16
*/
classLive {
// 直播统计基础url
private static$statBaseUrl='http://statcgi.video.qcloud.com/common_access';
// 查询基础url
private static$queryBaseUrl='http://fcgi.video.qcloud.com/common_access';
// 腾讯相关信息
private static$apiKey='';
// 防盗链
private static$safetyKey='';
private static$apiId='';
// 请求的过期时间
private static$expireTime=1;
private static$bizId='';
private static$livecode='';
/**
* 获取直播统计信息
*@paramstring $steamId
*@paramstring $type all=所有信息,push=推流信息,play=播放信息
*@paramint $pageIndex
*@paramint $pageSize
*@returnmixed
*/
public static functiongetLiveStat($steamId='',$type='all',$pageIndex=1,$pageSize=300){
// 统计接口
$statInterfaceArr=array('all'=>'Get_LiveStat','push'=>'Get_LivePushStat','play'=>'Get_LivePlayStat');
// 默认为统计所有信息
if(! in_array($type,$statInterfaceArr))
$type='all';
// 请求基本信息
$action=array(
'cmd'=>self::$apiId,
'interface'=>$statInterfaceArr[$type],
'Param.n.page_no'=>$pageIndex,
'Param.n.page_size'=>$pageSize
);
// 是否存在制定的直播流id
if($steamId)
$action['Param.s.stream_id']    =$steamId;
// 组装url
$action=  array_merge(self::_commonParam(self::$expireTime),$action);
$url=self::$statBaseUrl.'?'.http_build_query($action);
return self::_query($url);
}
/**
* 查询直播状态
*@param$steamId
*@returnmixed
*/
public static functiongetSteamStatus($steamId){
// 请求基本信息
$action=array(
'cmd'=>self::$apiId,
'interface'=>'Live_Channel_GetStatus',
'Param.s.channel_id'=>$steamId
);
// 组装url
$action=  array_merge(self::_commonParam(self::$expireTime),$action);
$url=self::$queryBaseUrl.'?'.http_build_query($action);
return self::_query($url);
}
/**
* 设置直播的状态
*@param$steamId
*@paramint $status 0=关闭,1=开启
*@returnmixed
*/
public static functionsetLiveStatus($steamId,$status=0){
// 可设置状态必须为0关闭,1开启
$status= in_array($status,array(0,1)) ?$status:0;
// 请求基本信息
$action=array(
'cmd'=>self::$apiId,
'interface'=>'Live_Channel_SetStatus',
'Param.s.channel_id'=>$steamId,
'Param.n.status'=>$status
);
// 组装url
$action=  array_merge(self::_commonParam(self::$expireTime),$action);
$url=self::$queryBaseUrl.'?'.http_build_query($action);
return self::_query($url);
}
/**
* 查询直播录制列表
*@param$steamId
*@paramstring $startTime
*@paramstring $endTime
*@paramint $pageIndex
*@paramint $pageSize
*@paramstring $orderBy
*@returnmixed
*/
public static functiongetRecordList($steamId,$startTime='',$endTime='',$pageIndex=1,$pageSize=10,$orderBy='desc'){
// 请求基本信息
$action=array(
'cmd'=>self::$apiId,
'interface'=>'Live_Tape_GetFilelist',
'Param.s.channel_id'=>$steamId,
);
//  开始结束时间未填的时候默认获取昨天的数据
$action['Param.s.start_time'] =  !empty($startTime) ?$startTime: date('Y-m-d 00:00:00',strtotime('-1 day'));
$action['Param.s.end_time']  =  !empty($endTime) ?$endTime: date('Y-m-d 00::00',time());
$action['Param.s.sort_type']    =$orderBy;
$action['Param.n.page_no']      =$pageIndex;
$action['Param.n.page_size']    =$pageSize;
// 组装url
$action=  array_merge(self::_commonParam(self::$expireTime),$action);
$url=self::$queryBaseUrl.'?'.http_build_query($action);
return self::_query($url);
}
/**
* 查询直播的截图
*@param$queueId
*@paramint $count
*@returnmixed
*/
public static functiongetLivePic($queueId,$count=10){
// 请求基本信息
$action=array(
'cmd'=>self::$apiId,
'interface'=>'Live_Queue_Get',
'Param.n.bid'=>$queueId,
'Param.n.count'=>$count
);
// 组装url
$action=  array_merge(self::_commonParam(self::$expireTime),$action);
$url=self::$queryBaseUrl.'?'.http_build_query($action);
return self::_query($url);
}
/**
* 获取频道列表
*@paramstring $status    0表示断流,1表示开启,3表示关闭
*@paramint $pageIndex
*@paramint $pageSize
*@paramstring $orderBy
*@paramstring $orderField
*@returnmixed
*/
public static functiongetChannelList($status='',$pageIndex=1,$pageSize=10,$orderBy='desc',$orderField='create_time'){
// 请求基本信息
$action=array(
'cmd'=>self::$apiId,
'interface'=>'Live_Channel_GetChannelList'
);
// 默认为不过滤,过滤条件为0表示断流,1表示开启,3表示关闭
if($status)
$action['Param.n.status']  =$status;
$action['Param.s.order_field']  =$orderField;
$action['Param.s.sort_type']    =$orderBy;
$action['Param.n.page_no']      =$pageIndex;
$action['Param.n.page_size']    =$pageSize;
// 组装url
$action=  array_merge(self::_commonParam(self::$expireTime),$action);
$url=self::$queryBaseUrl.'?'.http_build_query($action);
return self::_query($url);
}
/**
* 设置直播码
*@param$streamId
*@returnstring
*/
public static functionsetStreamId($streamId){
self::$livecode=self::$bizId."_".$streamId;//直播码
return self::$livecode;
}
/**
* 获取推流地址
* 如果不传key和过期时间,将返回不含防盗链的url
*@param$bizId 您在腾讯云分配到的bizid
*@param$streamId 您用来区别不通推流地址的唯一id
*@param$key 安全密钥
*@param$time 过期时间 sample 2016-11-12 12:00:00
*@returnString url
*/
public static functiongetPushUrl($time=null){
if($time){
$txTime= strtoupper(base_convert(strtotime($time),10,16));
//txSecret = MD5( KEY + livecode + txTime )
//livecode = bizid+"_"+stream_id  如 8888_test123456
$txSecret= md5(self::$safetyKey.self::$livecode.$txTime);
$ext_str="?".http_build_query(array(
"bizid"=>self::$bizId,
"txSecret"=>$txSecret,
"txTime"=>$txTime
));
}
return"rtmp://".self::$bizId.".livepush.myqcloud.com/live/".self::$livecode.(isset($ext_str) ?$ext_str:"");
}
/**
* 获取播放地址
*@param$bizId 您在腾讯云分配到的bizid
*@param$streamId 您用来区别不通推流地址的唯一id
*@returnString url
*/
public static functiongetPlayUrl(){
return array(
'rtmp'=>"rtmp://".self::$bizId.".liveplay.myqcloud.com/live/".self::$livecode,
'flv'=>"http://".self::$bizId.".liveplay.myqcloud.com/live/".self::$livecode.".flv",
'hls'=>"http://".self::$bizId.".liveplay.myqcloud.com/live/".self::$livecode.".m3u8"
);
}
/**
* 生成公用的配置部分
*@paramint $expireTime
*@returnarray
*/
private static function_commonParam($expireTime=1){
$t=  strtotime("+{$expireTime}minute");
$sign=  md5(self::$apiKey.$t);
return array('t'=>$t,'sign'=>$sign);
}
/**
* 请求
*@param$url
*@returnmixed
*/
private static function_query($url){
$str=curl_get($url);
$res=json_decode($str,true);
return$res;
}
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,613评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • 绿竹半含箨,新稍才出墙。(手机拍)
    江夏月阅读 137评论 0 0
  • 原本只想收获一枚秋果,他却给了我们整个秋天。 2017年9月4日 星期一 晴 打开忧喜交集的高三日记,总能准确...
    见伊阅读 904评论 88 62
  • 如何做好一套幻灯片? 相信每一个人都有自己的答案,可能你会说,不要用宋体;也可能会说,配图要高清;当然,还有人可能...
    韩国中文老师专家阅读 639评论 0 0