溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android視頻開發(fā)中視頻的術(shù)語(yǔ)有哪些

發(fā)布時(shí)間:2021-12-09 10:22:38 來(lái)源:億速云 閱讀:160 作者:柒染 欄目:大數(shù)據(jù)

這篇文章將為大家詳細(xì)講解有關(guān)Android視頻開發(fā)中視頻的術(shù)語(yǔ)有哪些,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

說(shuō)到安卓的視頻開發(fā),大多數(shù)朋友們都是用著開源的播放器,或者安卓自帶的 native mediaplayer,我打算分享一下視頻開發(fā)中常見的一些知識(shí)點(diǎn),概念和術(shù)語(yǔ),給不熟悉的朋友們先"掃掃盲"。

1.什么是 Codec

一說(shuō)到視頻,音頻,大家肯定都聽說(shuō),至少有所耳聞這兩個(gè)詞 - 編碼(encode) 和 解碼(decode)。我這里提到的 Codec 就是一種程序,這種程序可以對(duì)視頻文件進(jìn)行編碼和解碼。在維基百科上對(duì) Codec 是這樣定義的:

A video codec is an electronic circuit or software that compresses or decompresses digital video. It converts raw (uncompressed) digital video to a compressed format or vice versa. In the context of video compression, "codec" is a concatenation of "encoder" and "decoder"—a device that only compresses is typically called an encoder, and one that only decompresses is a decoder.

那么問題來(lái)了,視頻不就是視頻嗎,MP4,avi,rmvb,我們看的很多小電影不就是視頻嘛。。。下載下來(lái)就可以看了啊。。。。為何需要編碼解碼。。。都是什么鬼。

Android視頻開發(fā)中視頻的術(shù)語(yǔ)有哪些  

首先,我們常說(shuō) 編碼 就是壓縮,解碼 就是解壓縮。視頻文件的本質(zhì)其實(shí)就是圖片的集合而已,當(dāng)一段連續(xù)的圖片不斷的出現(xiàn)在人眼前 (一般一個(gè)連貫的電影或者動(dòng)畫至少要求一秒 24 幀,也就是一秒內(nèi)連續(xù)出現(xiàn) 24 張圖片),肉眼就會(huì)“欺騙性”的告訴大腦我們?cè)诳匆粋€(gè)視頻,而不是幻燈片。

那我們可以開始做點(diǎn)算術(shù)題了,假設(shè)一張像素為 1280X720(清晰度,寬 1280 個(gè)像素點(diǎn),高 720 個(gè)像素點(diǎn)) 的圖片,大小為約為 1280X720X3 bytes,就是 2.7MB。大家可以猜想一下為何我這里還需要乘以一個(gè)數(shù)字 3.那么一段 60 秒鐘的小電影,就需要 60X24(24 張圖片)X2.7MB ,約為 3.9GB 了!

之所以圖片大小是像素寬高相乘還要乘 3 是因?yàn)橐粋€(gè)像素點(diǎn)需要至少三原色 (RGB) 來(lái)顯示像素點(diǎn)本身的顏色,做過(guò)安卓開發(fā)的同學(xué)都知道在 xml 里面定義顏色的格式吧?#ffffff - 代表白色 f 是十六進(jìn)制數(shù),也就是 4 位二進(jìn)制數(shù),三原色需要 3X4X2 位二進(jìn)制數(shù),也就是 3 個(gè)八位,一個(gè)八位是一個(gè)字節(jié),所以我們需要 3 個(gè)字節(jié)來(lái)顯示一個(gè)像素點(diǎn)

Android視頻開發(fā)中視頻的術(shù)語(yǔ)有哪些  

這 tm 必然是不能接受的啊!這樣我用我 3TB 的移動(dòng)硬盤,也不能把蒼老師的全部小電影保存起來(lái),寶寶心里苦??!

所以 Codec 這種程序就出現(xiàn)了,它會(huì)把這些連續(xù)的圖片們通過(guò)一定的算法壓縮成體積更小的文件格式,這就是我們所謂的 編碼,壓縮。但是在播放器的客戶端,不管是 PC,手機(jī)也好,他們要顯示在屏幕上的,必須是實(shí)實(shí)在在的圖片啊,所以這些被壓縮過(guò)的文件最終又必須被還原成圖片格式,這就是 解碼,解壓縮。

視頻編碼,壓縮是一個(gè)非常復(fù)雜的過(guò)程,萬(wàn)幸的是,現(xiàn)在市面上已經(jīng)有很多工具,還有現(xiàn)有規(guī)范來(lái)指導(dǎo)開發(fā)者進(jìn)行編碼解碼了。其中最常用的一些規(guī)范是:

Android視頻開發(fā)中視頻的術(shù)語(yǔ)有哪些  

可能大家對(duì)壓縮解壓縮還是不太理解。。。到底有哪些地方可以壓縮呢?那我們舉個(gè)栗子!

Android視頻開發(fā)中視頻的術(shù)語(yǔ)有哪些  

咱們想象一下一個(gè)場(chǎng)景,比如說(shuō)在某些電影中,主人公在安靜的公園中因?yàn)槭俦瘋灰?,全世界都仿佛靜止一般。。。。就這么呆坐了整整 30s。那么對(duì)于這種“靜態(tài)的場(chǎng)景”,視頻壓縮算法會(huì)只取這三十秒的前幾幀作為基準(zhǔn)幀圖片,對(duì)其余的 29s 的幀,采取只保存“不同的部分”的策略,這樣就不用保存這些差不多相同的圖片,這種做法叫“去冗余”。大大減少了視頻的體積。

