前言
之前寫了很多關(guān)于ndk的文章汹碱,也以FFmpeg的編譯為例大概的講述了一次ndk開發(fā)從編譯到使用的過程尖啡,但是內(nèi)容過于分散乡话,而且有些東西已經(jīng)過時(shí)摧玫,比如eclipse工具,比如ndk-build的編譯方式以及之前ffmpeg使用的2.x的版本绑青,這些都已經(jīng)漸漸的不被使用了诬像,這次打算在Android Studio的工具下使用Cmake的編譯方式,編譯較新的ffmpeg版本闸婴,完成一次完整的編譯開發(fā)過程坏挠,實(shí)現(xiàn)一次功能較完備的ffmpeg播放器。目前最新的ffmpeg是4.x邪乍,我這次打算使用3.x的進(jìn)行編譯降狠,因?yàn)槊恳粋€(gè)版本對(duì)應(yīng)的編譯腳本也是有所不同的,使用相同的腳本并不能成功的適應(yīng)所有的version庇楞。所以我們必須針對(duì)它版本的更新去調(diào)整我們的腳本榜配。ffmpeg功能強(qiáng)大,我也是在學(xué)習(xí)的過程中吕晌,有些地方可能寫的不夠完善蛋褥,還望各位多多指正。
本文這次主要以音視頻的基礎(chǔ)內(nèi)容為主
MPEG-4
一套用于音頻睛驳、視頻信息的壓縮編碼標(biāo)準(zhǔn),MPEG4于1998 年11 月公布烙心,原預(yù)計(jì)1999 年1月投入使用的國(guó)際標(biāo)準(zhǔn)MPEG4不僅是針對(duì)一定比特率下的視頻、音頻編碼乏沸,更加注重多媒體系統(tǒng)的交互性和靈活性淫茵。MPEG專家組的專家們正在為MPEG-4的制定努力工作。MPEG-4標(biāo)準(zhǔn)主要應(yīng)用于視像電話(Video Phone)屎蜓,視像電子郵件(Video Email)和電子新聞(Electronic News)等痘昌,其傳輸速率要求較低,在4800-64000bits/sec之間炬转,分辨率為176X144。MPEG-4利用很窄的帶寬扼劈,通過幀重建技術(shù)驻啤,壓縮和傳輸數(shù)據(jù),以求以最少的數(shù)據(jù)獲得最佳的圖像質(zhì)量荐吵。
常用封裝格式
AVI
壓縮標(biāo)準(zhǔn)可任意選擇,AVI英文全稱為Audio Video Interleaved骑冗,即音頻視頻交錯(cuò)格式赊瞬,是微軟公司于1992年11月推出、作為其Windows視頻軟件一部分的一種多媒體容器格式贼涩。AVI文件將音頻(語音)和視頻(影像)數(shù)據(jù)包含在一個(gè)文件容器中巧涧,允許音視頻同步回放。類似DVD視頻格式遥倦,AVI文件支持多個(gè)音視頻流谤绳。AVI信息主要應(yīng)用在多媒體光盤上,用來保存電視袒哥、電影等各種影像信息缩筛。
FLV
流媒體格式,FLV 是FLASH VIDEO的簡(jiǎn)稱,F(xiàn)LV流媒體格式是隨著Flash MX的推出發(fā)展而來的視頻格式堡称。由于它形成的文件極小瞎抛、加載速度極快,使得網(wǎng)絡(luò)觀看視頻文件成為可能却紧,它的出現(xiàn)有效地解決了視頻文件導(dǎo)入Flash后桐臊,使導(dǎo)出的SWF文件體積龐大,不能在網(wǎng)絡(luò)上很好的使用等問題啄寡。
ASF
ASF是(Advanced Streaming Format) 高級(jí)串流格式的縮寫豪硅,是 Microsoft 為 Windows 98 所開發(fā)的串流多媒體文件格式。同JPG/JPG挺物、MPG文件一樣,ASF文件也是一種文件類型飘弧,但是特別適合在IP網(wǎng)上傳輸识藤。ASF是微軟公司W(wǎng)indows Media的核心,這是一種包含音頻次伶、視頻痴昧、圖像以及控制命令腳本的數(shù)據(jù)格式。這個(gè)詞匯當(dāng)前可和 WMA 及 WMV 互換使用冠王。利用ASF文件可以實(shí)現(xiàn)點(diǎn)播功能赶撰、直播功能以及遠(yuǎn)程教育,具有本地或網(wǎng)絡(luò)回放柱彻、可擴(kuò)充的媒體類型等優(yōu)點(diǎn)豪娜。
MP4
MP4是一套用于音頻、視頻信息的壓縮編碼標(biāo)準(zhǔn)哟楷,由國(guó)際標(biāo)準(zhǔn)化組織(ISO)和國(guó)際電工委員會(huì)(IEC)下屬的“動(dòng)態(tài)圖像專家組”(Moving Picture Experts Group瘤载,即MPEG)制定,第一版在1998年10月通過卖擅,第二版在1999年12月通過鸣奔。MPEG-4格式的主要用途在于網(wǎng)上流墨技、光盤、語音發(fā)送(視頻電話)挎狸,以及電視廣播扣汪。
MPEG-4包含了MPEG-1及MPEG-2的絕大部份功能及其他格式的長(zhǎng)處,并加入及擴(kuò)充對(duì)虛擬現(xiàn)實(shí)模型語言(VRML 锨匆, VirtualReality Modeling Language)的支持私痹,面向?qū)ο蟮暮铣蓹n案(包括音效,視訊及VRML對(duì)象)统刮,以及數(shù)字版權(quán)管理(DRM)及其他互動(dòng)功能紊遵。而MPEG-4比MPEG-2更先進(jìn)的其中一個(gè)特點(diǎn)夯秃,就是不再使用宏區(qū)塊做影像分析涎显,而是以影像上個(gè)體為變化記錄,因此盡管影像變化速度很快矢腻、碼率不足時(shí)鞭衩,也不會(huì)出現(xiàn)方塊畫面学搜。
常用視頻編碼格式
H264
H.264,同時(shí)也是MPEG-4第十部分论衍,是由ITU-T視頻編碼專家組(VCEG)和ISO/IEC動(dòng)態(tài)圖像專家組(MPEG)聯(lián)合組成的聯(lián)合視頻組(JVT瑞佩,Joint Video Team)提出的高度壓縮數(shù)字視頻編解碼器標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)通常被稱之為H.264/AVC(或者AVC/H.264或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)而明確的說明它兩方面的開發(fā)者坯台。
H264標(biāo)準(zhǔn)各主要部分有Access Unit delimiter(訪問單元分割符)炬丸,SEI(附加增強(qiáng)信息),primary coded picture(基本圖像編碼)蜒蕾,Redundant Coded Picture(冗余圖像編碼)稠炬。還有Instantaneous Decoding Refresh(IDR,即時(shí)解碼刷新)咪啡、Hypothetical Reference Decoder(HRD首启,假想?yún)⒖冀獯a)、Hypothetical Stream Scheduler(HSS撤摸,假想碼流調(diào)度器)毅桃。
WMV
WMV(Windows Media Video)是微軟開發(fā)的一系列視頻編解碼和其相關(guān)的視頻編碼格式的統(tǒng)稱,是微軟Windows媒體框架的一部分准夷。WMV包含三種不同的編解碼:作為RealVideo的競(jìng)爭(zhēng)對(duì)手钥飞,最初為Internet上的流應(yīng)用而設(shè)計(jì)開發(fā)的WMV原始的視頻壓縮技術(shù);另一種是為滿足特定內(nèi)容需要的WMV屏幕和WMV圖像的壓縮技術(shù)冕象;在經(jīng)過SMPTE(Society of Motion Picture and Television Engineers)學(xué)會(huì)標(biāo)準(zhǔn)化以后代承,WMV版本9被采納作為物理介質(zhì)的發(fā)布格式,比如高清DVD和藍(lán)光光碟渐扮,即所謂的VC-1论悴。
Xvid
Xvid是一個(gè)開放源代碼的MPEG-4視頻編解碼器掖棉,它是基于OpenDivX而編寫的。Xvid是由一群原OpenDivX義務(wù)開發(fā)者在OpenDivX于2001年7月停止開發(fā)后自行開發(fā)的膀估。Xvid支持多種編碼模式幔亥,量化(Quantization)方式和范圍控,運(yùn)動(dòng)偵測(cè)(Motion Search)和曲線平衡分配(Curve)等眾多編碼技術(shù)察纯,對(duì)用戶來說功能十分強(qiáng)大帕棉。Xvid的主要競(jìng)爭(zhēng)對(duì)手是DivX。但Xvid是開放源代碼的饼记,而DivX則只有免費(fèi)(不是自由)的版本和商用版本香伴。
MJPEG
MJPEG(技術(shù)即運(yùn)動(dòng)靜止圖像(或逐幀)壓縮技術(shù))是24-bit的"true-color"影像標(biāo)準(zhǔn)。MJPEG的工作是將RGB格式的影像轉(zhuǎn)換成YCrCB格式具则,目的是為了減少檔案大小即纲,一般約可減少1/3~1/2左右。
常用音頻編碼格式
AAC
AAC(Advanced Audio Coding)博肋,中文名:高級(jí)音頻編碼低斋,出現(xiàn)于1997年,基于MPEG-2的音頻編碼技術(shù)匪凡。由Fraunhofer IIS膊畴、杜比實(shí)驗(yàn)室、AT&T病游、Sony等公司共同開發(fā)唇跨,目的是取代MP3格式。2000年礁遵,MPEG-4標(biāo)準(zhǔn)出現(xiàn)后轻绞,AAC重新集成了其特性,加入了SBR技術(shù)和PS技術(shù)佣耐,為了區(qū)別于傳統(tǒng)的MPEG-2 AAC又稱為MPEG-4 AAC。
APE
APE是流行的數(shù)字音樂無損壓縮格式之一唧龄,因出現(xiàn)較早兼砖,在全世界特別是中國(guó)大陸有著廣泛的用戶群。與MP3這類有損壓縮格式不可逆轉(zhuǎn)地刪除(人耳聽力不敏感的)數(shù)據(jù)以縮減源文件體積不同既棺,APE這類無損壓縮格式讽挟,是以更精煉的記錄方式來縮減體積,還原后數(shù)據(jù)與源文件一樣丸冕,從而保證了文件的完整性耽梅。APE由軟件Monkey's audio壓制得到,開發(fā)者為Matthew T. Ashland胖烛,源代碼開放眼姐,因其界面上有只“猴子”標(biāo)志而出名诅迷。相較同類文件格式FLAC,ape有查錯(cuò)能力但不提供糾錯(cuò)功能众旗,以保證文件的無損和純正罢杉;其另一個(gè)特色是壓縮率約為55%,比FLAC高贡歧,體積大概為原CD的一半滩租,便于存儲(chǔ)。
FLAC
FLAC中文可解釋為無損音頻壓縮編碼利朵。FLAC是一套著名的自由音頻壓縮編碼律想,其特點(diǎn)是無損壓縮。不同于其他有損壓縮編碼如MP3 及AAC绍弟,它不會(huì)破壞任何原有的音頻資訊技即,所以可以還原音樂光盤音質(zhì)。2012年以來它已被很多軟件及硬件音頻產(chǎn)品(如CD等)所支持晌柬。
MP3
MP3是一種音頻壓縮技術(shù)姥份,其全稱是動(dòng)態(tài)影像專家壓縮標(biāo)準(zhǔn)音頻層面3(Moving Picture Experts Group Audio Layer III),簡(jiǎn)稱為MP3年碘。它被設(shè)計(jì)用來大幅度地降低音頻數(shù)據(jù)量澈歉。利用 MPEG Audio Layer 3 的技術(shù),將音樂以1:10 甚至 1:12 的壓縮率屿衅,壓縮成容量較小的文件埃难,而對(duì)于大多數(shù)用戶來說重放的音質(zhì)與最初的不壓縮音頻相比沒有明顯的下降。它是在1991年由位于德國(guó)埃爾朗根的研究組織Fraunhofer-Gesellschaft的一組工程師發(fā)明和標(biāo)準(zhǔn)化的涤久。用MP3形式存儲(chǔ)的音樂就叫作MP3音樂涡尘,能播放MP3音樂的機(jī)器就叫作MP3播放器。
H响迂。264/AVC視頻編碼標(biāo)準(zhǔn)
視頻編碼層面(VCL)
-視頻數(shù)據(jù)的內(nèi)容
網(wǎng)絡(luò)抽象層面
-格式化數(shù)據(jù)并提供頭信息
NAL單元
每幀數(shù)據(jù)就是一個(gè)NAL單元(SPS與PPS除外)考抄,在實(shí)際的H264數(shù)據(jù)幀中,往往幀前面帶有00 00 00 01或00 00 01分隔符蔗彤,一般來說編碼器編出的首幀數(shù)據(jù)為PPS與SPS,接著為幀
GOP
所謂GOP川梅,意思是畫面組,MPEG格中的幀序列然遏,分為I贫途、P、B三種待侵,如排成IBBPBBPBBPBBPBBP...樣式丢早,這種連續(xù)的幀圖片組合即為GOP(畫面群,GROUP OF PICTURE)秧倾,是MPEG將來存取的最本基本的單位怨酝,它的排列順序?qū)?huì)一直重復(fù)到影像結(jié)束傀缩。一個(gè)GOP就是一組連續(xù)的IPB畫面。MPEG編碼將畫面(即幀)分為I凫碌、P扑毡、B三種,I是內(nèi)部編碼幀盛险,P是前向預(yù)測(cè)幀瞄摊,B是雙向內(nèi)插幀。簡(jiǎn)單地講苦掘,I幀是一個(gè)完整的畫面换帜,而P幀和B幀記錄的是相對(duì)于I幀的變化。沒有I幀鹤啡,P幀和B幀就無法解碼惯驼,這就是MPEG格式難以精確剪輯的原因,也是我們之所以要微調(diào)頭和尾的原因递瑰。
像素格式
yuv和rgb的轉(zhuǎn)換公式祟牲,播放視頻的時(shí)候需要將yuv轉(zhuǎn)換之后才可以進(jìn)行顯示
PCM音頻參數(shù)
采樣率sample_rate 44100 (CD)
通道channels(左右聲道)
樣本大小 sample_size
樣本類型plannar
AV_SAMPLE_FMT_S16在內(nèi)存的格式為:
c1,c2,c1,c2,c1,c2...
AV_SAMPLE_FMT_S16P在內(nèi)存的格式為:
c1,c1,c1,...,c2,c2,c2,...