我的非線性視頻編輯器MiaoVideoCut(1) --- 視頻基礎(chǔ)知識及環(huán)境搭建

視頻基礎(chǔ)知識

#編碼(生產(chǎn)部分)

? ??所謂視頻編碼方式就是指通過特定的壓縮技術(shù)漫贞,將某個視頻格式的文件轉(zhuǎn)換成另一種視頻格式文件的方式視頻流傳輸中最為重要的編解碼標準有國際電聯(lián)的H.261臀稚、H.263、H.264乒融,運動靜止圖像專家組的M-JPEG國際標準化組織運動圖像專家組的MPEG系列標準劲赠,此外在互聯(lián)網(wǎng)上被廣泛應(yīng)用的還有Real-Networks的RealVideo、微軟公司的WMV以及Apple公司的QuickTime等峡竣。

? ??MPEG-4第二部分可以用在網(wǎng)絡(luò)傳輸上靠抑。這里面MPEG-4第十部分和H.264的標準十分接近,兩個編碼組織甚至合作适掰,為這個標準命名為H.264/AVC颂碧,這也是目前主流的編碼格式,我們所看的很多視頻都是采用H.264編碼类浪。

MPEG系列

(由ISO[國際標準組織機構(gòu)]下屬的MPEG[運動圖象專家組]開發(fā) )視頻編碼方面主要是Mpeg1(vcd用的就是它)载城、Mpeg2(DVD使用)、Mpeg4(的DVDRIP使用的都是它的變種费就,如:divx诉瓦,xvid等)、Mpeg4 AVC(正熱門)力细;音頻編碼方面主要是MPEG Audio Layer 1/2睬澡、MPEG Audio Layer 3(大名鼎鼎的mp3)、MPEG-2 AAC 眠蚂、MPEG-4 AAC等等煞聪。注意:DVD音頻沒有采用Mpeg的。

H.26X系列

