最近公司要求做視頻直播,之前工作幾年,視頻一直都是弱項(xiàng),沒(méi)怎么接觸過(guò),現(xiàn)在正好有機(jī)會(huì)深入的去了解一下,記錄一些遇到的坑和需要用到的東西.
~公司要求,用HLS協(xié)議,要求可以播放m3u8格式的,當(dāng)時(shí)一聽(tīng)一臉懵逼凝果,什么鬼
~查詢(xún)的過(guò)程中,參考了很多同行的博客具钥,有很多知識(shí)點(diǎn)都很分散豆村,也有很多Demo,第三方SDK骂删,下載不能用等等掌动,再此匯總一下,方便大家參考
知識(shí)點(diǎn):
下面的知識(shí)點(diǎn)還有術(shù)語(yǔ)宁玫,在查詢(xún)文檔的過(guò)程中粗恢,可能會(huì)經(jīng)常遇到。
M3U8:可以做多碼率的適配欧瘪,根據(jù)網(wǎng)絡(luò)帶寬眷射,客戶端會(huì)選擇一個(gè)適合自己碼率的文件進(jìn)行播放,保證視頻流的流暢佛掖。
1.傳輸協(xié)議:
HLS:HTTP Live Streaming是一個(gè)由蘋(píng)果公司提出的基于HTTP的流媒體 網(wǎng)絡(luò)傳輸協(xié)議妖碉。服務(wù)器要求低,因?yàn)樯婕暗角衅訒r(shí)會(huì)比較大芥被,需要了解TS流
RTSP:攝像頭功能
RTMP:看下它與流媒體服務(wù)器交互的過(guò)程欧宜,RTMP協(xié)議的默認(rèn)端口是1935,采用TCP協(xié)議拴魄。并且需要了解FLV的封裝格式
RTP與RTCP等
2.視頻推流與視頻拉流工作過(guò)程解析
視頻推流端:就是將采集到的音頻冗茸,視頻數(shù)據(jù)通過(guò)流媒體協(xié)議發(fā)送到流媒體服務(wù)器
2.1 采集音視頻數(shù)據(jù)
iOS平臺(tái)上采集音視頻數(shù)據(jù)席镀,需要使用AVFoundation.Framework框架,從captureSession會(huì)話的回調(diào)中獲取音頻夏漱,視頻數(shù)據(jù)
2.2 硬編碼豪诲,軟編碼音視頻數(shù)據(jù)
軟編碼就是利用CPU資源來(lái)壓縮音視頻數(shù)據(jù),硬編碼與之相反挂绰。
軟編碼的話屎篱,現(xiàn)在廣泛采用FFmpeg庫(kù)結(jié)合編碼庫(kù)來(lái)實(shí)現(xiàn),F(xiàn)Fmpeg+X624來(lái)編碼視頻數(shù)據(jù)YUV/RGB輸出H264數(shù)據(jù)葵蒂,
FFmpeg+fdk_aac來(lái)編碼音頻數(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的過(guò)程,從容器格式(FLV关贵,TS)中遇骑,分離出音視頻數(shù)據(jù)
3.3解碼
解碼,就是把獲取到的數(shù)據(jù)解壓縮揖曾,恢復(fù)成原始數(shù)據(jù)落萎。解碼就是將H264變成YUV,AAC變成PCM炭剪。
解碼可以使用軟解碼练链,硬解碼。
軟解碼就是利用CPU資源去解壓縮數(shù)據(jù)奴拦,采用的方式是FFmpeg解碼媒鼓。
硬解碼,對(duì)于iOS平臺(tái)來(lái)說(shuō)错妖,可以使用VideoToolbox.Framework(該框架只能在iOS 8.0及以上系統(tǒng)使用)
硬解碼視頻數(shù)據(jù)
3.4 渲染數(shù)據(jù)
采用OpenGL渲染YUV數(shù)據(jù)绿鸣,呈現(xiàn)視頻畫(huà)面。將PCM送入設(shè)備的硬件資源播放暂氯,產(chǎn)生聲音潮模。
iOS播放流式音頻,使用Audio Queue 的方式株旷,即再登,利用AudioToolbox.Framework 框架
上面就是一些簡(jiǎn)單的知識(shí)點(diǎn)尔邓,匯總了一些,現(xiàn)在給大家推薦一些锉矢,DEMO和SDK梯嗽,供大家參考
先說(shuō)第三方SDK:
1.融云,http://www.rongcloud.cn/live
下載下來(lái)好用沽损,調(diào)用也很簡(jiǎn)單灯节,集成很快,就是有點(diǎn)貴绵估,要收費(fèi)的哦炎疆,界面類(lèi)似于,市面上大部分直播app国裳,豎屏形入,有聊天室,可以送禮物等缝左,不過(guò)不符合公司需求亿遂,pass
2.暴風(fēng)云直播, http://www.baofengcloud.com/apisdk/sdk/live/iossdk.html
不好用,大家可以去試試
3.網(wǎng)易云直播渺杉,http://dev.netease.im/docs?doc=devfunc_LiveStreaming
好像是收費(fèi)的蛇数,價(jià)格還不便宜,一般公司可能也不會(huì)用是越,功能很強(qiáng)大耳舅,不符合需求,pass
4.騰訊直播,https://www.qcloud.com/solution/video.html
同樣收費(fèi),簡(jiǎn)單的看了一下倚评,功能很強(qiáng)大浦徊,不過(guò)還是不符合需求
剩下的SDK還有非常多,就不依依介紹了天梧,更多資料復(fù)制下面的網(wǎng)站查看辑畦,有大神總結(jié)的很到位了
http://www.ccidnet.com/2016/0606/10143020.shtml
Demo:
雖然市面上的SDK很多,不過(guò)還是沒(méi)有特別符合需求的腿倚,所以就只能參考大神寫(xiě)的Demo了
下面都是每個(gè)demo纯出,都是經(jīng)測(cè)試可以用的,不過(guò)注意,不是直播敷燎,大家可以參考參考原理暂筝,找自己需要的東西,替換url進(jìn)行測(cè)試
1.http://code.cocoachina.com/view/129748
2.http://code.cocoachina.com/view/128253
兩個(gè)都是基于AVplayer寫(xiě)的
3.http://code.cocoachina.com/view/128343?
基于MediaPlayer寫(xiě)的?
還有很多就不舉例硬贯,以上這3個(gè)demo焕襟,都是很輕量級(jí)的,在她們的基礎(chǔ)上稍作修改就可以用了.
好壞就不做評(píng)價(jià)了饭豹,大家自己體會(huì)
另外說(shuō)一句鸵赖,如果要做功能很復(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直播類(lèi)App開(kāi)發(fā)流程分解:
http://blog.sina.com.cn/s/blog_aa7beba30102w8ws.html
以上內(nèi)容,持續(xù)更新中它褪,如有寫(xiě)錯(cuò)的地方饵骨,請(qǐng)指正,大家一起進(jìn)步
目前正在搭建框架中~~~~~~~~~~~~~~~~