原文地址: https://blog.csdn.net/JerryWu145/article/details/79149470
首先,向雷霄驊致敬
必備知識(shí):
c語(yǔ)言 及其 開(kāi)發(fā)環(huán)境
視頻播放器的原理
播放視頻文件的流程:
封裝格式數(shù)據(jù)(即FLV、MKV、MP4等等視頻文件)
通過(guò) 將視頻數(shù)據(jù)和音頻數(shù)據(jù)進(jìn)行解析
得到 音頻壓縮數(shù)據(jù)(aac mp3 等) 和視頻壓縮數(shù)據(jù)(h.264 mpeg2 等)
(需要注意的是,這些壓縮數(shù)據(jù) 占用內(nèi)存空間小,而視頻壓縮數(shù)據(jù)又稱(chēng)碼流,不能直接用于顯示)
音頻
音頻壓縮數(shù)據(jù) 進(jìn)行 音頻解碼 得到 音頻采樣數(shù)據(jù) (即 pcm等)
同樣 視頻也是類(lèi)似的
視頻壓縮數(shù)據(jù) 進(jìn)行 視頻解碼 得到 視頻像素?cái)?shù)據(jù)(即 yuv 等)
然后,將視頻像素?cái)?shù)據(jù) 和音頻采樣數(shù)據(jù) 進(jìn)行 視音頻同步 從而呈現(xiàn)給我們視頻和音頻享受
備注:
1.通過(guò)mediaoinfo能夠看到文件的一些常用信息 比如 視頻格式 音頻 平均混合碼率等 視頻分辨率 音頻采樣率
2.視頻封裝格式中的 MPEG2-TS格式 特點(diǎn):不包含文件頭,由數(shù)據(jù)大小固定的ts packet組成,所以此類(lèi)型的文件如果文件頭丟失,也能正常播放;另一種 FLVg格式 特點(diǎn):包含文件頭,數(shù)據(jù)有大小不固定的tag構(gòu)成,所以正因?yàn)橛形募^,所以當(dāng)文件開(kāi)頭丟失的時(shí)候就會(huì)導(dǎo)致不能正常播放。
3.上面說(shuō)的視頻編碼數(shù)據(jù),其實(shí)是對(duì)視頻像素?cái)?shù)據(jù)(RGB YUV等)壓縮成的視頻碼流,從而降低視頻的數(shù)據(jù)量,一般如果直接用視頻像素?cái)?shù)據(jù)存儲(chǔ)視頻的話(huà),會(huì)占用很多物理空間。 目前最常用的,就是H.264,目前90%都在使用h.264視頻編碼格式,而MPEG2 現(xiàn)在一些數(shù)字電視在使用。查看視頻編碼格式的軟件有Elecard Stream Eye

h.264編碼格式
他的存儲(chǔ)方式是將視頻的畫(huà)面按照單位存儲(chǔ),即1幀畫(huà)面經(jīng)過(guò)壓縮編碼后,存儲(chǔ)到1個(gè)NALU單位中,但是他的壓縮方法很復(fù)雜,包含了幀內(nèi)預(yù)測(cè)、幀間預(yù)測(cè)、熵編碼、環(huán)路濾波等環(huán)節(jié)構(gòu)成。比較復(fù)雜,所以暫不深究。
H.264的優(yōu)點(diǎn)是可以將圖像數(shù)據(jù)壓縮至100倍以上,即100m的圖像數(shù)據(jù)可以用其壓縮至1m。


可見(jiàn)h264編碼格式比較負(fù)責(zé),她首先將視頻圖像進(jìn)行網(wǎng)格劃分,然后對(duì)于復(fù)雜的圖像,再進(jìn)行網(wǎng)格劃分,計(jì)算獲取圖像的運(yùn)動(dòng)矢量等信息其中I幀 會(huì)把圖像直接進(jìn)行存儲(chǔ),而P幀會(huì)預(yù)測(cè)運(yùn)動(dòng)矢量,跟I幀進(jìn)行參考,B幀跟P幀類(lèi)似但做的事情更多。
音頻編碼數(shù)據(jù)
作用:將音頻編碼數(shù)據(jù)(pcm等)壓縮成音頻碼流,從而降低音頻的數(shù)據(jù)量,但是其實(shí)不需要壓縮,也能夠播放。
aac目前是主流

AAC存儲(chǔ)方式是由大小不固定的ADTS構(gòu)成,壓縮方法比較復(fù)雜,可以將音頻數(shù)據(jù)壓縮10倍以上
視頻像素?cái)?shù)據(jù)(視頻解碼之后的數(shù)據(jù),體積會(huì)變大100倍,像素?cái)?shù)據(jù)就是送給顯卡用于顯示的數(shù)據(jù))
作用:
保存了從屏幕左上角開(kāi)始知道所有每個(gè)像素點(diǎn)的像素值
常見(jiàn)的格式:RGB24,RGB32,YUV420P,YUV422P,YUV444P(Y包含亮度信息,UA包含色度信息,YUV對(duì)色度信息采用更狠的壓縮方案,從而提高壓縮效率,因?yàn)槿搜蹖?duì)亮度敏感,二隊(duì)色度不太敏感uv的值只有y的1/4)
最常用的是YUV420P.
特點(diǎn):視頻像素?cái)?shù)據(jù)體積很大,一般情況下1小時(shí)高興視頻的RGB24格式的數(shù)據(jù)體積為
360025192010803=559.9Gbyte(假定幀率為25HZ,取樣精度8bit,RGB是每個(gè)像素點(diǎn)占用3字節(jié))
YUV格式像素?cái)?shù)據(jù)查看工具是:YUV player
音頻采樣數(shù)據(jù)(音樂(lè)中記錄聲音的數(shù)據(jù))
作用:保存了音頻中的而每個(gè)采樣點(diǎn)的值
特點(diǎn):音頻采樣數(shù)據(jù)體積很大,一般情況下一首4分鐘的pcm格式的歌曲體積為
4604410022=42.4MByte(假定采樣率44100Hz,采樣精度為16bit,立體聲道)
PCM查看工具:Adobe Audition