本文來自七牛雲Android 多媒體開發工程師盧俊的技術分享,即時通信網有改動。php
這是由一篇個人演講稿整理出來的文章,目標讀者是對實時音視頻開發感興趣可是又不知道如何下手的初學者們,但願把個人經驗分享出來,對你們有所幫助。html
學習交流:數據庫
- 即時通信開發交流3羣:185926912[推薦]編程
- 移動端IM開發入門文章:《新手入門一篇就夠:從零開發移動端IM》小程序
(本文同步發佈於:http://www.52im.net/thread-1620-1-1.html)微信小程序
<ignore_js_op>
盧俊:七牛雲直播客戶端團隊技術負責人。擁有豐富的音視頻領域的開發和實戰經驗,前後開發過Android播放SDK /推流SDK,短視頻SDK,並主導了七牛連麥系統的設計和實現。服務過上百家直播客戶,包括熊貓、全民、龍珠、汽車之家、懂球帝等。安全
《實時語音聊天中的音頻處理與編碼壓縮技術簡述》
《網易視頻雲技術分享:音頻處理與壓縮技術快速入門》
《學習RFC3550:RTP/RTCP實時傳輸協議基礎知識》
《基於RTMP數據傳輸協議的實時流媒體技術研究(論文全文)》
《淺談開發實時視頻直播平臺的技術要點》
《Android直播入門實踐:動手搭建一套簡單的直播系統》
《理論聯繫實際:實現一個簡單地基於HTML5的實時視頻直播》
《福利貼:最全實時音視頻開發要用到的開源工程彙總》
《實時視頻直播客戶端技術盤點:Native、HTML五、WebRTC、微信小程序》服務器
常常收到一些網友的來信或者留言,反饋以下這樣的困惑:微信
「我是一名應屆畢業生,該如何快速地成長起來」 「我只懂 C/C++,是學 Android 開發有前途,仍是 iOS 開發有前途?」 「我是一名 Android/iOS 開發,已經能夠獨立完成一個完整的 App 開發上線,該如何繼續提高?」 「我想從事音視頻開發,該如何入門? 如何進階 ?」網絡
很高興看到你們有這樣的問題,由於這也從側面反映了你是一個積極向上,想不斷努力來提高本身的人。
我就先從一個簡單的問題聊起,「到底 Android 開發有前途仍是 iOS 開發有前途?」
其實這個問題跟 「PHP 是否是世界上最好的語言同樣」,只會引起爭論,卻沒有什麼實際價值,在我看來,不管是 Windows、Linux、Android 仍是 iOS 開發,都沒有什麼優劣之分。
它們其實都有着不少的共同點,那就是:
但不管什麼平臺,他們的學習曲線實際上是相似的,都要經歷差很少以下的環節:
當你已經走到第 4 步了後,每每就會感受遇到了瓶頸,產生如文章開頭的問題,下一步何去何從 ?
其實我一直有一個觀點,就是:
「基於平臺的 API 作應用開發,並非一個能夠走得多遠的方向,真正有價值的地方在於與具體的業務方向結合」。
具體點說,好比:
在具體的業務領域,你能夠慢慢沉澱下來,用本身的努力和時間換來對領域知識的深刻理解和積累,逐漸從一個開發小白走向最懂這個行業的專家。
今天呢,我就主要跟你們分享下,若是你對實時音視頻這個領域感興趣,應該如何入門和提升 ?
雖然一篇文章沒法把音視頻開發的知識點都介紹清楚,可是大概的學習路線仍是能夠梳理一下的,咱們先看看下面這張圖:
<ignore_js_op>
其實說白了,音視頻開發,就是要掌握圖像、音頻、視頻的基礎知識,而且學會如何對它們進行採集、渲染、處理、傳輸等一系列的開發和應用。
具體的技術內容以下:
每個門類,均可以深挖,衍生出一個又一個充滿技術挑戰的話題,好比:如何更高效地渲染畫面、如何提升音視頻的壓縮比,如何優化弱網下的音視頻數據傳輸等等。
其實,音視頻開發的技術積累,也沒有那麼難,帶着問題去 Google,帶着任務去實踐,一切都不是問題,咱們就從上面說的 4 個方向,逐個探索一下,有哪些知識點,是要咱們去了解和掌握的。
無論怎麼說,實時音視頻開發方面的理論基礎是必需要有所瞭解的,好比如下系列文章:
另外,《移動端實時音視頻直播技術詳解》這個系列文章能很好地對應上我剛說的這些技術點,建議讀一讀:
咱們分別具體來看看採集、渲染、處理、傳輸等技術點。
採集,它解決的是,數據從哪裏來的問題,那麼,數據究竟從哪裏來的呢 ?
<ignore_js_op>
其實不管在哪一個平臺,圖像、視頻最初都是來自攝像頭,而音頻最初都是來自麥克風,所以,作音視頻採集,就要掌握以下的技術知識。
1)系統的攝像頭採集接口是什麼,怎麼用 ?
好比:
Windows:DirectShow
Linux:V4L2
Android:Camera
iOS:AVCaptureSession
2)系統的攝像頭採集的參數怎麼配置,都是什麼含義 ?
好比:分辨率、幀率、預覽方向、對焦、閃光燈 等。
3)系統的攝像頭輸出的圖像/視頻數據,是什麼格式,不一樣格式有什麼區別 ?
好比:圖片:JPEG,視頻數據:NV21,NV12,I420 等
4)系統的麥克風採集接口是什麼,怎麼用 ?
好比:
Windows:DirectShow
Linux:ALSA & OSS
Android:AudioRecord
iOS:Audio Unit
5)系統的麥克風採集參數怎麼配置,都是什麼含義 ?
好比:採樣率,通道號,位寬 等
6)系統的麥克風輸出的音頻數據,是什麼格式?
好比:PCM
渲染,它解決的是,數據怎麼展示的問題,那麼,數據究竟怎麼展示呢 ?
<ignore_js_op>
其實不管在哪一個平臺,圖像、視頻最終都是要繪製到視圖上面,而音頻最終都是要輸出到揚聲器,所以,作音視頻渲染,就要掌握以下的技術知識。
1)系統提供了哪些 API 能夠繪製一張圖片或者一幀 YUV 圖像數據的 ?
好比:
Windows:DirectDraw, Direct3D, GDI,OpenGL 等
Linux: GDI, OpenGL 等
Android:ImageView,SurfaceView,TextureView,OpenGL 等
iOS: CoreGraphics,OpenGL 等
2)系統提供了哪些 API 能夠播放一個 mp3 或者 pcm 數據 ?
好比:
Windows:DirectSound 等
Linux:ALSA & OSS 等
Android:AudioTrack 等
iOS: AudioQueue 等
處理,它解決的是,數據怎麼加工的問題,那麼,數據究竟能夠怎麼加工呢 ?
首先,咱們看看圖像/音視頻的數據能夠作哪些加工 ?
<ignore_js_op>
其實不管在哪一個平臺,圖像和音視頻的加工,除了系統的 API,大多數都會依賴一些跨平臺的第三方庫的,經過掌握這些第三方庫的原理和使用方法,基本上就能夠知足平常音視頻處理工做了。
這些庫包括但不限於:
所以,學習和掌握這些第三方庫的使用,很是有必要。(以上這些第3方庫的詳細介紹和盤點,詳見《福利貼:最全實時音視頻開發要用到的開源工程彙總》)
傳輸,它解決的是,數據怎麼共享的問題,那麼,數據究竟怎麼共享呢 ?
共享,最重要的一點,就是協議。
我以爲互聯網之因此可以如此蓬勃地發展,將整個世界都緊密聯繫在一塊兒,實際上是離不開 W3C 這個委員會的巨大貢獻的,由於不管什麼數據,要想在不一樣的國家、不一樣設備之間互聯互通,離不開 「標準」,有了 「標準」,你們就能互相讀懂對方。
所以,研究音視頻傳輸,其實就是在研究協議,具體有哪些協議呢 ?
互聯網環境下的音視頻的傳輸,是一個很是有挑戰和價值的方向,爲了解決弱網下的傳輸延時、卡頓,提升用戶體驗,整個業界都在不斷地進行着深刻的探索和優化。
有關移動弱網的特性和討論是個很大話題,若有興趣能夠先讀讀如下幾篇文章:
限於篇幅緣由,個人經驗分享就到這裏了,實時音視頻開發的路很長,更多的仍是要靠本身去學習和實踐,帶着追求極致的精神去探索和優化,最終,我相信你們都能快速成長,成爲真正的行業專家!
[1] 實時音視頻開發的其它精華資料:
《實時語音聊天中的音頻處理與編碼壓縮技術簡述》
《網易視頻雲技術分享:音頻處理與壓縮技術快速入門》
《學習RFC3550:RTP/RTCP實時傳輸協議基礎知識》
《基於RTMP數據傳輸協議的實時流媒體技術研究(論文全文)》
《聲網架構師談實時音視頻雲的實現難點(視頻採訪)》
《淺談開發實時視頻直播平臺的技術要點》
《還在靠「喂喂喂」測試實時語音通話質量?本文教你科學的評測方法!》
《實現延遲低於500毫秒的1080P實時音視頻直播的實踐分享》
《移動端實時視頻直播技術實踐:如何作到實時秒開、流暢不卡》
《如何用最簡單的方法測試你的實時音視頻方案》
《技術揭祕:支持百萬級粉絲互動的Facebook實時視頻直播》
《簡述實時音視頻聊天中端到端加密(E2EE)的工做原理》
《理論聯繫實際:實現一個簡單地基於HTML5的實時視頻直播》
《IM實時音視頻聊天時的回聲消除技術詳解》
《淺談實時音視頻直播中直接影響用戶體驗的幾項關鍵技術指標》
《如何優化傳輸機制來實現實時音視頻的超低延遲?》
《首次披露:快手是如何作到百萬觀衆同場看直播仍能秒開且不卡頓的?》
《Android直播入門實踐:動手搭建一套簡單的直播系統》
《網易雲信實時視頻直播在TCP數據傳輸層的一些優化思路》
《實時音視頻聊天技術分享:面向不可靠網絡的抗丟包編解碼器》
《P2P技術如何將實時視頻直播帶寬下降75%?》
《專訪微信視頻技術負責人:微信實時視頻聊天技術的演進》
《騰訊音視頻實驗室:使用AI黑科技實現超低碼率的高清實時視頻聊天》
《微信團隊分享:微信每日億次實時音視頻聊天背後的技術解密》
《近期大熱的實時直播答題系統的實現思路與技術難點分享》
《福利貼:最全實時音視頻開發要用到的開源工程彙總》
《七牛雲技術分享:使用QUIC協議實現實時視頻直播0卡頓!》
《實時音視頻聊天中超低延遲架構的思考與技術實踐》
《理解實時音視頻聊天中的延時問題一篇就夠》
《實時視頻直播客戶端技術盤點:Native、HTML五、WebRTC、微信小程序》
>> 更多同類文章 ……
[2] 開源實時音視頻技術WebRTC的文章:
《開源實時音視頻技術WebRTC的現狀》
《簡述開源實時音視頻技術WebRTC的優缺點》
《訪談WebRTC標準之父:WebRTC的過去、如今和將來》
《良心分享:WebRTC 零基礎開發者教程(中文)[附件下載]》
《WebRTC實時音視頻技術的總體架構介紹》
《新手入門:到底什麼是WebRTC服務器,以及它是如何聯接通話的?》
《WebRTC實時音視頻技術基礎:基本架構和協議棧》
《淺談開發實時視頻直播平臺的技術要點》
《[觀點] WebRTC應該選擇H.264視頻編碼的四大理由》
《基於開源WebRTC開發實時音視頻靠譜嗎?第3方SDK有哪些?》
《開源實時音視頻技術WebRTC中RTP/RTCP數據傳輸協議的應用》
《簡述實時音視頻聊天中端到端加密(E2EE)的工做原理》
《實時通訊RTC技術棧之:視頻編解碼》
《開源實時音視頻技術WebRTC在Windows下的簡明編譯教程》
《網頁端實時音視頻技術WebRTC:看起來很美,但離生產應用還有多少坑要填?》
>> 更多同類文章 ……
(本文同步發佈於:http://www.52im.net/thread-1620-1-1.html)