我們早已經(jīng)進(jìn)入了數(shù)字多媒體時(shí)代,相信每天都會(huì)有數(shù)不清的男男女女,在手機(jī)或電腦上播放一部部令人熱血賁張的小電影。沒錯(cuò),視頻播放早已是信息時(shí)代的日常,花樣迭出的視頻播放器成為了手機(jī)、電腦中不可或缺的軟件。不過,你可知道這些名目繁多的視頻播放器要運(yùn)作起來,往往都離不開神級播放軟件FFmpeg?今天,就一起來談?wù)勔曨l播放和FFmpeg的那點(diǎn)事吧。
很多朋友都喜歡看電影,但可知到底是什么技術(shù)幫你把片子播出來呢?
一部小電影到底是如何播放出來的?
盡管我們每天都在看小電影之類的視頻,不過對視頻播放背后的原理,恐怕并不是每個(gè)朋友都會(huì)了解。我們平時(shí)看到的小電影有著各種各樣的格式,例如AVI、RMVB、MKV等等,但是這些格式并非是視頻之間的本質(zhì)區(qū)別——不同的格式往往只代表著不同的容器,容器內(nèi)封裝的具體視頻流、音頻流等內(nèi)容,才是一個(gè)視頻的本質(zhì)所在。
例如,AVI中可以封裝H.264編碼的視頻流,MKV也可以封裝H.264,但同時(shí)MKV還能夠封裝HEVC、VP9等視頻流。因此,MKV和MKV之間的區(qū)別,可能要比某個(gè)AVI和某個(gè)MKV之間的區(qū)別大得多。當(dāng)然,不同的容器也是有功能和性能上的區(qū)別的,例如MKV對各種編碼的兼容性就非常好,而AVI則有所局限,且不支持流媒體播放等。
不同的容器可以封裝各種視頻編碼
要播放某段視頻,播放軟件所需要做的,首先要支持某種容器,然后把視頻流、音頻流等內(nèi)容從容器中分離出來,進(jìn)而解碼、渲染,用戶就可以播放出視頻、音頻乃至字幕等內(nèi)容了。這個(gè)過程是比較繁瑣而且頗有技術(shù)含量的,世界上有著茫茫眾多規(guī)格的編碼格式,做一個(gè)播放器就意味著需要對這些東西吃得比較透,這無疑是相當(dāng)費(fèi)時(shí)費(fèi)力的。因此,很多視頻播放器實(shí)際上都使用了統(tǒng)一的解決方案——FFmpeg。
神級播放軟件FFmpeg:萬能播放器的根基
FFmepg是一套視頻音頻的完整解決方案,它提供了視頻解碼、編碼、后期處理等一系列功能,對世界上千奇百怪的視頻音頻編碼有著完善的支持。FFmpeg是在Linux平臺(tái)下開發(fā)的,完全開源,也可以在其他平臺(tái)編譯運(yùn)行。FFmpeg的名稱顯然是來自“MPEG”,而MPEG則是視頻編碼標(biāo)準(zhǔn)的制定者,從名字就可以看出,F(xiàn)Fmpeg旨在研究和MPEG相關(guān)的一系列技術(shù)。
FFmpeg提供了一整套視頻音頻解決方案,其中也包括了視頻解碼
FFmpeg的功能非常強(qiáng)大,雖然前文和標(biāo)題都說它是播放神器,但它的功能絕不僅僅限于播放。FFmpeg可以解碼諸多的視頻音頻編碼,它同時(shí)也提供了視頻音頻轉(zhuǎn)換、編碼、封裝的功能,還可以進(jìn)行視頻裁剪、縮放、色域轉(zhuǎn)換等一系列后期處理。不僅如此,F(xiàn)Fmpeg還支持HTTP、FTP、SMB等協(xié)議。可以說,無論你想要本地播片,還是轉(zhuǎn)換視頻格式,亦或是利用網(wǎng)絡(luò)看視頻,F(xiàn)Fmpeg都可以勝任。
使用FFmpeg作為解碼器是萬能播放器們的主流之選
FFmpeg項(xiàng)目起源于2000年,多年來,F(xiàn)Fmpeg一直在進(jìn)化。FFmpeg項(xiàng)目在2011年分裂出了Libav項(xiàng)目,該項(xiàng)目誕生出了迄今為止最強(qiáng)力的視頻解碼器LAV。無論對于軟硬件,LAV解碼器都有著頗為完善的支持,大量播放軟件都可以調(diào)用LAV解碼,而LAV本身也可以利用各種顯卡進(jìn)行視頻硬解。想要用電腦播放難搞的4K HDR藍(lán)光?LAV絕對是最好的解決方案。
基于FFmpeg的LAV是目前最強(qiáng)的視頻解碼器
FFmpeg之所以是神,不僅僅是由于自身的強(qiáng)大,還在于對業(yè)界的影響力。很多播放器都宣稱自己多么多么萬能,支持先進(jìn)的4K乃至8K視頻播放,乍看這播放器搞定了世界上如此繁雜的視頻容器、視頻音頻編碼,太了不起了!然而實(shí)際上,真正的原因往往是因?yàn)檫@播放器自帶了FFmpeg/LAV解碼器,真正神的不是播放器,而是背后的FFmpeg/LAV,你能用播放器順利放出小電影,可別忘記感謝FFmpeg。因此,把FFmpeg稱作為神級軟件,完全實(shí)至名歸。
FFmpeg:可能是被抄襲得最嚴(yán)重的開源軟件
FFmpeg是如此強(qiáng)大,但一般人是難以駕馭的。和很多開源軟件一樣,F(xiàn)Fmpeg并沒有圖形界面,原始版本的FFmpeg只能夠通過命令行操縱,不是高級玩家的話一般是不會(huì)去碰原始版本的FFmpeg的。不過,由于FFmpeg是一個(gè)開源軟件,因此諸多我們?nèi)粘=佑|的軟件,都會(huì)使用其技術(shù)來實(shí)現(xiàn)視頻播放功能。這其中,既包括常見的播放軟件,也包括瀏覽器之類的能夠播放視頻的產(chǎn)品。
FFmpeg的原版是命令行,一般用戶玩不轉(zhuǎn)
例如,三大視頻播放流派MPC、MPlayer和VLC都和FFmpeg脫不開關(guān)系,而Chrome這樣的能播放網(wǎng)頁視頻的瀏覽器,也使用了FFmpeg代碼。FFmpeg開源,加上易于編譯到多個(gè)平臺(tái)的特點(diǎn),廣受各大播放器開發(fā)商的歡迎是情理之中的事情。如果你看到某款播放器支持N多視頻格式、N多功能,十有八九它就使用了FFmpeg的相關(guān)代碼。
不過,F(xiàn)Fmpeg是按照GPL/LGPL 協(xié)議開源的,這意味著如果某軟件使用了FFmpeg的代碼,那么這個(gè)軟件涉及這些代碼的部分,也必須開源。但是業(yè)界的風(fēng)氣嘛……你懂的。我用了就是用了,開源什么的誰管你,有本事你來打我呀?因此,F(xiàn)Fmpeg也成為了代碼被盜用得最嚴(yán)重的開源軟件之一,不少著名的播放軟件都是FFmpeg代碼的盜用者。
KMP等著名播放器都是FFmpeg的盜用者
無論是國內(nèi)外,都有大量播放軟件使用了FFmpeg的代碼。
例如國內(nèi)耳熟能詳?shù)?a target="_blank" >暴風(fēng)影音、QQ影音,以及國外著名的KMPlayer、PotPlayer,都采用了FFmpeg的代碼但卻不按規(guī)矩開源,被放入了FFmpeg的恥辱名單當(dāng)中。當(dāng)然,守規(guī)矩的軟件也是有的,例如前面提到的MPC、MPlayer、VLC都按照FFmpeg的規(guī)矩開了源。如果你想要支持開源事業(yè),不妨優(yōu)先使用這些守規(guī)矩的軟件。
引用自:https://www.ithome.com/html/it/326782.htm