天天看點

iOS視訊直播又一大神開源項目、RTMP 協定随着直播市場的火熱,市場大軍都逐漸進入直播市場 ,騰訊旗下的NOW直播也不例外

效果圖如下

iOS視訊直播又一大神開源項目、RTMP 協定随着直播市場的火熱,市場大軍都逐漸進入直播市場 ,騰訊旗下的NOW直播也不例外

NowGif.gif

->

iOS視訊直播又一大神開源項目、RTMP 協定随着直播市場的火熱,市場大軍都逐漸進入直播市場 ,騰訊旗下的NOW直播也不例外

4349FA93-F15B-4287-9162-3AA27B223A72.png

iOS視訊直播又一大神開源項目、RTMP 協定随着直播市場的火熱,市場大軍都逐漸進入直播市場 ,騰訊旗下的NOW直播也不例外

FA783124-4B81-455F-A6E6-461ACA874478.png

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

先說說直播設計底層

一 、流媒體

1 - 僞流媒體

1.1 掃盲:邊下載下傳邊播放

1.2 僞流媒體:視訊不是實時播放的,先把視訊放在資料庫,再供用戶端通路,比如:優酷,愛奇藝等

1.3 特點:

邊下邊存,檔案會儲存.

遵守了 HTTP 協定,但是沒有遵守 RTMP 和 HLS 協定

能夠實作快進和快退的功能

實作簡單,成本低

2 實時流媒體

2.1 真正的流媒體,邊下邊播,但不會儲存下載下傳的檔案

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 進行分段.(現在的分段技術比較常見不在贅述)

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

著作權歸作者所有,轉載請聯系作者獲得授權,并标注“簡書作者”。

繼續閱讀