音視頻開發基礎,MediaPlayer+SurfaceView,exoplayer,videoview,ijkplayer

最詳細的基礎知識

視頻編碼的主要作用是將視頻像素數據(RGB,YUV等)壓縮成爲視頻碼流,從而降低視頻的數據量。如果視頻不經過壓縮編碼的話,體積通常是非常大的,一部電影可能就要上百G的空間。視頻編碼是視音頻技術中最重要的技術之一。視頻碼流的數據量佔了視音頻總數據量的絕大部分。高效率的視頻編碼在同等的碼率下,可以獲得更高的視頻質量。

基礎知識詳見:

https://blog.csdn.net/leixiaohua1020/article/details/18893769

 

視頻播放的幾種方式:

MediaPlayer+SurfaceView或者textureview

surfaceView和textureView區別:

應用程序的視頻或者opengl內容往往是顯示在一個特別的UI控件中:SurfaceView。SurfaceView的工作方式是創建一個置於應用窗口之後的新窗口。這種 方式的效率非常高,因爲SurfaceView窗口刷新的時候不需要重繪應用程序的窗口(android普通窗口的視圖繪製機制是一層一層的,任何一個子元素或者 是局部的刷新都會導致整個視圖結構全部重繪一次,因此效率非常低下,不過滿足普通應用界面的需求還是綽綽有餘),但是SurfaceView也有一些非常  不便的限制。

因爲SurfaceView的內容不在應用窗口上,所以不能使用變換(平移、縮放、旋轉等)。也難以放在ListView或者ScrollView中,不能使用UI控件的一些特性比如View.setAlpha()。

爲了解決這個問題 Android 4.0中引入了TextureView。

TextureView與SurfaceView相比,TextureView並沒有創建一個單獨的Surface用來繪製,這使得它可以像一般的View一樣執行一些變換操作,設置透明度等。另外,Textureview必須在硬件加速開啓的窗口中。


https://github.com/linsea/UniversalVideoView

 

videView

原生封裝的MediaPlayer+SurfaceView,不支持自定義控制ui,同上面的方式一樣,只支持3gp,mp4.

ijkplayer

很多大廠用的這個,支持拓展so庫支持各種視頻格式,各種編碼。

https://github.com/jiajunhui/PlayerBase

https://github.com/Bilibili/ijkplayer

ExoPlayer

是構建在Android低水平媒體API之上的一個應用層媒體播放器。和Android內置的媒體播放器相比,ExoPlayer有許多優點。ExoPlayer支持內置的媒體播放器支持的所有格式外加自適應格式DASH和SmoothStreaming。ExoPlayer可以被高度定製和擴展以適應不同的使用場景。
ExoPlayer庫的核心是ExoPlayer接口。ExoPlayer公開了傳統的高水平媒體播放器的功能,例如媒體緩衝,播放,暫停和快進功能。ExoPlayer實現旨在對正在播放的媒體類型,存儲方式和位置以及渲染方式做出一些假設(因此幾乎沒有限制)。ExoPlayer沒有直接實現媒體文件的加載和渲染,而是把這些工作委託給了在創建播放器或者播放器準備好播放的時候注入的組件

https://github.com/google/ExoPlayer

 

 

 

 

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