騰訊直播碼模式教程

騰訊云上提供兩種直播模式:
一沦泌、直播碼模式
二蛔六、頻道托管模式
這次我們采用第一種模式進(jìn)行接入轴捎,閑話不多說(shuō)了,讓我們開(kāi)始接入吧百炬。
直播碼模式流程如下:
創(chuàng)建推流地址/觀看地址-》內(nèi)容提供者進(jìn)行推流-》客戶端進(jìn)行觀看褐隆。
現(xiàn)在我們從頭開(kāi)始操作:
1。創(chuàng)建推流地址剖踊。
官網(wǎng)上給出的demo很清晰庶弃。這里我們需要用到bizId/防盜鏈安全key衫贬。
創(chuàng)建推流地址首先要?jiǎng)?chuàng)建唯一的直播標(biāo)示碼channel_id.這個(gè)標(biāo)識(shí)碼建議采用時(shí)間戳或相關(guān)可逆的參數(shù)進(jìn)行拼接
例子:
// 生成直播碼
$steamId= Live::setStreamId($user['uid'].time());
這里我是采用當(dāng)前直播的用戶拼接上當(dāng)前的Unix時(shí)間戳.進(jìn)行拼接.
創(chuàng)建完直播標(biāo)識(shí)碼后,就可以采用官網(wǎng)給出的例子進(jìn)行生產(chǎn),無(wú)腦操作.
貼下官網(wǎng)的生成地址:https://www.qcloud.com/document/product/267/7977
生成完推流地址,就可以進(jìn)行直播了.為了更加方便進(jìn)行測(cè)試,會(huì)在本機(jī)搭建一個(gè)直播環(huán)境(我也是主播了哦)
小編是mac系統(tǒng),就以mac系統(tǒng)為例,所使用的工具都包含各種平臺(tái).
1.安裝直播工具.OBS安裝
這個(gè)工具是免費(fèi)的推流工具,可以進(jìn)行屏幕直播,攝像頭等等.具體功能就不具體說(shuō)明了.
安裝完畢后進(jìn)行設(shè)置推流地址設(shè)置:

這里需要注意的是推流地址需要拆分為兩部分.
設(shè)置完推流后.就需要設(shè)置直播方式


