Android音視頻開發;鬥魚直播實現

一、直播的本質

實時推送/拉取音視頻數據

 

二、視頻直播流程

視頻直播的流程可以分爲如下幾步:

(1)採集

(2)處理

(3)編碼和封裝

(4)推流到服務器

(5)服務器流分發

(6)播放器流播放

 

1、採集

視頻的採集涉及兩方面數據的採集:音頻採集和圖像採集,它們分別對應兩種完全不同的輸入源和數據格式。

(1)兩個傳感器:

CCD:圖像傳感器,用於圖像採集和處理,把圖像轉換爲電信號

拾音器:聲音傳感器,用於聲音採集和處理,把聲音轉換爲電信號

(2)格式:

視頻採樣數據 : 一般都是 YUV 或 RGB 格式

音頻採樣數據 :一般都是PCM格式

由於所採集的內容非常大,所以需要進行壓縮。常見的音頻壓縮格式有:MP3,AAC,HE-AAC,Opus,FLAC,Vorbis (Ogg),Speex 和 AMR等。視頻編碼壓縮成 H.264 等格式的數據分發出去。常見的視頻封裝格式有:MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、SWF、MOV、RMVB 和 WebM 等。

2、處理

視頻或者音頻完成採集之後得到原始數據,爲了增強一些現場效果或者加上一些額外的效果,我們一般會在將其編碼壓縮前進行處理,例如:美顏及水印。各種美顏和視頻添加特效的App都是基於GPUImage框架實現。

3、編碼和封裝

視頻編碼的意義:原始視頻數據存儲空間大。核心思想就是去除冗餘信息。

常見的視頻編碼器:

(1)H.264/AVC

(2)HEVC/H.265

(3)VP8

(4)VP9

(5)FFmpeg :是一個跨平臺的開源視頻框架,能實現如視頻編碼,解碼,轉碼,串流,播放等豐富的功能。其支持的視頻格式以及播放協議非常豐富,幾乎包含了所有音視頻編解碼、封裝格式以及播放協議。

封裝:是把編碼器生成的多媒體內容(視頻,音頻,字幕,章節信息等)混合封裝在一起的標準。

  • 常見的封裝格式:

(1)AVI 格式(後綴爲 .avi)

(2)DV-AVI 格式(後綴爲 .avi)

(3)QuickTime File Format 格式(後綴爲 .mov)

(4)MPEG 格式(文件後綴可以是 .mpg .mpeg .mpe .dat .vob .asf .3gp .mp4等)

(5)WMV 格式(後綴爲.wmv .asf)

(6)Real Video 格式(後綴爲 .rm .rmvb)

(7)Flash Video 格式(後綴爲 .flv)

(8)Matroska 格式(後綴爲 .mkv)

(9)MPEG2-TS 格式 (後綴爲 .ts)

4、推流

傳輸協議:

RTMP :實時消息傳輸協議,Adobe Systems公司爲Flash播放器和服務器之間音頻、視頻和數據傳輸開發的開放協議,因爲是開放協議所以都可以使用了。 RTMP協議用於對象、視頻、音頻的傳輸。

HLS(HTTP Live Streaming):是蘋果公司(Apple Inc.)實現的基於HTTP的流媒體傳輸協議

RTSP(Real Time Streaming Protocol):實時流傳送協議,是用來控制聲音或影像的多媒體串流協議, 由Real Networks和Netscape共同提出的

最後

如果你看到了這裏,覺得文章寫得不錯就給個讚唄!歡迎大家評論討論!如果你覺得那裏值得改進的,請給我留言。一定會認真查詢,修正不足,定期免費分享技術乾貨。感興趣的小夥伴可以點一下關注哦。謝謝!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章