實時音視訊技術入門提綱
1、成長的煩惱
經常收到一些網友的來信或者留言,反饋如下這樣的困惑:
“我是一名應屆畢業生,該如何快速地成長起來” “我只懂 C/C++,是學 Android 開發有前途,還是 iOS 開發有前途?” “我是一名 Android/iOS 開發,已經可以獨立完成一個完整的 App 開發上線,該如何繼續提升?” “我想從事音視訊開發,該如何入門? 如何進階 ?”
很高興看到大家有這樣的問題,因為這也從側面反映了你是一個積極向上,想不斷努力來提升自己的人。
我就先從一個簡單的問題聊起,“到底 Android 開發有前途還是 iOS 開發有前途?”
其實這個問題跟 “PHP 是不是世界上最好的語言一樣”,只會引發爭論,卻沒有什麼實際價值,在我看來,無論是 Windows、Linux、Android 還是 iOS 開發,都沒有什麼優劣之分。
當你已經走到第 4 步了後,往往就會感覺遇到了瓶頸,產生如文章開頭的問題,下一步何去何從 ?
在具體的業務領域,你可以慢慢沉澱下來,用自己的努力和時間換來對領域知識的深入理解和積累,逐漸從一個開發小白走向最懂這個行業的專家。
今天呢,我就主要跟大家分享下,如果你對實時音視訊這個領域感興趣,應該如何入門和提高 ?
2、實時音視訊開發包括哪些技術內容
雖然一篇文章無法把音視訊開發的知識點都介紹清楚,但是大概的學習路線還是可以梳理一下的,我們先看看下面這張圖:
其實說白了,音視訊開發,就是要掌握影像、音訊、視訊的基礎知識,並且學會如何對它們進行採集、渲染、處理、傳輸等一系列的開發和應用。
每一個門類,都可以深挖,衍生出一個又一個充滿技術挑戰的話題,比如:如何更高效地渲染畫面、如何提高音視訊的壓縮比,如何優化弱網下的音視訊資料傳輸等等。
其實,音視訊開發的技術積累,也沒有那麼難,帶著問題去 Google,帶著任務去實踐,一切都不是問題,我們就從上面說的 4 個方向,逐個探索一下,有哪些知識點,是要我們去了解和掌握的。
我們分別具體來看看採集、渲染、處理、傳輸等技術點。
3、具體技術點之採集
採集,它解決的是,資料從哪裡來的問題,那麼,資料究竟從哪裡來的呢 ?
其實無論在哪個平臺,影像、視訊最初都是來自攝像頭,而音訊最初都是來自麥克風,因此,做音視訊採集,就要掌握如下的技術知識。
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
4、具體技術點之渲染
渲染,它解決的是,資料怎麼展現的問題,那麼,資料究竟怎麼展現呢 ?
其實無論在哪個平臺,影像、視訊最終都是要繪製到檢視上面,而音訊最終都是要輸出到揚聲器,因此,做音視訊渲染,就要掌握如下的技術知識。
5、具體技術點之處理
處理,它解決的是,資料怎麼加工的問題,那麼,資料究竟可以怎麼加工呢 ?
首先,我們看看影像/音視訊的資料可以做哪些加工 ?
其實無論在哪個平臺,影像和音視訊的加工,除了系統的 API,大多數都會依賴一些跨平臺的第三方庫的,通過掌握這些第三方庫的原理和使用方法,基本上就可以滿足日常音視訊處理工作了。
這些庫包括但不限於:
1)影像處理:OpenGL,OpenCV,libyuv,ffmpeg 等;
2)視訊編解碼:x264,OpenH264,ffmpeg 等;
3)音訊處理:speexdsp,ffmpeg 等;
4)音訊編解碼:libfaac,opus,speex,ffmpeg 等。
因此,學習和掌握這些第三方庫的使用,非常有必要。
6、具體技術點之傳輸
傳輸,它解決的是,資料怎麼共享的問題,那麼,資料究竟怎麼共享呢 ?
共享,最重要的一點,就是協議。
我覺得網際網路之所以能夠如此蓬勃地發展,將整個世界都緊密聯絡在一起,其實是離不開 W3C 這個委員會的巨大貢獻的,因為無論什麼資料,要想在不同的國家、不同裝置之間互聯互通,離不開 “標準”,有了 “標準”,大家就能互相讀懂對方。
因此,研究音視訊傳輸,其實就是在研究協議,具體有哪些協議呢 ?
1)音視訊在傳輸前,怎麼打包的,如:FLV,ts,mpeg4 等;
2)直播推流,有哪些常見的協議,如:RTMP,RSTP 等;
3)直播拉流,有哪些常見的協議,如:RTMP,HLS,HDL,RTSP 等;
4)基於 UDP 的協議有哪些?如:RTP/RTCP,QUIC 等。
網際網路環境下的音視訊的傳輸,是一個非常有挑戰和價值的方向,為了解決弱網下的傳輸延時、卡頓,提高使用者體驗,整個業界都在不斷地進行著深入的探索和優化。
7、本文小結
限於篇幅原因,我的經驗分享就到這裡了,實時音視訊開發的路很長,更多的還是要靠自己去學習和實踐,帶著追求極致的精神去探索和優化,最終,我相信大家都能快速成長,成為真正的行業專家!
公眾號推薦:
相關文章
- 音視訊--音訊入門音訊
- 音視訊–音訊入門音訊
- 音視訊--視訊入門
- SVN技術交流提綱
- http技術交流提綱HTTP
- 實時音視訊入門學習:開源工程WebRTC的技術原理和使用淺析Web
- 重構技術交流提綱
- 從實時音視訊的微場景看混音技術
- 音視訊技術基礎
- 程式碼規範技術交流提綱
- 多執行緒技術交流提綱執行緒
- [活動回顧] 實時音視訊技術專場總結來啦!
- Javascript必知必會技術交流提綱JavaScript
- 實時音視訊互動系列(下):基於 WebRTC 技術的實戰解析Web
- 技術分享| 小程式實現音視訊通話
- uni-app技術分享| uni-app轉小程式_實時音視訊APP
- 超解析度技術在實時音視訊領域的研究與實踐
- 音視訊技術:視訊質量評價方法簡介
- 音視訊入門之音訊採集、編碼、播放音訊
- 基於webRTC技術 音訊和視訊,IM解Web音訊
- 視訊直播和實時音視訊區別調研
- 前端音視訊WebRTC實時通訊的核心前端Web
- Java程式設計複習提綱(上:入門語法)Java程式設計
- 音視訊技術開發週刊65期
- 音視訊技術開發週刊67期
- 音視訊技術開發週刊56期
- 實時通訊技術大亂鬥
- 音視訊學習 -- 弱網對抗技術相關實踐
- PsychoPy入門_03_視訊和音訊的呈現音訊
- 魔方實時通訊一對一音視訊元件元件
- RTN實時音視訊傳輸網路
- Android 音視訊入門:C語言基礎AndroidC語言
- MIT 最新技術:從靜音視訊中提取聲音MIT
- 即時通訊的語音回聲消除技術
- 音視訊基本概念和FFmpeg的簡單入門
- OpenCV官方提綱OpenCV
- 視訊通訊關鍵技術探索及實踐
- 一起來試玩!線上可程式設計互動的實時音視訊 Web SDK 入門教程程式設計Web