前段時間項目中使用到了發(fā)布視頻動態(tài)功能,使用ffmpeg做了簡單壓縮裁剪晋柱,發(fā)現(xiàn)很有必要補一下音視頻方面知識骂际。
今天學(xué)習(xí)一下音視頻的基礎(chǔ)知識,日常工作中都會接觸到音視頻的開發(fā)业栅,比如目前工作中都會涉及到 TSPlayer秒咐、IjkPlayer、MediaPlayer 提供播放能力碘裕,不管是什么 Player携取,其上層調(diào)用都是大同小異,但是具體實現(xiàn)以及能夠支持的能力各不相同帮孔,要想繼續(xù)深入就必須深入音視頻的學(xué)習(xí)雷滋,Android 開發(fā)的幾個主要方向分別是應(yīng)用、Framework文兢、音視頻晤斩、NDK等,如果繼續(xù)在 Android 領(lǐng)域姆坚,這些坑還是是必須要填的澳泵,主要內(nèi)容如下:
- 視頻編碼
- 音頻編碼
- 多媒體播放組件
- 幀率
- 分辨率
- 編碼格式
- 封裝格式
- 碼率
- 顏色空間
- 采樣率
- 量化精度
- 聲道
視頻編碼
視頻編碼指的是通過特定的壓縮技術(shù),將某個視頻文件格式轉(zhuǎn)換為另一種視頻格式文件的方式兼呵,視頻傳輸中主要編解碼標準如下:
運動靜止圖像專家組的 M-JPEG
M-JPEG 是一種圖像壓縮編碼標準兔辅,是 Motion-JPEG 的簡稱,JPEG 標準主要是用來處理靜止圖像击喂,而 M-JPEG 把運動的視頻序列作為連續(xù)的靜止圖像來處理维苔,這種壓縮方式單獨完整地壓縮每一幀,在編輯過程中可隨機存儲每一幀茫负,可進行精確到幀的編輯蕉鸳,M-JPEG 只對幀內(nèi)的空間冗余進行壓縮乎赴,不對幀間的時間冗余進行壓縮忍法,故壓縮效率不高。國際標準化組織(ISO)運動圖像專家組的 MPEG 系列標準
MPEG 標準主要有五個:MPEG-1榕吼、MPEG-2饿序、MPEG-4、MPEG-7 及 MPEG-21 等羹蚣,MPEG 標準的視頻壓縮編碼技術(shù)主要利用了具有運動補償?shù)膸g壓縮編碼技術(shù)以減小時間冗余度原探,利用 DCT 技術(shù)以減小圖像的空間冗余度,利用熵編碼則在信息表示方面減小了統(tǒng)計冗余度。這幾種技術(shù)的綜合運用咽弦,大大增強了壓縮性能徒蟆。-
國際電聯(lián)(ITU-T)的 H.261、H.263型型、H.264等
- H.261:第一個實用的數(shù)字視頻解碼標準段审,采用的壓縮算法是運動補償幀間預(yù)測與分塊 DCT 相結(jié)合的混合編碼,其運動補償使用用全像素精度和環(huán)路濾波闹蒜,支持 CIF 和 QCIF 兩種分辨率寺枉。
- H.263:H.263 與 H.261 編碼算法一樣,但是做了一點改善绷落,使得 H.263 標準在低碼率下能夠提供比 H.261 更好的圖像效果姥闪,其運動補償使用半像素精度,支持 CIF砌烁、QCIF 筐喳、SQCIF、4CIF和16CIF 五種分辨率
- H.264:H.264則是由兩個組織 ISO 和 ITU-T 聯(lián)合組建的聯(lián)合視頻組(JVT)共同制定的新數(shù)字視頻編碼標準函喉,所以它既是 ITU-T 的H.264疏唾,又是 ISO/IEC 的 MPEG-4 高級視頻編碼(Advanced Video Coding,AVC)的第 10 部分函似,因此槐脏,不論是MPEG-4 AVC、MPEG-4 Part 10撇寞,還是 ISO/IEC 14496-10顿天,都是指 H.264,H.264 是基于傳統(tǒng)框架的混合編碼系統(tǒng)蔑担,做了局部優(yōu)化牌废,注重編碼效率和可靠性。H.264 在具有高壓縮比的同時還擁有高質(zhì)量流暢的圖像啤握,經(jīng)過 H.264 壓縮的視頻數(shù)據(jù)鸟缕,在網(wǎng)絡(luò)傳輸過程中所需要的帶寬更少,是壓縮率最高的視頻壓縮標準排抬。
音頻編碼
常見的音頻編解碼標準如下:
- ITU:G.711懂从、G.729 等
- MPEG:MP3、AAC 等
- 3GPP:AMR蹲蒲、AMR-WB番甩、AMR-WB+等
- 還有企業(yè)制定的標準,如 Dolby AC-3届搁、DTS 缘薛、WMA 等
常見的介紹如下:
MP3(MPEG-1 audio layer 3):一種音頻壓縮技術(shù)窍育,它被設(shè)計用來大幅度地降低音頻數(shù)據(jù)量,利用 MPEG Audio Layer 3 的技術(shù)宴胧,將音樂以 1:10 甚至 1:12 的壓縮率漱抓,壓縮成容量較小的文件,而對于大多數(shù)用戶來說重放的音質(zhì)與最初的不壓縮音頻相比沒有明顯的下降恕齐,它是利用人耳對高頻聲音信號不敏感的特性辽旋,將時域波形信號轉(zhuǎn)換成頻域信號,并劃分成多個頻段檐迟,對不同的頻段使用不同的壓縮率补胚,對高頻加大壓縮比(甚至忽略信號),對低頻信號使用小壓縮比追迟,保證信號不失真溶其,這樣就相當于拋棄人耳基本聽不到的高頻聲音,只保留能聽到的低頻部分敦间,從而對音頻進行一定壓縮瓶逃,此外 MP3 屬于有損壓縮的文件格式。
AAC:Advanced Audio Coding 的縮寫廓块,最初是基于 MPEG-2 的音頻編碼技術(shù)厢绝,MPEG-4 出現(xiàn)后,AAC 重新集成了其特性带猴,且加入了SBR 技術(shù)和 PS 技術(shù)昔汉,為了區(qū)別于傳統(tǒng)的 MPEG-2 AAC 又稱為MPEG-4 AAC,AAC 是一種專為聲音數(shù)據(jù)設(shè)計的文件壓縮格式拴清,相較 MP3靶病,AAC 格式的音質(zhì)更佳,文件更小口予,但是 AAC 是一種有損壓縮格式娄周,隨著大容量設(shè)備的出現(xiàn),其優(yōu)勢將越來越小沪停。
WMA:Windows Media Audio 的縮寫煤辨,是微軟公司開發(fā)的一系列音頻編解碼器,也指相應(yīng)的數(shù)字音頻編碼格式木张,WMA 包括四種不同的編解碼器:WMA众辨,原始的WMA編解碼器,作為 MP3 和 RealAudio 編解碼器的競爭者窟哺;WMA Pro泻轰,支持更多聲道和更高質(zhì)量的音頻[技肩;WMA Lossless且轨,無損編解碼器浮声;WMA Voice,用于儲存語音旋奢,使用的是低碼率壓縮泳挥。一些使用 Windows Media Audio 編碼格式編碼其所有內(nèi)容的純音頻 ASF 文件也使用 WMA 作為擴展名,其特點是支持加密至朗,非法拷貝到本地是無法播放的屉符,WMA 也屬于有損壓縮的文件格式。
多媒體播放組件
- Android 多媒體播放組件包含 MediaPlayer锹引、MediaCodec矗钟、OMX 、StageFright嫌变、AudioTrack 等吨艇,具體如下:
- MediaPlayer:為應(yīng)用層提供的播放控制接口
- MediaCodec:提供訪問底層媒體編解碼器的接口
- OpenMAX :Open Media Acceleration,又縮寫為 OMX腾啥,開放多媒體加速層东涡,是一個多媒體應(yīng)用程序標準,Android 主要的多媒體引擎StageFright 是透過 IBinder 使用 OpenMax倘待,用于編解碼處理疮跑。
- StageFright:Android 2.2 開始引入用來替換預(yù)設(shè)的媒體播放引擎 OpenCORE,Stagefright 是位于 Native 層的媒體播放引擎凸舵,內(nèi)置了基于軟件的編解碼器祖娘,且適用于熱門媒體格式,其編解碼功能是利用OpenMAX 框架啊奄,引入的是 OpenCORE 的 omx-component 部分贿条,在 Android 中是以共享庫的形式存在,對應(yīng) libstagefright.so增热。
- AudioTrack:管理和播放單個音頻資源整以,僅支持 PCM 流,如大多數(shù)的 WAV 格式的音頻文件就是就是 PCM 流峻仇,這類音頻文件支持 AudioTrack 直接進行播放公黑。
常見的多媒體框架及解決方案
常見的多媒體框架及解決方案有 VLC 、 FFmpeg 摄咆、 GStream 等凡蚜,具體如下:
- VLC : 即 Video LAN Client,是一款自由吭从、開源的跨平臺多媒體播放器及框架 朝蜘。
- FFmpeg:多媒體解決方案,不是多媒體框架涩金,廣泛用于音視頻開發(fā)中谱醇。
- GStreamer : 一套構(gòu)建流媒體應(yīng)用的開源多媒體框架 暇仲。
幀率
幀率是用于測量顯示幀數(shù)的量度。單位為「每秒顯示幀數(shù)」(Frame per Second副渴,F(xiàn)PS)或「赫茲奈附,Hz」,表示每秒的幀數(shù)(FPS)或者說幀率表示圖形處理器處理場時每秒鐘能夠更新的次數(shù)煮剧,高的幀率可以得到更流暢斥滤、更逼真的動畫,一般來說 30fps 就是可以接受的勉盅,但是將性能提升至 60fps 則可以明顯提升交互感和逼真感佑颇,但是一般來說超過 75fps 一般就不容易察覺到有明顯的流暢度提升了,如果幀率超過屏幕刷新率只會浪費圖形處理的能力草娜,因為監(jiān)視器不能以這么快的速度更新漩符,這樣超過刷新率的幀率就浪費掉了。
分辨率
視頻分辨率是指視頻成像產(chǎn)品所形成的圖像大小或尺寸驱还,常見的 1080P嗜暴、4K 等有代表什么呢,P 本身的含義是逐行掃描议蟆,表示視頻像素的總行數(shù)闷沥,1080P 表示總共有 1080 行的像素數(shù),而 K 表示視頻像素的總列數(shù)咐容,4K 表示有 4000 列的像素數(shù)舆逃,通常來說,1080P 就是指 1080 x 1920 的分辨率戳粒,4 k 指 3840 x 2160 的分辨率路狮。
編碼格式
針對音視頻來說,編碼格式對應(yīng)的就是音頻編碼和視頻編碼蔚约,對照前面的音頻編碼標準和視頻編碼標準奄妨,每種編碼標準都對應(yīng)的編碼算法,其目的是通過一定編碼算法實現(xiàn)數(shù)據(jù)的壓縮苹祟、減少數(shù)據(jù)的冗余砸抛。
封裝格式
直接看下百度百科的關(guān)于封裝格式的介紹,封裝格式(也叫容器)树枫,就是將已經(jīng)編碼壓縮好的視頻軌和音頻軌按照一定的格式放到一個文件中直焙,也就是說僅僅是一個外殼,或者大家把它當成一個放視頻軌和音頻軌的文件夾也可以砂轻,說得通俗點奔誓,視頻軌相當于飯,而音頻軌相當于菜搔涝,封裝格式就是一個碗厨喂,或者一個鍋和措,用來盛放飯菜的容器。
碼率
碼率杯聚,也就是比特率(Bit rate)臼婆,指單位時間內(nèi)傳輸或處理的比特的數(shù)量抒痒,單位為 bps(bit per second)也可表示為 b/s幌绍,比特率越高,單位時間傳送的數(shù)據(jù)量(位數(shù))越大故响,多媒體行業(yè)在指音頻或視頻在單位時間內(nèi)的數(shù)據(jù)傳輸率時通常使用碼率傀广,單位是 kbps,一般來說彩届,如果是 1M 的寬帶伪冰,在網(wǎng)上只能看碼流不超過 125kbps 的視頻,超過 125kbps 的視頻只能等視頻緩沖才能順利觀看樟蠕。
碼率一般分為固定碼率和可變碼率:
- 固定碼率會保證碼流的碼率恒定贮聂,但是會犧牲視頻質(zhì)量,比如為了保證碼率恒定寨辩,某些圖像豐富的內(nèi)容就是失去某些圖像細節(jié)而變得模糊吓懈。
- 可變碼率指的是輸出碼流的碼率是可變的,因為視頻信源本身的高峰信息量是變化的靡狞,從確保視頻傳輸質(zhì)量和充分利用信息的角度來說耻警,可變碼率視頻編碼才是最合理的。
碼率的高低與視頻質(zhì)量和文件提交成正比甸怕,但當碼率超過一定數(shù)值后甘穿,對視頻質(zhì)量沒有影響
顏色空間
- YUV:一種顏色編碼方法,一般使用在在影像處理組件中梢杭,YUV 在對照片或視頻編碼時温兼,考慮到人類的感知能力,允許降低色度的帶寬武契,其中 Y 表示明亮度妨托、U 表示色度、V 表示濃度吝羞,Y′UV兰伤、YUV、YCbCr钧排、YPbPr 所指涉的范圍敦腔,常有混淆或重疊的情況。從歷史的演變來說恨溜,其中 YUV 和 Y'UV 通常用來編碼電視的模擬信號符衔,而 YCbCr 則是用來描述數(shù)字的影像信號找前,適合視頻與圖片壓縮以及傳輸,例如 MPEG判族、JPEG躺盛,現(xiàn)在 YUV 通常已經(jīng)在電腦系統(tǒng)上廣泛使用。
- RGB:原色光模式形帮,又稱 RGB 顏色模型或紅綠藍顏色模型槽惫,是一種加色模型,將紅(Red)辩撑、綠(Green)界斜、[藍(Blue)三原色的色光以不同的比例相加,以合成產(chǎn)生各種色彩光合冀,目前的大多數(shù)顯示器都采用 RGB 這種顏色標準各薇。
YUV 主要用于優(yōu)化彩色視頻信號的傳輸,使其向后相容老式黑白電視君躺,與 RGB 視頻信號傳輸相比峭判,它最大的優(yōu)點在于只需占用極少的帶寬。
采樣率
采樣率棕叫,表示每秒從連續(xù)信號中提取并組成離散信號的采樣個數(shù)林螃,用赫茲(Hz)來表示,采樣率是指將模擬信號轉(zhuǎn)換成數(shù)字信號時的采樣頻率谍珊,人耳能聽到的聲音一般在 20Hz~20KHz 之間治宣,根據(jù)采樣定理,采樣頻率大于信號中最高頻率的 2 倍時砌滞,采樣之后的數(shù)字信號便能完整的反應(yīng)真實信號侮邀,常見的采樣率如下:
- 8000 Hz:電話所用采樣率, 對于人的說話已經(jīng)足夠
- 11025 Hz:AM調(diào)幅廣播所用采樣率
- 22050 Hz 和 24,000 Hz:FM調(diào)頻廣播所用采樣率
- 44100Hz:音頻CD,常用于 MPEG-1 音頻(VCD贝润,SVCD绊茧,MP3)所用采樣率
- 47,250 Hz:商用 PCM 錄音機所用采樣率
- 48,000 Hz:miniDV、數(shù)字電視打掘、DVD华畏、DAT、電影和專業(yè)音頻所用的數(shù)字聲音所用采樣率
CD 音樂的標準采樣頻率為 44.1KHz尊蚁,這也是目前聲卡與計算機作業(yè)間最常用的采樣頻率亡笑,目前比較盛行的藍光的采樣率就相當?shù)母撸_到了 192kHz横朋。而目前的聲卡仑乌,絕大多數(shù)都可以支持 44.1kHz、48kHz、96kHz晰甚,高端產(chǎn)品可支持 192kHz 甚至更高衙传,總之,采樣率越高厕九,獲得的聲音文件質(zhì)量越好蓖捶,占用存儲空間也就越大。
量化精度
聲波在轉(zhuǎn)換為數(shù)字信號的過程中不只有采樣率影響原始聲音的完整性扁远,還有一個重要影響因素是量化精度俊鱼,采樣頻率針對的是每秒鐘所采樣的數(shù)量,而量化精度則是對于聲波的振幅進行切割穿香,切割的數(shù)量是以最大振幅切成 2 的 n 次方計算亭引,n 就是 bit 數(shù)绎速,而 bit 數(shù)就是音頻分辨率皮获。
另外,bit 的數(shù)目還決定了聲波振幅的范圍(即動態(tài)范圍纹冤,最大音量與最小音量的差距)洒宝,如果這個位數(shù)越大,則能夠表示的數(shù)值越大萌京,描述波形更精確雁歌,每一個 Bit 的數(shù)據(jù)可以記錄約等于 6dB 動態(tài)的信號,一般來說知残,16Bit 可以提供最大 96dB 的動態(tài)范圍(加高頻顫動后 只有 92dB)靠瞎,據(jù)此可以推斷出 20Bit 可以達到 120dB 的動態(tài)范圍,動態(tài)范圍大了求妹,會有什么好處呢乏盐?動態(tài)范圍是指系統(tǒng)的輸出噪音功率和最大不失真音量功率的比值,這個值越大制恍,則系統(tǒng)可以承受很高的動態(tài)父能。
聲道
聲道指聲音在錄制或播放時在不同空間位置采集或回放的相互獨立的音頻信號,所以聲道數(shù)也就是聲音錄制時的音源數(shù)量或回放時相應(yīng)的揚聲器數(shù)量净神,常見聲道有單聲道何吝、立體聲道、4 聲道鹃唯、5.1 聲道爱榕、7.1 聲道等 ,具體如下:
- 單聲道:設(shè)置一個揚聲器坡慌。
- 立體聲道:把單聲道一個揚聲器擴展為左右對稱的兩個揚聲器黔酥,聲音在錄制過程中被分配到兩個獨立的聲道,從而達到了很好的聲音定位效果,這種技術(shù)在音樂欣賞中顯得尤為有用絮爷,昕眾可以清晰地分辨出各種樂器來自何方趴酣,從而使音樂更富想象力,更加接近臨場感受坑夯。立體聲技術(shù)廣泛應(yīng)用于自 Sound Blaster Pro 以后的大量聲卡岖寞,成為了
影響深遠的音頻標準。 - 4 聲道:4 聲道環(huán)繞規(guī)定了 4 個發(fā)音點柜蜈,分別是前左仗谆、前右、后左淑履、后右隶垮,昕眾則被包圍在中間,同時還建議增加一個低音音箱秘噪,以加強對低頻信號的回放處理狸吞,這也就是如今 4.1 聲道音箱系統(tǒng)廣泛流行的原因,就整體效果而言指煎,4 聲道系統(tǒng)可以為聽眾帶來來自多個不 同方向的聲音環(huán)繞蹋偏,可以獲得身 臨各種不同環(huán)境的昕覺感受扮匠,給用戶以全新的體驗肋殴。
- 5.1 聲道:其實 5.1 聲道系統(tǒng)來源于 4.1 聲道系統(tǒng)枫弟,將環(huán)繞聲道一分為二客燕,分為左環(huán)繞和右環(huán)繞闺鲸,中央位置增加重低音效果澳骤。
- 7.1 聲道:7.1 聲道系統(tǒng)在 5.1 聲道系統(tǒng)的基礎(chǔ)上又增加了中左和中右兩個發(fā)音點醋闭,簡單來說就是在聽者的周圍建立起一套前后相對平衡的聲場鲤看,增加了 后中聲場聲道镰绎。