27.Android Studio下FFmpeg的編譯和使用(一.音視頻基礎知識概要)

前言

之前寫了很多關於ndk的文章,也以FFmpeg的編譯爲例大概的講述了一次ndk開發從編譯到使用的過程,但是內容過於分散,而且有些東西已經過時,比如eclipse工具,比如ndk-build的編譯方式以及之前ffmpeg使用的2.x的版本,這些都已經漸漸的不被使用了,這次打算在Android Studio的工具下使用Cmake的編譯方式,編譯較新的ffmpeg版本,完成一次完整的編譯開發過程,實現一次功能較完備的ffmpeg播放器。目前最新的ffmpeg是4.x,我這次打算使用3.x的進行編譯,因爲每一個版本對應的編譯腳本也是有所不同的,使用相同的腳本並不能成功的適應所有的version。所以我們必須針對它版本的更新去調整我們的腳本。ffmpeg功能強大,我也是在學習的過程中,有些地方可能寫的不夠完善,還望各位多多指正。

本文這次主要以音視頻的基礎內容爲主

MPEG-4

一套用於音頻、視頻信息的壓縮編碼標準,MPEG4於1998 年11 月公佈,原預計1999 年1月投入使用的國際標準MPEG4不僅是針對一定比特率下的視頻、音頻編碼,更加註重多媒體系統的交互性和靈活性。MPEG專家組的專家們正在爲MPEG-4的制定努力工作。MPEG-4標準主要應用於視像電話(Video Phone),視像電子郵件(Video Email)和電子新聞(Electronic News)等,其傳輸速率要求較低,在4800-64000bits/sec之間,分辨率爲176X144。MPEG-4利用很窄的帶寬,通過幀重建技術,壓縮和傳輸數據,以求以最少的數據獲得最佳的圖像質量。

常用封裝格式
AVI

壓縮標準可任意選擇,AVI英文全稱爲Audio Video Interleaved,即音頻視頻交錯格式,是微軟公司於1992年11月推出、作爲其Windows視頻軟件一部分的一種多媒體容器格式。AVI文件將音頻(語音)和視頻(影像)數據包含在一個文件容器中,允許音視頻同步回放。類似DVD視頻格式,AVI文件支持多個音視頻流。AVI信息主要應用在多媒體光盤上,用來保存電視、電影等各種影像信息。

FLV

流媒體格式,FLV 是FLASH VIDEO的簡稱,FLV流媒體格式是隨着Flash MX的推出發展而來的視頻格式。由於它形成的文件極小、加載速度極快,使得網絡觀看視頻文件成爲可能,它的出現有效地解決了視頻文件導入Flash後,使導出的SWF文件體積龐大,不能在網絡上很好的使用等問題。

ASF

ASF是(Advanced Streaming Format) 高級串流格式的縮寫,是 Microsoft 爲 Windows 98 所開發的串流多媒體文件格式。同JPG/JPG、MPG文件一樣,ASF文件也是一種文件類型,但是特別適合在IP網上傳輸。ASF是微軟公司Windows Media的核心,這是一種包含音頻、視頻、圖像以及控制命令腳本的數據格式。這個詞彙當前可和 WMA 及 WMV 互換使用。利用ASF文件可以實現點播功能、直播功能以及遠程教育,具有本地或網絡回放、可擴充的媒體類型等優點。

MP4

MP4是一套用於音頻、視頻信息的壓縮編碼標準,由國際標準化組織(ISO)和國際電工委員會(IEC)下屬的“動態圖像專家組”(Moving Picture Experts Group,即MPEG)制定,第一版在1998年10月通過,第二版在1999年12月通過。MPEG-4格式的主要用途在於網上流、光盤、語音發送(視頻電話),以及電視廣播。
MPEG-4包含了MPEG-1及MPEG-2的絕大部份功能及其他格式的長處,並加入及擴充對虛擬現實模型語言(VRML , VirtualReality Modeling Language)的支持,面向對象的合成檔案(包括音效,視訊及VRML對象),以及數字版權管理(DRM)及其他互動功能。而MPEG-4比MPEG-2更先進的其中一個特點,就是不再使用宏區塊做影像分析,而是以影像上個體爲變化記錄,因此儘管影像變化速度很快、碼率不足時,也不會出現方塊畫面。


