iOS直播直播,頭都大了

隨着直播市場的火熱,市場大軍都逐步進入直播市場 ,騰訊旗下的NOW直播也不例外

先說說直播設計底層git

一 、流媒體

1 - 僞流媒體

1.1 掃盲:邊下載邊播放
1.2 僞流媒體:視頻不是實時播放的,先把視頻放在數據庫,再供客戶端訪問,好比:優酷,愛奇藝等github

1.3 特色:數據庫

邊下邊存,文件會保存.
遵照了 HTTP 協議,可是沒有遵照 RTMP 和 HLS 協議
可以實現快進和快退的功能
實現簡單,成本低服務器

2 實時流媒體

2.1 真正的流媒體,邊下邊播,但不會保存下載的文件markdown

2.2 特色:網絡

下載的文件不會保存
遵照了 RTMP 或者 HLS 協議
只能實現實時播放,不能快進或者快退
實現成本比較高,實現複雜框架

3 常見的流媒體協議: HLS(蘋果基於 HTTP 開發的流媒體協議),RTMP(Adobe 的私有協議),MMS (微軟).

HLS協議
1 HLS: HTTP Live Streaming 是蘋果公司實現的基於HTTP的流媒體傳輸協議,可實現流媒體的直播和點播,主要應用在iOS系統,爲iOS設備提供音視頻直播和點播方案.測試

2 直播原理:經過相關設備採集攝像頭的視頻和麥克風的音頻,並實時進行 H264視頻編碼和 AAC 音頻音頻編碼,並按照 HLS協議規範,轉換爲標準的 TS文件以及m3u8(是一個地址,裏面記錄了服務器多對應的文件)索引文件.編碼

3 HLS 點播:就是對 HTTP 進行分段播放,不一樣的就是在於對 HTTP 進行的分段很是小,所以能夠說, HLS 點播的重點就是對 HTTP 進行分段.(如今的分段技術比較常見不在贅述)spa

4 HLS 直播原理:和其餘的常見的直播協議(如: RTMP,RTSP,MMS)不一樣, 遵照HLS 協議的直播在客戶端接收到的並非完整的數據流. 即HLS 協議的服務器將最新獲取到的片斷進行分割爲小片斷,客戶端獲取服務器剛編好的最新的片斷進行播放.這樣服務器端不斷的獲取新的數據進行分割成新的片斷,客戶端不斷的從服務器端獲取最近的片斷進行播放.由此能夠說 HLS 是以點播的形式實現的直播.

5 HLS 的特色:因爲數據是經過 HTTP 傳輸的,因此不用考慮防火牆和代理的問題,因爲分割的時長很短,因此客戶端能夠很快的實現碼率切換,以適應不一樣的帶寬.HLS 協議的延遲通常會高於其餘協議的流媒體直播.
6 HLS 實現步驟採起視頻源和音頻源數據對原始數據盡心 H264和 ACC 編碼視頻和音頻數據封裝爲 MPEG-TS 包 HLS 分段生成策略以及 m3u8索引文件 HTTP 傳輸協議
注:須要說明的是 HLS 分段策略的分段時長以10S 爲最好.

二 、RTMP 協議

1 RTMP 實時消息傳輸協議,是如今比較經常使用的協議
2 RTMP使用原理:首先推流到 RTMP 服務器,而後再有 RTMP 服務器提供 RTMP 視頻服務.
注:需啊說明的是:RTMP 也提供 HLS, 將音視頻切位 ts 流,而後用戶能夠直接播放 m3u8流媒體.

3 RTMP協議規定
3.1 創建一個網絡鏈接
3.2 創建一個網絡流(發送多媒體的通道)
注:只能創建一個網絡鏈接,可是能夠創建多個網絡流

4 RTMP 協議使用步驟
4.1 握手:RTMP 協議都是以握手開始的

客戶端先發送 C0,C1兩個數據塊,服務器收到 C1或者 C2塊的時候開始發送 S0和 S1
客戶端收齊 S0和 S1的時候開始發送 C2,當服務器收齊 C0和 C1的時候開始發送 S2
當客戶端收到 S2同時服務器收到 C2 的時候,握手完成
4.2 創建鏈接:創建客戶端和服務器端的網絡鏈接

> 客戶端發送命令消息中的」connect」,到服務器,請求與一個服務器應用實例創建鏈接 > 服務器接收到請求後,發送確認消息,同時鏈接到請求中的鏈接實例 > 服務器發送設置帶寬協議消息到客戶端 > 客戶端接收到 設置帶寬 消息以後,發送確認消息到服務器 > 服務器發送用戶控制消息中的」stream」消息到客戶端 > 服務器發送消息命令中的」結果」消息到客戶端 4.3 創建流:創建客戶端和服務器端的」流鏈接」 > 客戶端發送消息命令中的」建立流」到服務器 > 服務器接收到」建立流」命令後,發送」結果」命令到客戶端 4.4 播放傳輸音視頻數據 > 客戶端發送」播放」命令到服務器 > 服務器收到消息後,發送 設置消息大小協議消息 > 服務器發送」 streambegin」,告知客戶端流 ID > 若播放成功的話,服務器發送」響應狀態」到客戶端.告知客戶端播放成功 > 服務器發送客戶端要播放是數據

流媒體的播放

1 HLS 的流媒體經過AVPlayer/AVPlayerViewController 和 MPMviePlayerController/MPMoviePlayerViewController 來實現.
2 RTMP 的流媒體要用第三方框架實現 如 FFMpeg ,IJKPlayer和 VLC 等
3 經常使用的流媒體框架:百度/阿里/騰訊/網易/鬥魚直播伴侶/七牛雲等

-項目主要是基於ijkplayer 的. 最好是打包成framework
. 我也準備好了一份打包好的分享給你們
-百度雲盤連接: http://pan.baidu.com/s/1pLjbecF 密碼: 5eac

快速開發,整個demo僅用了一天時間

打開項目記得用真機測試哦,否則模擬器會有語言跟不上 失真的現象哦
github -> https://github.com/ChinaArJun/Tencent-NOW



文/IOS_DeveIoper(簡書做者)
原文連接: http://www.jianshu.com/p/00747b41c741 著做權歸做者全部,轉載請聯繫做者得到受權,並標註「簡書做者」。
相關文章
相關標籤/搜索