視頻編碼的主要作用是將視頻像素?cái)?shù)據(jù)(RGB担猛,YUV等)壓縮成為視頻碼流幕垦,從而降低視頻的數(shù)據(jù)量。如果視頻不經(jīng)過壓縮編碼的話傅联,體積通常是非常大的先改,一部電影可能就要上百G的空間。視頻編碼是視音頻技術(shù)中最重要的技術(shù)之一蒸走。視頻碼流的數(shù)據(jù)量占了視音頻總數(shù)據(jù)量的絕大部分仇奶。高效率的視頻編碼在同等的碼率下,可以獲得更高的視頻質(zhì)量比驻。
基礎(chǔ)知識(shí)詳見:
https://blog.csdn.net/leixiaohua1020/article/details/18893769
視頻播放的幾種方式:
MediaPlayer+SurfaceView或者textureview
surfaceView和textureView區(qū)別:
應(yīng)用程序的視頻或者opengl內(nèi)容往往是顯示在一個(gè)特別的UI控件中:SurfaceView该溯。SurfaceView的工作方式是創(chuàng)建一個(gè)置于應(yīng)用窗口之后的新窗口。這種 方式的效率非常高别惦,因?yàn)镾urfaceView窗口刷新的時(shí)候不需要重繪應(yīng)用程序的窗口(android普通窗口的視圖繪制機(jī)制是一層一層的狈茉,任何一個(gè)子元素或者 是局部的刷新都會(huì)導(dǎo)致整個(gè)視圖結(jié)構(gòu)全部重繪一次,因此效率非常低下掸掸,不過滿足普通應(yīng)用界面的需求還是綽綽有余)氯庆,但是SurfaceView也有一些非常 不便的限制。
因?yàn)镾urfaceView的內(nèi)容不在應(yīng)用窗口上,所以不能使用變換(平移点晴、縮放、旋轉(zhuǎn)等)悯周。也難以放在ListView或者ScrollView中粒督,不能使用UI控件的一些特性比如View.setAlpha()。
為了解決這個(gè)問題 Android 4.0中引入了TextureView禽翼。
TextureView與SurfaceView相比屠橄,TextureView并沒有創(chuàng)建一個(gè)單獨(dú)的Surface用來繪制,這使得它可以像一般的View一樣執(zhí)行一些變換操作闰挡,設(shè)置透明度等锐墙。另外,Textureview必須在硬件加速開啟的窗口中长酗。
https://github.com/linsea/UniversalVideoView
videView
原生封裝的MediaPlayer+SurfaceView溪北,不支持自定義控制ui,同上面的方式一樣夺脾,只支持3gp之拨,mp4.
ijkplayer
很多大廠用的這個(gè),支持拓展so庫支持各種視頻格式咧叭,各種編碼蚀乔。
https://github.com/jiajunhui/PlayerBase
https://github.com/Bilibili/ijkplayer
ExoPlayer
是構(gòu)建在Android低水平媒體API之上的一個(gè)應(yīng)用層媒體播放器。和Android內(nèi)置的媒體播放器相比菲茬,ExoPlayer有許多優(yōu)點(diǎn)吉挣。ExoPlayer支持內(nèi)置的媒體播放器支持的所有格式外加自適應(yīng)格式DASH和SmoothStreaming。ExoPlayer可以被高度定制和擴(kuò)展以適應(yīng)不同的使用場(chǎng)景婉弹。
ExoPlayer庫的核心是ExoPlayer接口睬魂。ExoPlayer公開了傳統(tǒng)的高水平媒體播放器的功能,例如媒體緩沖马胧,播放汉买,暫停和快進(jìn)功能。ExoPlayer實(shí)現(xiàn)旨在對(duì)正在播放的媒體類型佩脊,存儲(chǔ)方式和位置以及渲染方式做出一些假設(shè)(因此幾乎沒有限制)蛙粘。ExoPlayer沒有直接實(shí)現(xiàn)媒體文件的加載和渲染,而是把這些工作委托給了在創(chuàng)建播放器或者播放器準(zhǔn)備好播放的時(shí)候注入的組件