H@CWAK)R@E)Z@CK1`)QBI6O.png
常用視頻編碼格式
H264

H.264,同時也是MPEG-4第十部分,是由ITU-T視頻編碼專家組(VCEG)和ISO/IEC動態圖像專家組(MPEG)聯合組成的聯合視頻組(JVT,Joint Video Team)提出的高度壓縮數字視頻編解碼器標準。這個標準通常被稱之爲H.264/AVC(或者AVC/H.264或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)而明確的說明它兩方面的開發者。
H264標準各主要部分有Access Unit delimiter(訪問單元分割符),SEI(附加增強信息),primary coded picture(基本圖像編碼),Redundant Coded Picture(冗餘圖像編碼)。還有Instantaneous Decoding Refresh(IDR,即時解碼刷新)、Hypothetical Reference Decoder(HRD,假想參考解碼)、Hypothetical Stream Scheduler(HSS,假想碼流調度器)。

WMV

WMV(Windows Media Video)是微軟開發的一系列視頻編解碼和其相關的視頻編碼格式的統稱,是微軟Windows媒體框架的一部分。WMV包含三種不同的編解碼:作爲RealVideo的競爭對手,最初爲Internet上的流應用而設計開發的WMV原始的視頻壓縮技術;另一種是爲滿足特定內容需要的WMV屏幕和WMV圖像的壓縮技術;在經過SMPTE(Society of Motion Picture and Television Engineers)學會標準化以後,WMV版本9被採納作爲物理介質的發佈格式,比如高清DVD和藍光光碟,即所謂的VC-1。

Xvid

Xvid是一個開放源代碼的MPEG-4視頻編解碼器,它是基於OpenDivX而編寫的。Xvid是由一羣原OpenDivX義務開發者在OpenDivX於2001年7月停止開發後自行開發的。Xvid支持多種編碼模式,量化(Quantization)方式和範圍控,運動偵測(Motion Search)和曲線平衡分配(Curve)等衆多編碼技術,對用戶來說功能十分強大。Xvid的主要競爭對手是DivX。但Xvid是開放源代碼的,而DivX則只有免費(不是自由)的版本和商用版本。

MJPEG

MJPEG(技術即運動靜止圖像(或逐幀)壓縮技術)是24-bit的"true-color"影像標準。MJPEG的工作是將RGB格式的影像轉換成YCrCB格式,目的是爲了減少檔案大小,一般約可減少1/3~1/2左右。

QQ圖片20180924111401.png

常用音頻編碼格式
AAC

AAC(Advanced Audio Coding),中文名:高級音頻編碼,出現於1997年,基於MPEG-2的音頻編碼技術。由Fraunhofer IIS、杜比實驗室、AT&T、Sony等公司共同開發,目的是取代MP3格式。2000年,MPEG-4標準出現後,AAC重新集成了其特性,加入了SBR技術和PS技術,爲了區別於傳統的MPEG-2 AAC又稱爲MPEG-4 AAC。

APE

APE是流行的數字音樂無損壓縮格式之一,因出現較早,在全世界特別是中國大陸有着廣泛的用戶羣。與MP3這類有損壓縮格式不可逆轉地刪除(人耳聽力不敏感的)數據以縮減源文件體積不同,APE這類無損壓縮格式,是以更精煉的記錄方式來縮減體積,還原後數據與源文件一樣,從而保證了文件的完整性。APE由軟件Monkey's audio壓制得到,開發者爲Matthew T. Ashland,源代碼開放,因其界面上有隻“猴子”標誌而出名。相較同類文件格式FLAC,ape有查錯能力但不提供糾錯功能,以保證文件的無損和純正;其另一個特色是壓縮率約爲55%,比FLAC高,體積大概爲原CD的一半,便於存儲。

FLAC

FLAC中文可解釋爲無損音頻壓縮編碼。FLAC是一套著名的自由音頻壓縮編碼,其特點是無損壓縮。不同於其他有損壓縮編碼如MP3 及AAC,它不會破壞任何原有的音頻資訊,所以可以還原音樂光盤音質。2012年以來它已被很多軟件及硬件音頻產品(如CD等)所支持。

MP3

MP3是一種音頻壓縮技術,其全稱是動態影像專家壓縮標準音頻層面3(Moving Picture Experts Group Audio Layer III),簡稱爲MP3。它被設計用來大幅度地降低音頻數據量。利用 MPEG Audio Layer 3 的技術,將音樂以1:10 甚至 1:12 的壓縮率,壓縮成容量較小的文件,而對於大多數用戶來說重放的音質與最初的不壓縮音頻相比沒有明顯的下降。它是在1991年由位於德國埃爾朗根的研究組織Fraunhofer-Gesellschaft的一組工程師發明和標準化的。用MP3形式存儲的音樂就叫作MP3音樂,能播放MP3音樂的機器就叫作MP3播放器。

H。264/AVC視頻編碼標準

視頻編碼層面(VCL)
-視頻數據的內容
網絡抽象層面
-格式化數據並提供頭信息

NAL單元

每幀數據就是一個NAL單元(SPS與PPS除外),在實際的H264數據幀中,往往幀前面帶有00 00 00 01或00 00 01分隔符,一般來說編碼器編出的首幀數據爲PPS與SPS,接着爲幀


948K_(}5_CUX9P6YP)209YF.png
GOP

所謂GOP,意思是畫面組,MPEG格中的幀序列,分爲I、P、B三種,如排成IBBPBBPBBPBBPBBP...樣式,這種連續的幀圖片組合即爲GOP(畫面羣,GROUP OF PICTURE),是MPEG將來存取的最本基本的單位,它的排列順序將會一直重複到影像結束。一個GOP就是一組連續的IPB畫面。MPEG編碼將畫面(即幀)分爲I、P、B三種,I是內部編碼幀,P是前向預測幀,B是雙向內插幀。簡單地講,I幀是一個完整的畫面,而P幀和B幀記錄的是相對於I幀的變化。沒有I幀,P幀和B幀就無法解碼,這就是MPEG格式難以精確剪輯的原因,也是我們之所以要微調頭和尾的原因。


QQ圖片20180924111733.png
像素格式

yuv和rgb的轉換公式,播放視頻的時候需要將yuv轉換之後纔可以進行顯示


QQ圖片20180924111850.png
PCM音頻參數

採樣率sample_rate 44100 (CD)
通道channels(左右聲道)
樣本大小 sample_size

樣本類型plannar

AV_SAMPLE_FMT_S16在內存的格式爲:
c1,c2,c1,c2,c1,c2...
AV_SAMPLE_FMT_S16P在內存的格式爲:
c1,c1,c1,...,c2,c2,c2,...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章