(轉)從開發小白到音視頻專家

從開發小白到音視頻專家

轉載:https://blog.csdn.net/zhangbijun1230/article/details/83658012數據庫

 

本文整理自盧俊的演講,目標讀者是對音視頻開發感興趣可是又不知道如何下手的初學者們,但願對你們有所幫助。編程

1. 成長的煩惱

常常收到一些網友的來信或者留言,反饋以下這樣的困惑:安全

「我是一名應屆畢業生,該如何快速地成長起來」 
「我只懂 C/C++,是學 Android 開發有前途,仍是 iOS 開發有前途?」 
「我是一名 Android/iOS 開發,已經能夠獨立完成一個完整的 App 開發上線,該如何繼續提高?」 
「我想從事音視頻開發,該如何入門? 如何進階 ?」

  

很高興看到你們有這樣的問題,由於這也從側面反映了你是一個積極向上,想不斷努力來提高本身的人。網絡

我就先從一個簡單的問題聊起,「到底 Android 開發有前途仍是 iOS 開發有前途?」框架

其實這個問題跟 「PHP 是否是世界上最好的語言同樣」,只會引起爭論,卻沒有什麼實際價值,在我看來,不管是 Windows、Linux、Android 仍是 iOS 開發,都沒有什麼優劣之分,它們其實都有着不少的共同點,那就是:編程語言

都是基於操做系統提供的 API 完成特定需求的實現學習

固然,也有些不一樣的地方,好比:大數據

系統的 API 和特性不一樣
編程語言不一樣,Windows/Linux 以 C/C++ 爲主,Android 以 Java 爲主,iOS 以 Object C 爲主等等

  但不管什麼平臺,他們的學習曲線實際上是相似的,都要經歷差很少以下的環節:優化

學習對應平臺的編程語言,如:C/C++,Java,Object C,Javascript 等
熟悉對應平臺提供的 API,如:UI 庫,網絡,文件,數據庫, 圖片處理,多媒體處理 等等
掌握平臺相關的特性、框架和原理,如:Windows 的 WINSOCK,ODBC,WPF 等,Unix 的設計哲學,Android 的四大組件,iOS 的 MVC 模式等等
經過具體的項目,熟悉和練手,達到可完成任意功能的開發

當你已經走到第 4 步了後,每每就會感受遇到了瓶頸,產生如文章開頭的問題,下一步何去何從 ?spa

其實我一直有一個觀點,就是:

「基於平臺的 API 作應用開發,並非一個能夠走得多遠的方向,真正有價值的地方在於與具體的業務方向結合」,好比:

