最近公司要求做視頻直播,之前工作幾年,視頻一直都是弱項,沒怎么接觸過,現(xiàn)在正好有機(jī)會深入的去了解一下,記錄一些遇到的坑和需要用到的東西.
~公司要求,用HLS協(xié)議,要求可以播放m3u8格式的,當(dāng)時一聽一臉懵逼,什么鬼
~查詢的過程中,參考了很多同行的博客,有很多知識點都很分散,也有很多Demo,第三方SDK,下載不能用等等,再此匯總一下,方便大家參考
知識點:
下面的知識點還有術(shù)語,在查詢文檔的過程中,可能會經(jīng)常遇到。
M3U8:可以做多碼率的適配,根據(jù)網(wǎng)絡(luò)帶寬,客戶端會選擇一個適合自己碼率的文件進(jìn)行播放,保證視頻流的流暢。
1.傳輸協(xié)議:
HLS:HTTP Live Streaming是一個由蘋果公司提出的基于HTTP的流媒體 網(wǎng)絡(luò)傳輸協(xié)議。服務(wù)器要求低,因為涉及到切片,延時會比較大,需要了解TS流
RTSP:攝像頭功能
RTMP:看下它與流媒體服務(wù)器交互的過程,RTMP協(xié)議的默認(rèn)端口是1935,采用TCP協(xié)議。并且需要了解FLV的封裝格式
RTP與RTCP等
2.視頻推流與視頻拉流工作過程解析
視頻推流端:就是將采集到的音頻,視頻數(shù)據(jù)通過流媒體協(xié)議發(fā)送到流媒體服務(wù)器
2.1 采集音視頻數(shù)據(jù)
iOS平臺上采集音視頻數(shù)據(jù),需要使用AVFoundation.Framework框架,從captureSession會話的回調(diào)中獲取音頻,視頻數(shù)據(jù)
2.2 硬編碼,軟編碼音視頻數(shù)據(jù)
軟編碼就是利用CPU資源來壓縮音視頻數(shù)據(jù),硬編碼與之相反。
軟編碼的話,現(xiàn)在廣泛采用FFmpeg庫結(jié)合編碼庫來實現(xiàn),F(xiàn)Fmpeg+X624來編碼視頻數(shù)據(jù)YUV/RGB輸出H264數(shù)據(jù),
FFmpeg+fdk_aac來編碼音頻數(shù)據(jù)PCM輸出AAC數(shù)據(jù)。
2.3 根據(jù)所選流媒體協(xié)議封包音視頻數(shù)據(jù)將音頻,視頻打包成packet
2.4 與服務(wù)器交互發(fā)送封包數(shù)據(jù)
根據(jù)所選流媒體協(xié)議,發(fā)送相應(yīng)指令連接服務(wù)器,連接服務(wù)器成功后,就可以發(fā)送packet數(shù)據(jù)了
3.拉流
拉流,就是從流媒體服務(wù)器獲取音頻,視頻數(shù)據(jù)
3.1解析協(xié)議
播放器端根據(jù)URL解析所用的流媒體協(xié)議(RTMP,HLS)
3.2解封裝
解封裝,就是demux的過程,從容器格式(FLV,TS)中,分離出音視頻數(shù)據(jù)
3.3解碼
解碼,就是把獲取到的數(shù)據(jù)解壓縮,恢復(fù)成原始數(shù)據(jù)。解碼就是將H264變成YUV,AAC變成PCM。
解碼可以使用軟解碼,硬解碼。
軟解碼就是利用CPU資源去解壓縮數(shù)據(jù),采用的方式是FFmpeg解碼。
硬解碼,對于iOS平臺來說,可以使用VideoToolbox.Framework(該框架只能在iOS 8.0及以上系統(tǒng)使用)
硬解碼視頻數(shù)據(jù)
3.4 渲染數(shù)據(jù)
采用OpenGL渲染YUV數(shù)據(jù),呈現(xiàn)視頻畫面。將PCM送入設(shè)備的硬件資源播放,產(chǎn)生聲音。
iOS播放流式音頻,使用Audio Queue 的方式,即,利用AudioToolbox.Framework 框架
上面就是一些簡單的知識點,匯總了一些,現(xiàn)在給大家推薦一些,DEMO和SDK,供大家參考
先說第三方SDK:
1.融云,http://www.rongcloud.cn/live
下載下來好用,調(diào)用也很簡單,集成很快,就是有點貴,要收費的哦,界面類似于,市面上大部分直播app,豎屏,有聊天室,可以送禮物等,不過不符合公司需求,pass
2.暴風(fēng)云直播, http://www.baofengcloud.com/apisdk/sdk/live/iossdk.html
不好用,大家可以去試試
3.網(wǎng)易云直播,http://dev.netease.im/docs?doc=devfunc_LiveStreaming
好像是收費的,價格還不便宜,一般公司可能也不會用,功能很強(qiáng)大,不符合需求,pass
4.騰訊直播,https://www.qcloud.com/solution/video.html
同樣收費,簡單的看了一下,功能很強(qiáng)大,不過還是不符合需求
剩下的SDK還有非常多,就不依依介紹了,更多資料復(fù)制下面的網(wǎng)站查看,有大神總結(jié)的很到位了
http://www.ccidnet.com/2016/0606/10143020.shtml
Demo:
雖然市面上的SDK很多,不過還是沒有特別符合需求的,所以就只能參考大神寫的Demo了
下面都是每個demo,都是經(jīng)測試可以用的,不過注意,不是直播,大家可以參考參考原理,找自己需要的東西,替換url進(jìn)行測試
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,都是很輕量級的,在她們的基礎(chǔ)上稍作修改就可以用了.
好壞就不做評價了,大家自己體會
另外說一句,如果要做功能很復(fù)雜的直播,最好用SDK
常用直播源:
鳳凰中文,http://zv.3gv.ifeng.com/zhongwen800k.m3u8
香港衛(wèi)視,http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8
如果還想要其他的網(wǎng)站:直播源大全
如果想了解更多的m3u8的資料:
http://blog.csdn.net/langeldep/article/details/8603045
iOS直播類App開發(fā)流程分解:
http://blog.sina.com.cn/s/blog_aa7beba30102w8ws.html
以上內(nèi)容,持續(xù)更新中,如有寫錯的地方,請指正,大家一起進(jìn)步
目前正在搭建框架中~~~~~~~~~~~~~~~~