一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Android視頻開發(fā)進階(一)關(guān)于視頻的那些術(shù)語

 fishpan_oliver 2017-06-06

本文作者


本文由qing的世界授權(quán)發(fā)布。

qing的世界的博客地址:

http://www.jianshu.com/u/a32db45d4859


說到安卓的視頻開發(fā),大多數(shù)朋友們都是用著開源的播放器,或者安卓自帶的native mediaplayer,拿來主義居多,我曾經(jīng)也是。。。


最近這半年因為開始著手重構(gòu)公司的播放器,也開始學(xué)習(xí)了很多視頻音頻開發(fā)的相關(guān)知識,抱著獨樂樂不如眾樂樂的想法,開始寫一些值得分享的東西。這次的連載和之前的RxJava分享一樣,會分開不容的章節(jié)。


第一次我打算分享一下視頻開發(fā)中常見的一些知識點,概念和術(shù)語,給不熟悉的朋友們先'掃掃盲'。


在之后的章節(jié)我會慢慢的介紹除了基本的在線視頻播放技術(shù)之外,一些更加“高級”的技術(shù) :smirk:,包括安卓平臺在4.4之后發(fā)布的全新的

Codec API , 還有怎么處理自適應(yīng)視頻播放(Adaptive Streaming ),版權(quán)管理內(nèi)容(DRM Content),最后幾章會使用谷歌開源的ExoPlayer作為例子,從源碼的角度分析一個完整的播放器需要哪些構(gòu)件。


每一個術(shù)語我都會盡量用中文寫一遍,再寫一遍英文,因為說實話。。。不用英文查資料,很多東西都搜不出來。


  1. 什么是Codec

  2. 什么是Container format file

  3. 視頻處理的流程-從后臺到前端


1

什么是Codec


一說到視頻,音頻,大家肯定都聽說,至少有所耳聞這兩個詞 - 編碼(encode) 和 解碼(decode)。


我這里提到的Codec就是一種程序,這種程序可以對視頻文件進行編碼和解碼。在維基百科上對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.


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

...



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


那我們可以開始做點算術(shù)題了,假設(shè)一張像素為1280X720(清晰度,寬1280個像素點,高720個像素點)的圖片,大小為約為1280X720X3 bytes,就是2.7MB。


大家可以猜想一下為何我這里還需要乘以一個數(shù)字3.那么一段60秒鐘的小電影,就需要60X24(24張圖片)X2.7MB ,約為3.9GB了!


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



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


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


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



可能大家對壓縮解壓縮還是不太理解。。。到底有哪些地方可以壓縮呢?

那我們舉個栗子!


咱們想象一下一個場景,比如說在某些電影中,主人公在安靜的公園中因為失戀悲傷不已,全世界都仿佛靜止一般。。。。


就這么呆坐了整整30s。那么對于這種“靜態(tài)的場景”,視頻壓縮算法會只取這三十秒的前幾幀作為基準(zhǔn)幀圖片,對其余的29s的幀,采取只保存“不同的部分”的策略,這樣就不用保存這些差不多相同的圖片,這種做法叫“去冗余”。大大減少了視頻的體積。



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


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


回到我們說的Codec,所以說Codec是一套程序,它遵循不同的規(guī)范,根據(jù)規(guī)范的不同提供不同的壓縮解壓縮策略。


既然是一套規(guī)范,那么就肯定需要實現(xiàn)?。?在安卓平臺里面,谷歌提供了視頻編碼解碼的API,對一些基礎(chǔ)的編碼解碼規(guī)范做了API的封裝,在接下里的章節(jié)我會慢慢介紹,其他移動平臺也都差不多,多多少少都會提供API的支持。


2

什么是Container format file


Container format file(視頻容器文件)


之前說到,咱們在看小電影的時候都會看到很多文件的后綴名,例如mp4,rmvb,avi,喜歡看高清美劇的同學(xué)應(yīng)該還會經(jīng)??吹剿^的藍光mkv格式等等。我們習(xí)慣叫他們視頻文件,但是這樣說顯得不夠?qū)I(yè)。。。


