1. 程式人生 > >Ios-視頻直播-知識點匯總-持續更新

Ios-視頻直播-知識點匯總-持續更新

輕量級 平臺 依依 音頻 pcm shtml too 攝像 服務

最近公司要求做視頻直播,之前工作幾年,視頻一直都是弱項,沒怎麽接觸過,現在正好有機會深入的去了解一下,記錄一些遇到的坑和需要用到的東西.

~公司要求,用HLS協議,要求可以播放m3u8格式的,當時一聽一臉懵逼,什麽鬼

~查詢的過程中,參考了很多同行的博客,有很多知識點都很分散,也有很多Demo,第三方SDK,下載不能用等等,再此匯總一下,方便大家參考

知識點:

下面的知識點還有術語,在查詢文檔的過程中,可能會經常遇到。

M3U8:可以做多碼率的適配,根據網絡帶寬,客戶端會選擇一個適合自己碼率的文件進行播放,保證視頻流的流暢。

1.傳輸協議:

HLS:HTTP Live Streaming是一個由蘋果公司提出的基於HTTP的流媒體 網絡傳輸協議。服務器要求低,因為涉及到切片,延時會比較大,需要了解TS流

RTSP:攝像頭功能

RTMP:看下它與流媒體服務器交互的過程,RTMP協議的默認端口是1935,采用TCP協議。並且需要了解FLV的封裝格式

RTP與RTCP等

2.視頻推流與視頻拉流工作過程解析

視頻推流端:就是將采集到的音頻,視頻數據通過流媒體協議發送到流媒體服務器

2.1 采集音視頻數據

iOS平臺上采集音視頻數據,需要使用AVFoundation.Framework框架,從captureSession會話的回調中獲取音頻,視頻數據

2.2 硬編碼,軟編碼音視頻數據

軟編碼就是利用CPU資源來壓縮音視頻數據,硬編碼與之相反。

軟編碼的話,現在廣泛采用FFmpeg庫結合編碼庫來實現,FFmpeg+X624來編碼視頻數據YUV/RGB輸出H264數據,

FFmpeg+fdk_aac來編碼音頻數據PCM輸出AAC數據。

2.3 根據所選流媒體協議封包音視頻數據將音頻,視頻打包成packet

2.4 與服務器交互發送封包數據

根據所選流媒體協議,發送相應指令連接服務器,連接服務器成功後,就可以發送packet數據了

3.拉流

拉流,就是從流媒體服務器獲取音頻,視頻數據

3.1解析協議

播放器端根據URL解析所用的流媒體協議(RTMP,HLS)

3.2解封裝

解封裝,就是demux的過程,從容器格式(FLV,TS)中,分離出音視頻數據

3.3解碼

解碼,就是把獲取到的數據解壓縮,恢復成原始數據。解碼就是將H264變成YUV,AAC變成PCM。

解碼可以使用軟解碼,硬解碼。

軟解碼就是利用CPU資源去解壓縮數據,采用的方式是FFmpeg解碼。

硬解碼,對於iOS平臺來說,可以使用VideoToolbox.Framework(該框架只能在iOS 8.0及以上系統使用)

硬解碼視頻數據

3.4 渲染數據

采用OpenGL渲染YUV數據,呈現視頻畫面。將PCM送入設備的硬件資源播放,產生聲音。

iOS播放流式音頻,使用Audio Queue 的方式,即,利用AudioToolbox.Framework 框架

上面就是一些簡單的知識點,匯總了一些,現在給大家推薦一些,DEMO和SDK,供大家參考

先說第三方SDK:

1.融雲,http://www.rongcloud.cn/live

下載下來好用,調用也很簡單,集成很快,就是有點貴,要收費的哦,界面類似於,市面上大部分直播app,豎屏,有聊天室,可以送禮物等,不過不符合公司需求,pass

2.暴風雲直播, http://www.baofengcloud.com/apisdk/sdk/live/iossdk.html

不好用,大家可以去試試

3.網易雲直播,http://dev.netease.im/docs?doc=devfunc_LiveStreaming

好像是收費的,價格還不便宜,一般公司可能也不會用,功能很強大,不符合需求,pass

4.騰訊直播,https://www.qcloud.com/solution/video.html

同樣收費,簡單的看了一下,功能很強大,不過還是不符合需求

剩下的SDK還有非常多,就不依依介紹了,更多資料復制下面的網站查看,有大神總結的很到位了

http://www.ccidnet.com/2016/0606/10143020.shtml

Demo:

雖然市面上的SDK很多,不過還是沒有特別符合需求的,所以就只能參考大神寫的Demo了

下面都是每個demo,都是經測試可以用的,不過註意,不是直播,大家可以參考參考原理,找自己需要的東西,替換url進行測試

1.http://code.cocoachina.com/view/129748

2.http://code.cocoachina.com/view/128253

兩個都是基於AVplayer寫的

3.http://code.cocoachina.com/view/128343

基於MediaPlayer寫的

還有很多就不舉例,以上這3個demo,都是很輕量級的,在她們的基礎上稍作修改就可以用了.

好壞就不做評價了,大家自己體會

另外說一句,如果要做功能很復雜的直播,最好用SDK

常用直播源:

鳳凰中文,http://zv.3gv.ifeng.com/zhongwen800k.m3u8

香港衛視,http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8

如果還想要其他的網站:直播源大全

如果想了解更多的m3u8的資料:

http://blog.csdn.net/langeldep/article/details/8603045

iOS直播類App開發流程分解:

http://blog.sina.com.cn/s/blog_aa7beba30102w8ws.html

Ios-視頻直播-知識點匯總-持續更新