網易視頻云技術分享:移動端播放器框架搭建

一、概述

目前,移動互聯網技術飛速發展,影響著人們生活的各個方面。據有關數據統計,2016年中國的移動互聯網用戶數已經超過8億。旅游,教育,購物,娛樂等方面都與之緊密聯系。其中最火的當屬移動直播,各種直播APP鋪天蓋地,而播放器是其中非常重要的部分,播放器的好壞直接影響到直播的用戶體驗。

如何打造一個適合移動直播的播放器呢?首先要保證功能強大,其次兼容性要好,能夠適用于絕大多數的手機,最后要保證輕量級,因為移動設備的內存和磁盤容量都是有限的。

二、播放器框架

對于一個播放器來說,需要包含如下幾個模塊:

1、初始化模塊

該模塊中主要做一些初始化的工作,包括播放器實例的創建,消息機制和

線程的創建,以及相關全局變量的初始化。

2、輸入模塊

輸入模塊包含請求流媒體數據和對流媒體數據進行分解(Demux)兩個部分。

對于移動直播,請求流媒體數據需要支持RTMP、HTTP和HLS協議。Demux模塊需要支持諸如FLV、TS等格式的解析,并將分解后的音視頻裸數據存放在相應的緩沖隊列中,用于后續的解碼。

3、解碼模塊

解碼模塊包含音頻解碼模塊和視頻解碼模塊,音視頻解碼需要分別在兩個

線程中進行,從輸入模塊的緩沖隊列中獲取音視頻裸數據,傳入對應的解碼器進行解碼,并將解碼后的音視頻數據幀存入相應的隊列中用于顯示。其中解碼可以采用軟件解碼和硬件解碼兩種方式:軟件解碼兼容性可容錯性較好,但是耗CPU性能;硬件解碼依賴于系統,Android采用MediaCodec(Android 4.1+),iOS采用VideoToolBox(iOS 8.0+)。兼容性和容錯性較差,好處是不耗CPU。

5、顯示模塊

該模塊主要將解碼后的音視頻數據幀展現出來。音頻和視頻的顯示也是分別

由兩個線程來執行,分別從解碼后的音視頻幀隊列中獲取音視頻幀進行播放,Android端音頻可以用AudioTrack或OpenSL ES進行播放,視頻可以用NativeWindow和Surface進行播放;iOS端音頻可以用AudioQueue或AudioUnit進行播放,視頻可以用OpenGL ES進行播放。

6、事物處理模塊

該模塊主要是對播放器進行一些邏輯控制,比如暫停,播放,seek,截圖等操作,以及一些播放過程中一些消息的反饋。


圖1 播放器框架

三、說明

將上述6個模塊有機的整合在一起,就可以完成一個播放器的開發,但是僅

僅這些還是不夠的。由于移動設備的特殊性,我們可能在播放過程中突然來電,查看QQ、微信等消息,完成這些后希望播放還能夠繼續。這就需要播放器能夠對這些操作有相應的應對措施。有些用戶希望APP切入后臺還能夠繼續播放,有些則不需要,這都需要我們做出相應的處理。并且移動設備的內存和磁盤空間較小,需要我們保證播放器功能完善的前提下包大小盡可能的小,我們可以對各個模塊中所用到的處理引擎進行裁剪,只保留我們所需的功能,這樣我們就可以保證APP的輕量級。

綜上所述,我們不僅要保證底層音視頻引擎高效的運轉,也要保證上層邏輯處理能夠滿足移動設備的特性,這樣我們就可以打造出一款功能完善,兼容性好的播放器。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,596評論 25 708
  • 現今移動直播技術上的挑戰要遠遠難于傳統設備或電腦直播,其完整的處理環節包括但不限于:音視頻采集、美顏/濾鏡/特效處...
    大榮紙閱讀 8,237評論 5 22
  • 月光溜進我的眸子里 圓滿的時候 我待你婚紗落地 殘缺的時候 我待你長發及腰 你用冷艷 攪動我的激情 你白皙的酮體 ...
    冷冬年閱讀 244評論 2 3
  • 我給身邊人帶來了無數的負能量。
    女巫鯊閱讀 177評論 0 0
  • 又是一年中秋了,咱家卻再無團圓。 兩年前,您選擇了這樣一個中秋團圓的前夜,撇下我們走了,而我不曾見您最后一面,聽您...
    熊小懶閱讀 368評論 2 1