(轉(zhuǎn)載自http://www.reibang.com/p/129e07b3e42f)
2016.10.27 09:57*?字數(shù) 2428?閱讀 9785評論 10喜歡 37
一奋蔚、前言
不知道為什么昔穴,今天突然就想跟大家分享一下最近火熱的視頻直播技術(shù)實現(xiàn)思路驱负。希望通過這種簡單快速的視頻直播方式,能幫助你在好基友面前小小的裝個逼踏拜。
當然,作為一個窮逼,我自然不會傻到去購買昂貴的軟尔觉、硬件設(shè)備來滿足我僅僅為了裝逼的一個小小需求俯萎。人生中有那么多逼要裝傲宜,但我們一定要切記,裝逼一定要裝的物美價廉夫啊,才能不失美談函卒。
二、實現(xiàn)原理
好了撇眯,言規(guī)正傳报嵌,如果你是這個方面的新人,那么我覺得在正式開始今天的話題之前熊榛,還是有必要跟大家簡單的分享一下視頻直播的實現(xiàn)原理锚国。如果你已經(jīng)有所了解,那么請直接越過這一個小節(jié)玄坦,因為我真的只會分享最容易幫助大家理解的實現(xiàn)原理血筑。
直播最簡單的實現(xiàn)原理
通過上圖可以看到,所謂的視頻直播其實就是通過錄相設(shè)備將采集到視頻數(shù)據(jù)以流的方式推送到服務(wù)器煎楣,然后我們觀看直播的時候云挟,以流的方式再從服務(wù)器拉取視頻數(shù)據(jù)。當然這個過程還牽涉到一系列復雜的編碼转质、丟包园欣、抖動、延時……等一系列的技術(shù)難點休蟹,但是這些都不在我們今天的討論范圍沸枯。我們只想安靜的做個簡單的裝逼直播而已日矫,所以關(guān)于直播的原理,你可以粗略的理解為一個大木桶上有兩根水管绑榴,一根進水哪轿,一根出水,就這么簡單翔怎。
本次的技術(shù)實現(xiàn)方案窃诉,進水的水管(視頻采集與推流)我選擇通過Android手機(進一步證明我窮),而出水的水管(視頻拉取與播放)我選擇通過H5的Video標簽來實現(xiàn)(因為我懶)赤套。也就是說飘痛,這次的直播思路,其實就是通過你手機的攝像頭容握,實時采集視頻數(shù)據(jù)宣脉,并推送到好友手機上打開的H5頁面中,實現(xiàn)視頻直播剔氏。
而剛才提到的所有技術(shù)難點我們暫且都不去深究塑猖,因為從成本角度來考慮,我決定選擇通過第三方的視頻云服務(wù)來作為我們底層的技術(shù)支撐谈跛。經(jīng)過簡單的挑選之后羊苟,今天我們先暫且選擇通過百度的LSS視頻直播服務(wù)來實現(xiàn)(因為我窮)。
三感憾、具體實現(xiàn)
首先蜡励,通過一張圖來幫助大家簡單了解一下LSS的使用步驟。
LSS使用步驟
1吹菱、創(chuàng)建直播會話
根據(jù)上圖巍虫,我們注冊并開通LSS服務(wù)后,第一步要做的是創(chuàng)建直播會話鳍刷。我們先來創(chuàng)建一個指定設(shè)置的直播會話占遥,如圖所示:
直播會話創(chuàng)建選項
這里大家可以看到我用一個紅框標識了重點部分。此處建議大家選擇一個合適的轉(zhuǎn)碼模板输瓜,因為默認的模板設(shè)置會導致最終視頻直播時瓦胎,服務(wù)器只做轉(zhuǎn)發(fā),保持輸入分辨率與碼率不變尤揣。這樣有兩個不妥之處:一是在用戶實際觀看時耗費的流量更大搔啊,延遲情況可能更加突出;二是在iPhone手機上北戏,你會發(fā)現(xiàn)用HTML5當中默認的Video是無法直播的负芋。這主要是因為iPhone手機默認對視頻格式支持的問題。下面列出iPhone主要支持的視頻格式:
1:H.264 視頻:最高支持 1080p嗜愈、60 fps旧蛾、High Profile level 4.2 編碼莽龟,其音頻為 AAC-LC 格式、最高支持 160 Kbps锨天、48kHz毯盈、立體聲,文件封包格式為 .m4v病袄、.mp4 和 .mov搂赋;
2:MPEG-4 視頻:最高支持 2.5 Mbps、640 x 480 像素益缠、30 fps脑奠、Simple Profile 編碼,其音頻為 AAC-LC 格式左刽、最高支持每聲道 160 Kbps捺信、48kHz酌媒、立體聲欠痴,文件封包格式為 .m4v、.mp4 和 .mov秒咨;
總而言之喇辽,在這里如果你想直接通過Video標簽來觀看后面的直播,這里就建議選擇一個合適的轉(zhuǎn)碼模板雨席,例如我只是用來裝個逼菩咨,犯不著跟錢過不去,所以選擇較低的640*360陡厘,而且實際上這個分辨率已經(jīng)能在手機上取得不錯的效果了抽米。
2走哺、實現(xiàn)Android端推流
首先下載LSS服務(wù)Adnroid推流端的SDK狡孔,然后做好相應(yīng)的配置。在這里有一個地方要特別提一下妹萨,這個SDK包里面一共包括了如下幾個文件:
SDK包含文件
關(guān)于jar文件的引入相信大家都不是問題谤饭。但關(guān)于so文件的引入标捺,由于官方給的幫助文檔還是基于Eclipse+ANT的引入方式(鄙視一個……),因此如果你使用的是Android Studio來作為開發(fā)工具揉抵,那么請按我下述的方法來操作:
1.在“src/main”目錄中新建名為“jniLibs”的目錄亡容;
2.將so文件復制、粘貼到“jniLibs”目錄內(nèi)冤今。
注:如果沒有引用so文件闺兢,可能會在程序執(zhí)行的時候加載類庫失敗,有類似如下的DEBUG提示——java.lang.UnsatisfiedLinkError: Couldn't load library xxxx from loader dalvik.system.PathClassLoader
引入了SDK后戏罢,接下來就要考慮實際的編碼實現(xiàn)了屋谭。這里我廢話就不多說了阱佛,直接示例程序的源代碼,以供大家參考戴而。具體請點擊如下地址下載:
當你下載代碼后凑术,需要將程序當中的推流地址換成你自己的實際地址。具體關(guān)于推流與拉流的地址所意,你可以點擊我們開始新創(chuàng)建的直播會話淮逊,進入會話詳情頁面,然后在這個地方獲取扶踊。
獲取視頻推流與拉取地址
最終完成的APP效果如下圖所示:
Android視頻采集與推送效果圖
3泄鹏、實現(xiàn)Web端拉流播放
在Web端拉流播放有很多種實現(xiàn)方式,你可以自由選擇使用第三方支持HLS的播放器秧耗。當然如果你希望能在直播時做一些更深層次的嘗試备籽,例如字幕、播放列表分井、廣告车猬、互動、直播授權(quán)等等尺锚,那么你也可以選擇使用百度自家的T5播放內(nèi)核珠闰。
而對于我來說僅僅為了裝逼的需求,顯然不足以推動我去繼續(xù)花費時間瘫辩,而且我需要的是別人能很輕松伏嗜、沒有任何限制的直接進入直播,不然我還怎么裝逼伐厌?因此我選擇了最簡單粗暴的方式承绸,就是直接做了一個適配移動端的H5頁面,然后在里面使用了video標簽挣轨,通過微信等方式直接分享給好友军熏。關(guān)鍵代碼如下:
從個人隱私角度來考慮,所以我對上述拉流地址中的關(guān)鍵部分采用了XXXXXXXXX來代替刃唐,請大家不要在意這些小細節(jié)羞迷。實際使用的時候換上你自己的地址就好了。
4画饥、裝逼時刻
好了衔瓮,接下來就是最后一步,你只需要把你剛做的移動端H5頁面上傳到你自己的虛擬空間或者云主機上抖甘,然后用微信掃描鏈接地址热鞍,并分享給你的女朋友(如果你真有的話……),或者你的好基友,就可以開啟裝逼模式了薇宠!切記偷办,裝逼莫太過,容易遭雷P……
四澄港、一點感慨
隨著信息技術(shù)的發(fā)展與開放椒涯,公有云技術(shù)的穩(wěn)步提升,之前的一些技術(shù)難點回梧,現(xiàn)在已經(jīng)不再是困擾我們的瓶頸废岂。從我個人來說,以視頻直播為例狱意,僅管我理解它的原理湖苞,也明白它的運行機制和關(guān)鍵的技術(shù)要點,但如果不是身在“云”的時代详囤,讓我從無到有搭建一套視頻直播的架構(gòu)并應(yīng)用于實際生產(chǎn)财骨,顯示不是一朝一夕的事情。而現(xiàn)在半天的時間藏姐,借助云服務(wù)隆箩,我就能快速完成一個裝逼的視頻直播功能。感恩這個時代包各!這是一個屬于我們技術(shù)人員的時代摘仅!
這次的分享先到這里靶庙,請允許我做個廣告问畅。如果大家覺得這篇文章能夠給你帶來一些小幫助,那么也想請大家順手幫我一個小忙六荒。點擊速課網(wǎng)的鏈接护姆,然后進入平臺注冊一個賬號(手機、郵箱或者第三方登錄都可以掏击,絕不會騷擾大家)卵皂,有時間的話請體驗一下我們的產(chǎn)品。速課網(wǎng)是一個專注于移動教學課件建設(shè)的平臺砚亭,目前已達成種子輪灯变,誠邀各位技術(shù)大神與運營牛人的加入。