這里有很多視頻捕捉方式,就是直播方式.任君選擇,選擇完畢之后開(kāi)始推流`.就開(kāi)始直播啦``
需要播放直播需要額外下載其他播放器小編用的是VLC.
直播流程就到這結(jié)束了,剩下就是等待服務(wù)器的消息推送.
以下是小編封裝的直播相關(guān)的接口.

/**
* 直播操作類
* User: tom
* Date: 17/3/27
* Time: 09:16
*/
classLive {
// 直播統(tǒng)計(jì)基礎(chǔ)url
private static$statBaseUrl='http://statcgi.video.qcloud.com/common_access';
// 查詢基礎(chǔ)url
private static$queryBaseUrl='http://fcgi.video.qcloud.com/common_access';
// 騰訊相關(guān)信息
private static$apiKey='';
// 防盜鏈
private static$safetyKey='';
private static$apiId='';
// 請(qǐng)求的過(guò)期時(shí)間
private static$expireTime=1;
private static$bizId='';
private static$livecode='';
/**
* 獲取直播統(tǒng)計(jì)信息
*@paramstring $steamId
*@paramstring $type all=所有信息,push=推流信息,play=播放信息
*@paramint $pageIndex
*@paramint $pageSize
*@returnmixed
*/
public static functiongetLiveStat($steamId='',$type='all',$pageIndex=1,$pageSize=300){
// 統(tǒng)計(jì)接口
$statInterfaceArr=array('all'=>'Get_LiveStat','push'=>'Get_LivePushStat','play'=>'Get_LivePlayStat');
// 默認(rèn)為統(tǒng)計(jì)所有信息
if(! in_array($type,$statInterfaceArr))
$type='all';
// 請(qǐng)求基本信息
$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);
}
/**
* 查詢直播狀態(tài)
*@param$steamId
*@returnmixed
*/
public static functiongetSteamStatus($steamId){
// 請(qǐng)求基本信息
$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);
}
/**
* 設(shè)置直播的狀態(tài)
*@param$steamId
*@paramint $status 0=關(guān)閉,1=開(kāi)啟
*@returnmixed
*/
public static functionsetLiveStatus($steamId,$status=0){
// 可設(shè)置狀態(tài)必須為0關(guān)閉,1開(kāi)啟
$status= in_array($status,array(0,1)) ?$status:0;
// 請(qǐng)求基本信息
$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'){
// 請(qǐng)求基本信息
$action=array(
'cmd'=>self::$apiId,
'interface'=>'Live_Tape_GetFilelist',
'Param.s.channel_id'=>$steamId,
);
//  開(kāi)始結(jié)束時(shí)間未填的時(shí)候默認(rèn)獲取昨天的數(shù)據(jù)
$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){
// 請(qǐng)求基本信息
$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表示開(kāi)啟歇攻,3表示關(guān)閉
*@paramint $pageIndex
*@paramint $pageSize
*@paramstring $orderBy
*@paramstring $orderField
*@returnmixed
*/
public static functiongetChannelList($status='',$pageIndex=1,$pageSize=10,$orderBy='desc',$orderField='create_time'){
// 請(qǐng)求基本信息
$action=array(
'cmd'=>self::$apiId,
'interface'=>'Live_Channel_GetChannelList'
);
// 默認(rèn)為不過(guò)濾,過(guò)濾條件為0表示斷流固惯,1表示開(kāi)啟,3表示關(guān)閉
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);
}
/**
* 設(shè)置直播碼
*@param$streamId
*@returnstring
*/
public static functionsetStreamId($streamId){
self::$livecode=self::$bizId."_".$streamId;//直播碼
return self::$livecode;
}
/**
* 獲取推流地址
* 如果不傳key和過(guò)期時(shí)間掉伏,將返回不含防盜鏈的url
*@param$bizId 您在騰訊云分配到的bizid
*@param$streamId 您用來(lái)區(qū)別不通推流地址的唯一id
*@param$key 安全密鑰
*@param$time 過(guò)期時(shí)間 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 您用來(lái)區(qū)別不通推流地址的唯一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);
}
/**
* 請(qǐng)求
*@param$url
*@returnmixed
*/
private static function_query($url){
$str=curl_get($url);
$res=json_decode($str,true);
return$res;
}
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缝呕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子斧散,更是在濱河造成了極大的恐慌供常,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸡捐,死亡現(xiàn)場(chǎng)離奇詭異栈暇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)箍镜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門源祈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人色迂,你說(shuō)我怎么就攤上這事香缺。” “怎么了歇僧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵图张,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我诈悍,道長(zhǎng)祸轮,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任侥钳,我火速辦了婚禮适袜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘舷夺。我一直安慰自己苦酱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布给猾。 她就那樣靜靜地躺著躏啰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耙册。 梳的紋絲不亂的頭發(fā)上给僵,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼帝际。 笑死蔓同,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蹲诀。 我是一名探鬼主播斑粱,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼脯爪!你這毒婦竟也來(lái)了则北?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤痕慢,失蹤者是張志新(化名)和其女友劉穎尚揣,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體掖举,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡快骗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了塔次。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片方篮。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖励负,靈堂內(nèi)的尸體忽然破棺而出藕溅,到底是詐尸還是另有隱情,我是刑警寧澤继榆,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布巾表,位于F島的核電站,受9級(jí)特大地震影響裕照,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜调塌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一晋南、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧羔砾,春花似錦负间、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至态秧,卻和暖如春董虱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工愤诱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留云头,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓淫半,卻偏偏與公主長(zhǎng)得像溃槐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子科吭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,101評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理昏滴,服務(wù)發(fā)現(xiàn),斷路器对人,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 綠竹半含籜谣殊,新稍才出墻。(手機(jī)拍)
    江夏月閱讀 122評(píng)論 0 0
  • 原本只想收獲一枚秋果规伐,他卻給了我們整個(gè)秋天蟹倾。 2017年9月4日 星期一 晴 打開(kāi)憂喜交集的高三日記,總能準(zhǔn)確...
    見(jiàn)伊閱讀 873評(píng)論 88 62
  • 如何做好一套幻燈片? 相信每一個(gè)人都有自己的答案培慌,可能你會(huì)說(shuō)豁陆,不要用宋體;也可能會(huì)說(shuō)吵护,配圖要高清盒音;當(dāng)然,還有人可能...
    韓國(guó)中文老師專家閱讀 627評(píng)論 0 0