(由ITU[國際電傳視訊聯(lián)盟]主導逝慧,側(cè)重網(wǎng)絡(luò)傳輸昔脯,注意:只是視頻編碼

包括H.261、H.262笛臣、H.263栅干、H.263+、H.263++捐祠、H.264(就是MPEG4 AVC-合作的結(jié)晶)?[1]

? ??圖像壓縮編碼有多種,如JPEG桑李、PSD踱蛀、GIF等窿给,把視頻的每一幀圖片壓縮成JPEG格式(編碼),就是Motion JPEG率拒。用這種視頻壓縮格式壓縮完的視頻還是會很大崩泡,難以傳輸和存儲。我們注意到猬膨,很多情況下角撞,視頻每兩幀之間的畫面差異并不大,所以記錄兩幀圖片的全量數(shù)據(jù)會有很多重復數(shù)據(jù)勃痴,這樣谒所,我們就可以記錄增量,從而大大減少數(shù)據(jù)存儲量沛申。H264就采用了這種存增量的思想劣领,以高壓縮高質(zhì)量和支持多種網(wǎng)絡(luò)的流媒體傳輸著稱。H264采用的核心算法是幀內(nèi)壓縮和幀間壓縮铁材,幀內(nèi)壓縮是生成I幀的算法尖淘,幀間壓縮是生成B幀和P幀的算法。I幀表示關(guān)鍵幀著觉,可以理解為這一幀畫面的完整保留村生,解碼時只需要本幀數(shù)據(jù)就可以完成;P幀解碼時饼丘,需要它前一幀的信息趁桃;B幀解碼時需要它前一幀和后一幀的數(shù)據(jù)。

#封裝格式(包裝部分)

? ? 封裝格式(也叫容器)葬毫,就是將已經(jīng)編碼壓縮好的視頻軌和音頻軌按照一定格式放到一個文件中镇辉,也就是說,僅僅是一個外殼贴捡。通俗講:視頻軌是米飯忽肛,音頻軌是菜,封裝格式就是一個鍋或者碗烂斋。

AVI:微軟在90年代初創(chuàng)立的封裝標準屹逛,壓縮標準可任意選擇。

FLV:針對于h.263家族的格式汛骂,ts流媒體格式罕模,電視。

MKV:萬能封裝器帘瞭,有良好的兼容和跨平臺性淑掌、糾錯性,可帶?外掛字幕蝶念。

MOV:MOV是Quicktime封裝抛腕。

MP4:主要應(yīng)用于mpeg4的封裝 芋绸。

TS/PS:PS封裝只能在HDDVD原版。

WMV:微軟推出的担敌,作為市場競爭摔敛。

#解碼

? ? 解碼,是編碼流程的逆過程全封。

#重采樣

????Android放音的采樣率固定為44.1KHz马昙,錄音的采樣率固定為8KHz,因此底層的音頻設(shè)備驅(qū)動需要設(shè)置好這兩個固定的采樣率刹悴。如果上層傳過來的采樣率不符的話行楞,需要進行resample重采樣處理。

?幾個名詞:

1. 采樣率

? ? 采樣設(shè)備每秒抽取樣本的次數(shù)

2.?音頻格式及量化精度(位寬)

? ? 每種音頻格式有不同的量化精度(位寬)颂跨,位數(shù)越多敢伸,表示值就越精確,聲音表現(xiàn)自然就越精準恒削。FFMpeg中音頻格式有以下幾種池颈,每種格式有其占用的字節(jié)數(shù)信息:

AV_SAMPLE_FMT_U8, ///< unsigned 8 bits?

AV_SAMPLE_FMT_S16, ///< signed 16 bits

?AV_SAMPLE_FMT_S32, ///< signed 32 bits

?AV_SAMPLE_FMT_FLT, ///< float?

?AV_SAMPLE_FMT_DBL, ///< double

3.?分片(plane)和打包(packed)

? ? 以雙聲道為例,帶P(plane)的數(shù)據(jù)格式在存儲時钓丰,其左聲道和右聲道的數(shù)據(jù)是分開存儲的躯砰,左聲道的數(shù)據(jù)存儲在data[0],右聲道的數(shù)據(jù)存儲在data[1]携丁,每個聲道的所占用的字節(jié)數(shù)為linesize[0]和linesize[1]琢歇;

? ? 不帶P(packed)的音頻數(shù)據(jù)在存儲時,是按照LRLRLR...的格式交替存儲在data[0]中梦鉴,linesize[0]表示總的數(shù)據(jù)量李茫。

4.?聲道分布(channel_layout)

? ? 聲道分布在FFmpeg\libavutil\channel_layout.h中有定義,一般來說用的比較多的是AV_CH_LAYOUT_STEREO(雙聲道)和AV_CH_LAYOUT_SURROUND(三聲道)

#像素格式

????RGB是一種常見的顏色編碼方法肥橙,在顯示器上魄宏,是通過電子槍打在屏幕的紅(Red)、綠(Green)存筏、藍(Blue)三色發(fā)光極上來產(chǎn)生色彩的; 而相機采集到的圖像是使用YUV顏色編碼方式,“Y”表示明亮度宠互,“U”和“V”則是色度濃度椭坚。我們的視頻就是由相機采集到的予跌,所以我們要處理的視頻里每一幀的顏色編碼格式為YUV,要顯示到屏幕上到話善茎,需要處理頻里每一幀的顏色編碼格式券册,YUV 轉(zhuǎn)換為RGB。RGB存放方式:矩陣每一行做了對其操作,每行數(shù)據(jù)后會多一些數(shù)據(jù)汁掠。


YUV三種存儲數(shù)據(jù)形式

大體開發(fā)階段

1.做一個播放自定義格式視頻的視頻播放器略吨。【原因:輸入我們系統(tǒng)的視頻格式是各式各樣的考阱,如mp4、mov等鞠苟,我們需要將他們處理成我們自定義的視頻格式乞榨,再進行視頻編輯處理】

2.做視頻裁剪

3.做視頻改分辨率、播放速度等

環(huán)境搭建

1.安裝android Studio

2.新建android項目

3.下載NDK当娱,點擊右上角的下載圖標吃既,找到SDK Tools,下載一下相關(guān)包跨细。

需要安裝的sdk tools

概念補充

參考https://blog.csdn.net/carson_ho/article/details/73250163

(1). JNI介紹

? ? 1.1簡介

? ? JNI鹦倚,全稱:Java Native Interface ,即java本地接口,作用:使得Java與本地其他類型語言(如c冀惭、 c++)交互震叙。

?????JNI是java調(diào)用Native語言的一種特性, JNI屬于java散休,與android無直接關(guān)系????

? ? 1.2實現(xiàn)步驟

? ? 1.在Java中聲明Native方法(即需要調(diào)用的本地(c++)方法)

? ? 2.編譯上述Java源文件javac(得到.class文件)

? ? 3.通過javah命令導出JNI的頭文件(.h文件)

? ? 4.使用java需要交互的本地代碼(c++) 實現(xiàn)在Java中聲明的Native方法

? ? 5.編譯.so庫文件

? ? 6.通過java命令執(zhí)行java程序媒楼,最終實現(xiàn)java調(diào)用本地代碼(c++)

(2). NDK介紹

? ? 2.1簡介

? ? NDK,全稱Native Development Kit,是Android的一個開發(fā)工具包戚丸,屬于android划址,與java無直接關(guān)系。作用:快速開發(fā)C限府、C++的動態(tài)庫夺颤,并自動將so的應(yīng)用一起打包成APK,即 可以通過NDK在Android中使用JNI與本地代碼(如C胁勺、C++)交互

? ??NDK允許用戶使用類似C / C++之類的原生代碼語言執(zhí)行部分程序

? ? 提供交叉編譯功能世澜,交叉編譯就是在一個平臺上生成另一個平臺上的可執(zhí)行代碼,在ndk中就是姻几,在把電腦上(x86架構(gòu))的代碼編譯成手機上(arm架構(gòu))的可執(zhí)行代碼宜狐。

? ? 在android studio中,通過NDK從而實現(xiàn)JNI的功能

? ? 其他解釋:

? ??NDK是一個工具集蛇捌,允許你的App使用一些底層語言代碼抚恒,例如C和C++。

????NDK提供一系列的工具络拌,幫助開發(fā)者快速的開發(fā)C(或者C++)動態(tài)庫俭驮,并能自動將這些.so庫文件和Java應(yīng)用程序打包到APK中。同時NDK工具集成了交叉編譯器,并提供了相應(yīng)的mk文件混萝,隔離了CPU遗遵、平臺、ABI等差異逸嘀,開發(fā)人員只需要簡單修改mk文件(指出“哪些文件需要編譯”车要、“編譯特性要求”等),就可以創(chuàng)建出so庫崭倘。這些將極大方便應(yīng)用開發(fā)者翼岁。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(原文:https://blog.csdn.net/chewbee/article/details/51927105)

? ? 2.2實現(xiàn)步驟

? ? 1. 配置 Android NDK環(huán)境

? ? 2. 創(chuàng)建 Android 項目,并與 NDK進行關(guān)聯(lián)

? ? 3. 在 Android 項目中聲明所需要調(diào)用的 Native方法

????4. 使用 Android需要交互的本地代碼 實現(xiàn)在Android中聲明的Native方法

? ? ? ? eg.比如 Android 需要與 C++ 交互司光,那么就用C++ 實現(xiàn) Java的Native方法

????5. 通過 ndk - bulid 命令編譯產(chǎn)生.so庫文件

? ? 6. 編譯 Android Studio 工程琅坡,從而實現(xiàn) Android 調(diào)用本地代碼


配置好NDK后的樣子,需要根據(jù)需求修改C++文件 &?Android

(3)NDK和JNI的關(guān)系

? ? 1.JNI是實現(xiàn)的方法残家,NDK是在android中實現(xiàn)JNI的手段榆俺。即,在android studio中坞淮,通過NDK來實現(xiàn)JNI功能


4.建git倉庫

5.把ffmapeg編譯到安卓平臺上(坑較多)

作業(yè)

把ffmapeg編譯到安卓平臺上流程理解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末茴晋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子碾盐,更是在濱河造成了極大的恐慌晃跺,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毫玖,死亡現(xiàn)場離奇詭異掀虎,居然都是意外死亡,警方通過查閱死者的電腦和手機付枫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門烹玉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阐滩,你說我怎么就攤上這事二打。” “怎么了掂榔?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵继效,是天一觀的道長。 經(jīng)常有香客問我装获,道長瑞信,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任穴豫,我火速辦了婚禮凡简,結(jié)果婚禮上逼友,老公的妹妹穿的比我還像新娘。我一直安慰自己秤涩,他們只是感情好帜乞,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著筐眷,像睡著了一般黎烈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浊竟,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天怨喘,我揣著相機與錄音,去河邊找鬼振定。 笑死,一個胖子當著我的面吹牛肉拓,可吹牛的內(nèi)容都是我干的后频。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼暖途,長吁一口氣:“原來是場噩夢啊……” “哼卑惜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起驻售,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤露久,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后欺栗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毫痕,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年迟几,在試婚紗的時候發(fā)現(xiàn)自己被綠了消请。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡类腮,死狀恐怖臊泰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚜枢,我是刑警寧澤缸逃,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站厂抽,受9級特大地震影響需频,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜修肠,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一贺辰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦饲化、人聲如沸莽鸭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硫眨。三九已至,卻和暖如春巢块,著一層夾襖步出監(jiān)牢的瞬間礁阁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工族奢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姥闭,地道東北人朦佩。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓漠吻,卻偏偏與公主長得像院仿,于是被迫代替她去往敵國和親题翰。 傳聞我的和親對象是個殘疾皇子莱坎,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • [TOC] 音視頻&流媒體 是什么促使我要寫這一篇音視頻入門文章俊抵?那是因為和一妹子打賭碼率的概念湿右,結(jié)果輸了痰憎;對一個...
    AllenWu閱讀 4,806評論 1 25
  • FFmpeg開發(fā)文檔 前言 之前寫了很多關(guān)于ndk的文章骡澈,也以FFmpeg的編譯為例大概的講述了一次ndk開發(fā)從編...
    任振銘閱讀 1,162評論 0 11
  • 日總結(jié)20170714 修身:堅持晨跑 锅纺,堅持看書 建功:刻章已妥,絲洛芬歷史往來賬目整理 齊家:給家人打電話 現(xiàn)...
    隔世的風閱讀 104評論 0 0
  • 在遠古時期肋殴,先圣伏儀經(jīng)常仰首觀望日月星辰天象變化囤锉,低頭查看山川澤壑的形態(tài),并時常注意鳥獸動物的皮毛文彩疼电,以及千姿百...
    海平大學堂閱讀 295評論 0 1
  • face-landmarking-ioshttps://github.com/zweigraf/face-land...
    kakukeme閱讀 3,361評論 3 51