美文网首页
腾讯直播码模式教程

腾讯直播码模式教程

作者: 汤敏正 | 来源:发表于2017-03-29 12:45 被阅读1247次

    腾讯云上提供两种直播模式:
    一、直播码模式
    二、频道托管模式
    这次我们采用第一种模式进行接入,闲话不多说了,让我们开始接入吧。
    直播码模式流程如下:
    创建推流地址/观看地址-》内容提供者进行推流-》客户端进行观看。
    现在我们从头开始操作:
    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;
    }
    }
    

    相关文章

      网友评论

          本文标题:腾讯直播码模式教程

          本文链接:https://www.haomeiwen.com/subject/wkmeottx.html