一、直播中必知的rtmp協議
、推流
和拉流
相關概念
1、關於rtmp協議
rtmp
:
RTMP是Real Time Messaging Protocol(實時消息傳輸協議)的首字母縮寫。該協議基於TCP,是一個協議族,包括RTMP基本協議及RTMPT/RTMPS/RTMPE等多種變種。RTMP是一種設計用來進行實時數據通信的網絡協議,主要用來在Flash/AIR平臺和支持RTMP協議的流媒體/交互服務器之間進行音視頻和數據通信。支持該協議的軟件包括Adobe Media Server/Ultrant Media Server/red5等。RTMP與HTTP一樣,都屬於TCP/IP四層模型的應用層。
多種變種:
- RTMP工作在TCP之上,默認使用端口1935
- RTMPE在RTMP的基礎上增加了加密功能
- RTMPT封裝在HTTP請求之上,可穿透防火牆
- RTMPS類似RTMPT,增加了TLS/SSL的安全功能
2、拉流和推流
接一個直播必須理解拉流
和推流
概念。
-
推流
:比如,你在斧牙開了一個直播,攝像頭一直對着人或屏幕進行錄製,在這個過程中,就是往服務端裏進行推流。 -
拉流
:和推流相反,拉流就是你在看別人直播的過程中,頁面上播放的視頻就是從服務端進行的拉流。
二、舉個栗子
下面舉個例子來說明一下推流和分流的相關概念:
看下斧牙直播的直播類型:
1、PC端推流:
捕捉屏幕推流直播:
攝像頭推流直播:
2、安卓和IOS推流
下面再看下拉流的幾種形式:
3、web端拉流
4、Android端拉流
三、騰訊雲拉流推流實戰操作
騰訊雲有免費的40G流量供我們玩耍,搜索雲直播並進入。需要添加一個推流域名
和拉流域名
。推流域名會給我們提供,我們只需要配置一個拉流域名即可。
推流域名直接添加即可,下面操作下拉流域名的配置:
1、進入到域名管理
2、選擇播放域名,添加一個自己已經備案好的
域名。
3、複製cname
添加好後有個感嘆號,將裏面的cname複製到你的域名供應商。
4、打開你供應商平臺(阿里雲、騰訊雲、百度雲等)的域名解析列表,將cname配置到指定域名的記錄值
中即可。
5、稍等十分鐘左右,就會變綠了
這時候,推流域名和播放域名(拉流域名)就配置好了,下一步就是來生成
推流域名
和拉流域名
提供給客戶端就行啦
生成推流域名和拉流域名
騰訊雲直播域名配置管理界面也提供了生成方式,直接填入StreamName
即可生成!
或者也可以使用官方提供了一個php版本的生成方式:
/**
* 獲取推流地址
* 如果不傳key和過期時間,將返回不含防盜鏈的url
* @param domain 您用來推流的域名
* streamName 您用來區別不同推流地址的唯一流名稱
* key 安全密鑰
* time 過期時間 sample 2016-11-12 12:00:00
* @return String url
*/
function getPushUrl($domain, $streamName, $key = null, $time = null){
if($key && $time){
$txTime = strtoupper(base_convert(strtotime($time),10,16));
//txSecret = MD5( KEY + streamName + txTime )
$txSecret = md5($key.$streamName.$txTime);
$ext_str = "?".http_build_query(array(
"txSecret"=> $txSecret,
"txTime"=> $txTime
));
}
return "rtmp://".$domain."/live/".$streamName . (isset($ext_str) ? $ext_str : "");
}
echo getPushUrl("123.test.com","123456","69e0daf7234b01f257a7adb9f807ae9f","2016-09-11 20:08:07");
特別提醒
:播放地址的StreamName和推流地址的StreamName必須一致。
至此,推流地址
和播放地址
就能生成了,我們將這倆地址提供給客戶端即可!
四、進行直播測試
由於博主經濟條件有限,只有一個手機,只能通過手機推流,電腦拉流來進行測試。
首先測推流,我用uniapp組件裏的一個推流demo實現了推流:
推流成功後,開始拉流,提供一個線上的拉流平臺,這樣,用一個手機就能測了。
至此,推流拉流的工作就實現啦。剩下的都是一些邏輯處理了,開房間,彈幕,刷禮物等……
五、總結
推薦一個php方面的七牛雲和騰訊雲直播sdk,裏面封裝了一些東西還是比較方便的。