網絡安全
音視頻
智能硬件
深度學習
大數據
其餘(好比:金融、通訊等

  

在具體的業務領域,你能夠慢慢沉澱下來,用本身的努力和時間換來對領域知識的深刻理解和積累,逐漸從一個開發小白走向最懂這個行業的專家。

今天呢,我就主要跟你們分享下,若是你對音視頻這個領域感興趣,應該如何入門和提升 ?

2.音視頻開發包括哪些內容

雖然一篇文章沒法把音視頻開發的知識點都介紹清楚,可是大概的學習路線仍是能夠梳理一下的,咱們先看看下面這張圖:

其實說白了,音視頻開發,就是要掌握圖像、音頻、視頻的基礎知識,而且學會如何對它們進行採集、渲染、處理、傳輸等一系列的開發和應用。

  • 採集:它解決的是,數據從哪裏來的問題
  • 渲染:它解決的是,數據怎麼展示的問題
  • 處理:它解決的是,數據怎麼加工的問題
  • 傳輸:它解決的是,數據怎麼共享的問題

每個門類,均可以深挖,衍生出一個又一個充滿技術挑戰的話題,好比:如何更高效地渲染畫面、如何提升音視頻的壓縮比,如何優化弱網下的音視頻數據傳輸等等。

其實,音視頻開發的技術積累,也沒有那麼難,帶着問題去 Google,帶着任務去實踐,一切都不是問題,咱們就從上面說的 4 個方向,逐個探索一下,有哪些知識點,是要咱們去了解和掌握的。

2.1 採集

採集,它解決的是,數據從哪裏來的問題,那麼,數據究竟從哪裏來的呢 ?

其實不管在哪一個平臺,圖像、視頻最初都是來自攝像頭,而音頻最初都是來自麥克風,所以,作音視頻採集,就要掌握以下的技術知識:

a. 系統的攝像頭採集接口是什麼,怎麼用?

好比:

Windows:DirectShow 
Linux:V4L2 
Android:Camera 
iOS:AVCaptureSession

  

b. 系統的攝像頭採集的參數怎麼配置,都是什麼含義 ?

好比:分辨率、幀率、預覽方向、對焦、閃光燈 等

c. 系統的攝像頭輸出的圖像/視頻數據,是什麼格式,不一樣格式有什麼區別 ?

好比:

圖片:JPEG; 
視頻數據:NV21,NV12,I420 等

  

d. 系統的麥克風採集接口是什麼,怎麼用 ?

好比:

Windows:DirectShow 
Linux:ALSA & OSS 
Android:AudioRecord 
iOS:Audio Unit

  

e. 系統的麥克風採集參數怎麼配置,都是什麼含義 ?

好比:

採樣率、通道號、位寬等

  

f. 系統的麥克風輸出的音頻數據,是什麼格式?

好比:

PCM

  

2.2 渲染

渲染,它解決的是,數據怎麼展示的問題,那麼,數據究竟怎麼展示呢 ?

其實不管在哪一個平臺,圖像、視頻最終都是要繪製到視圖上面,而音頻最終都是要輸出到揚聲器,所以,作音視頻渲染,就要掌握以下的技術知識:

a. 系統提供了哪些 API 能夠繪製一張圖片或者一幀 YUV 圖像數據的 ?

好比:

Windows:DirectDraw, Direct3D, GDI,OpenGL 等 
Linux: GDI, OpenGL 等 
Android:ImageView,SurfaceView,TextureView,OpenGL 等 
iOS: CoreGraphics,OpenGL 等

  

b. 系統提供了哪些 API 能夠播放一個 mp3 或者 pcm 數據 ?

好比:

Windows:DirectSound 等 
Linux:ALSA & OSS 等 
Android:AudioTrack 等 
iOS: AudioQueue 等

  

2.3 處理

處理,它解決的是,數據怎麼加工的問題,那麼,數據究竟能夠怎麼加工呢 ?

首先,咱們看看圖像/音視頻的數據能夠作哪些加工 ?

 

其實不管在哪一個平臺,圖像和音視頻的加工,除了系統的 API,大多數都會依賴一些跨平臺的第三方庫的,經過掌握這些第三方庫的原理和使用方法,基本上就能夠知足平常音視頻處理工做了,這些庫包括但不限於:

a. 圖像處理:OpenGL,OpenCV,libyuv,ffmpeg 等 
b. 視頻編解碼:x264,OpenH264,ffmpeg 等 
c. 音頻處理:speexdsp,ffmpeg 等 
d.音頻編解碼:libfaac,opus,speex,ffmpeg 等

  

所以,學習和掌握這些第三方庫的使用,很是有必要。

2.4 傳輸

傳輸,它解決的是,數據怎麼共享的問題,那麼,數據究竟怎麼共享呢 ?

共享,最重要的一點,就是協議。

我以爲互聯網之因此可以如此蓬勃地發展,將整個世界都緊密聯繫在一塊兒,實際上是離不開 W3C 這個委員會的巨大貢獻的,由於不管什麼數據,要想在不一樣的國家、不一樣設備之間互聯互通,離不開 「標準」,有了 「標準」,你們就能互相讀懂對方。

所以,研究音視頻傳輸,其實就是在研究協議,具體有哪些協議呢 ?

a. 音視頻在傳輸前,怎麼打包的,如:FLV,ts,mpeg4 等 
b. 直播推流,有哪些常見的協議,如:RTMP,RSTP 等 
c. 直播拉流,有哪些常見的協議,如:RTMP,HLS,HDL,RTSP 等 
d. 基於 UDP 的協議有哪些?如:RTP/RTCP,QUIC 等

  

互聯網環境下的音視頻的傳輸,是一個很是有挑戰和價值的方向,爲了解決弱網下的傳輸延時、卡頓,提升用戶體驗,整個業界都在不斷地進行着深刻的探索和優化。

3.小結

限於篇幅緣由,經驗分享就到這裏了,音視頻的路很長,更多的仍是要靠本身去學習和實踐,帶着追求極致的精神去探索和優化,相信你們都能快速成長,成爲真正的行業專家!

相關文章
相關標籤/搜索