嚴(yán)格的來講,他們應(yīng)該被叫做容器文件。。。。因為一個容器里,不僅僅包括了視頻(video)數(shù)據(jù),還包括了(audio)音頻數(shù)據(jù),有的容器還內(nèi)嵌字幕,那么就還有文字(Text)數(shù)據(jù)。


不過容器文件雖然聽起來嚇人,但是它說到底也就是一個結(jié)構(gòu)化的文件而已。之所以說它結(jié)構(gòu)化,就是它包含的視頻,音頻,文字?jǐn)?shù)據(jù)都必須按照一定的規(guī)范,放在文件指定的位置(方便播放器解析)。


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


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



里面提到了Track(軌道),這是一個專業(yè)術(shù)語,用來區(qū)分不同的音視頻/文字?jǐn)?shù)據(jù)
但是MP4文件里面最重要的卻是這個MetaData;


它包含了很多關(guān)于視頻的原始數(shù)據(jù),比如視頻的大小,視頻的時長,還有一個索引表,這個索引表包含了不同軌道的起始位置(以字節(jié)為單位),又因為每個軌道會被分成若干塊sample(采樣,每一塊采樣都是可以單獨被播放器播放的一段數(shù)據(jù),以微妙為單位),metadata也會維護一個細(xì)粒度更小的索引表,記錄了每一塊sample的大小,起始位置,對應(yīng)視頻的時間是多少(以字節(jié)為單位)等等的信息。


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


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


3

視頻處理的流程-從后臺到前端


從一個實際的流程出發(fā),



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


補充一張圖。


ok,這次分享就結(jié)束了,我會在下次分享詳細(xì)介紹播放器是怎么解析,讀取容器文件,同時也會深入的介紹一下MP4容器的一些格式規(guī)范,有助于大家去分析開源播放器的源碼。


文章中涉及到的一些鏈接:


  • CodecAPI https://developer./reference/android/media/MediaCodec.html

  • Adaptive Streaming https://www./webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=adaptive+streaming

  • DRM Content http://searchcio./definition/digital-rights-management

  • ExoPlayer https://github.com/google/ExoPlayer


在微信后臺,很多朋友留言說想要深入學(xué)習(xí)視頻相關(guān)的技術(shù),于是我就有意針對這一塊做了一些收集,也有幸看到了本文作者的該系列,讀完第一篇的時候,我覺得對于一個剛開始想要接觸視頻開發(fā)的來說,非常的易懂~


于是,立即聯(lián)系了作者,要到了授權(quán)~


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    久久福利视频这里有精品| 九九久久精品久久久精品| 国产成人av在线免播放观看av| 日本加勒比不卡二三四区| 国产欧美一区二区另类精品| 精品久久av一二三区| 91亚洲国产日韩在线| 国产精品一级香蕉一区| 国产精品国产亚洲看不卡 | 蜜臀人妻一区二区三区| 国产欧美高清精品一区| 国产成人免费高潮激情电| 亚洲最新中文字幕在线视频| 欧美一区二区三区十区| 91人妻人澡人人爽人人精品| 精品综合欧美一区二区三区| 国产不卡一区二区四区| 亚洲日本中文字幕视频在线观看| 欧美丰满人妻少妇精品| 日本精品中文字幕在线视频| 日韩18一区二区三区| 国产欧美日韩精品一区二区| 日韩综合国产欧美一区| 国产高清一区二区不卡| 91插插插外国一区二区婷婷| 日本中文字幕在线精品| 精品人妻久久一品二品三品| 高清国产日韩欧美熟女| 九九热国产这里只有精品| 精品精品国产欧美在线| 久久精品国产一区久久久| 国产av一二三区在线观看| 亚洲av在线视频一区| 日韩欧美一区二区不卡看片| 日韩成人h视频在线观看| 在线免费不卡亚洲国产| 九九热视频经典在线观看| 国产一区欧美一区日本道| 内射精子视频欧美一区二区| 欧美一区二区三区99| 老司机这里只有精品视频|