Android視頻開發(fā)中視頻的術(shù)語(yǔ)有哪些  

當(dāng)然,這只是視頻壓縮算法的冰山一角,我們不多研究。

另外需要注意的是,Codec 的編碼與解碼包含對(duì)視頻數(shù)據(jù)的編碼解碼和音頻數(shù)據(jù)的編碼解碼,因?yàn)橐纛l的本質(zhì)是聲波信息,視頻是圖片處理,他們本質(zhì)上是不同的,我這里主要是介紹視頻數(shù)據(jù)的處理。

回到我們說(shuō)的 Codec,所以說(shuō) Codec 是一套程序,它遵循不同的規(guī)范,根據(jù)規(guī)范的不同提供不同的壓縮解壓縮策略。既然是一套規(guī)范,那么就肯定需要實(shí)現(xiàn)啊!在安卓平臺(tái)里面,谷歌提供了視頻編碼解碼的 API,對(duì)一些基礎(chǔ)的編碼解碼規(guī)范做了 API 的封裝,在接下里的章節(jié)我會(huì)慢慢介紹,其他移動(dòng)平臺(tái)也都差不多,多多少少都會(huì)提供 API 的支持。

 

2. 什么是 Container format file(視頻容器文件)

之前說(shuō)到,咱們?cè)诳葱‰娪暗臅r(shí)候都會(huì)看到很多文件的后綴名,例如 mp4,rmvb,avi,喜歡看高清美劇的同學(xué)應(yīng)該還會(huì)經(jīng)??吹剿^的藍(lán)光 mkv 格式等等。我們習(xí)慣叫他們視頻文件,但是這樣說(shuō)顯得不夠?qū)I(yè)。。。

嚴(yán)格的來(lái)講,他們應(yīng)該被叫做容器文件。。。。因?yàn)橐粋€(gè)容器里,不僅僅包括了視頻 (video) 數(shù)據(jù),還包括了 (audio) 音頻數(shù)據(jù),有的容器還內(nèi)嵌字幕,那么就還有文字 (Text) 數(shù)據(jù)。不過(guò)容器文件雖然聽起來(lái)嚇人,但是它說(shuō)到底也就是一個(gè)結(jié)構(gòu)化的文件而已。之所以說(shuō)它結(jié)構(gòu)化,就是它包含的視頻,音頻,文字?jǐn)?shù)據(jù)都必須按照一定的規(guī)范,放在文件指定的位置 (方便播放器解析)。

容器文件就是上面說(shuō)到的 Codec 程序?qū)D片集進(jìn)行編碼之后的產(chǎn)物,被 Codec 編碼之后,除了必要的視頻音頻信息之外,它還有一些其他的信息。

我畫了一個(gè)草圖,解釋了一個(gè)經(jīng)典的 MP4 容器結(jié)構(gòu)是啥樣。。。

Android視頻開發(fā)中視頻的術(shù)語(yǔ)有哪些  

里面提到了 Track(軌道),這是一個(gè)專業(yè)術(shù)語(yǔ),用來(lái)區(qū)分不同的音視頻/文字?jǐn)?shù)據(jù) 但是 MP4 文件里面最重要的卻是這個(gè) MetaData,它包含了很多關(guān)于視頻的原始數(shù)據(jù),比如視頻的大小,視頻的時(shí)長(zhǎng),還有一個(gè)索引表,這個(gè)索引表包含了不同軌道的起始位置 (以字節(jié)為單位),又因?yàn)槊總€(gè)軌道會(huì)被分成若干塊 sample(采樣,每一塊采樣都是可以單獨(dú)被播放器播放的一段數(shù)據(jù),以微妙為單位),metadata 也會(huì)維護(hù)一個(gè)細(xì)粒度更小的索引表,記錄了每一塊 sample 的大小,起始位置,對(duì)應(yīng)視頻的時(shí)間是多少 (以字節(jié)為單位) 等等的信息。

舉個(gè)簡(jiǎn)單的例子,有些電影包含粵語(yǔ),國(guó)語(yǔ)兩個(gè)聲道。我們想換聲道的時(shí)候會(huì)告訴播放器,我想聽粵語(yǔ),那么播放器會(huì)去索引表查找粵語(yǔ)的軌道起始位置,并且源源不斷的讀取粵語(yǔ)音軌的數(shù)據(jù)并播放出來(lái)。這也解釋了為何上圖會(huì)有兩個(gè) audio track。

在接下來(lái)的章節(jié)我會(huì)詳細(xì)介紹播放器是怎么解析容器文件,這里大家只需要知道大概就好。

 

3. 視頻處理的流程-從后臺(tái)到前端

從一個(gè)實(shí)際的流程出發(fā)

Android視頻開發(fā)中視頻的術(shù)語(yǔ)有哪些  

導(dǎo)演用膠片拍攝了原片 (Raw Data),膠片就代表著原始文件,也就是圖片集 (因?yàn)槟z片就是一幀一幀的連續(xù)圖片),使用軟件把源文件編碼 (Encode) 成容器文件 (Container),之后可能為了不容分辨率的原因,還需要將原始的高清容器,轉(zhuǎn)換成不同的分辨率的容器文件,對(duì)應(yīng)圖中的 process 這一步。最后在放在服務(wù)器或者 CDN 上,又播放器將其下載播放。

Android視頻開發(fā)中視頻的術(shù)語(yǔ)有哪些    

關(guān)于Android視頻開發(fā)中視頻的術(shù)語(yǔ)有哪些就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI