視頻播放器

我們要做一款播放器首先是要對以上知識要了解的。

公司的業(yè)務涉及最多的是rtsp這塊。服務器端為rtsp流媒體服務器,客戶端也就是播放器庫采用FFMpeg進行解碼、OPenGL ES進行YUV視頻數(shù)據(jù)渲染。

播放器庫與服務器端進行交互,涉及到RTSP協(xié)議的請求,傳輸層協(xié)議采用的TCP、UDP協(xié)議,所以要對TCP連接的三次握手要熟悉,這其中也就涉及到網(wǎng)絡編程中的SOCKET編程知識了,BSD socket編程是需要掌握的。

播放器庫對從服務器上請求到的音頻、視頻rtp包,要進行解包,就是去掉一些協(xié)議的頭獲取到音視頻數(shù)據(jù)段。獲取到這些數(shù)據(jù)后,不能直接播放,需

要進行解碼操作。視頻解碼出來一般為Planar 4:2:0 YUV格式。要顯示YUV視頻圖像就需要利用OPenGL ES進行渲染了。

播放器在工作時,視頻數(shù)據(jù)要進行解碼放入數(shù)據(jù)緩存區(qū),數(shù)據(jù)緩存區(qū)的解碼后的數(shù)據(jù)被取出交給OpenGL進行渲染,所以多線程是必不可少的環(huán)節(jié)

了。開辟2個線程,一個線程進行解碼處理,另一個線程進行視頻數(shù)據(jù)的渲染。多線程中常使用的是POSIX thread多線程編程。

雖然開發(fā)的iOS播放器庫,但是底層的東西大部分是c語言的東西,比如用到開源庫FFMpeg,以及一些上層的對FFMpeg的封裝,數(shù)據(jù)緩存區(qū),所以c語言和數(shù)據(jù)結構的基礎要扎實,什么函數(shù)指針,內(nèi)存分配與管理,數(shù)據(jù)結構中的單鏈表那得玩得比較溜。

總結一下,需要具備的知識有

rtsp、sdp、tcp、udp、ip協(xié)議(rtsp的DESCRIBE、OPTION、SETUP、PLAY、PAUSE、TEARDOWN;tcp連接的三次握手/斷開的四次握手)

socket(bsd socket)

多線程(posix thread)

opengl es

FFmpeg(知道用它來解碼)

YUV420(知道它的原理與格式)

音視頻同步(時間戳的處理)

C語言指針(void *、函數(shù)指針、回調(diào)函數(shù))

內(nèi)存管理(堆區(qū)、棧區(qū)、靜態(tài)區(qū)、內(nèi)存對齊)

數(shù)據(jù)結構(單鏈表)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容