導航:首頁 > 操作系統 > androidffmpeg編碼格式

androidffmpeg編碼格式

發布時間:2024-06-15 05:39:23

A. android ffmpeg支持rmvb格式嗎

要讓ffmpeg支持硬解碼就必須用android的媒體庫 libstagefright
下載libstagefright的花就要到ffmpeg 目錄的tools 目錄下面, 這里有個 build-libstagefright.sh , 其內容如下:
#!/bin/bash
#在這里添加你的NDK目錄
if [ "$NDK" = "" ]; then
echo NDK variable not set, assuming ${HOME}/android-ndk
export NDK=${HOME}/android-ndk
fi

echo "Fetching Android system headers"
git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_frameworks_base.git ../android-source/frameworks/base
git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_system_core.git ../android-source/system/core

echo "Fetching Android libraries for linking"
# Libraries from any froyo/gingerbread device/emulator should work
# fine, since the symbols used should be available on most of them.
if [ ! -d "../android-libs" ]; then
if [ ! -f "../update-cm-7.0.3-N1-signed.zip" ]; then
wgethttp://download、cyanogenmod、com/get/update-cm-7.0.3-N1-signed.zip -P../
fi
unzip ../update-cm-7.0.3-N1-signed.zip system/lib/* -d../
mv ../system/lib ../android-libs
rmdir ../system
fi

SYSROOT=$NDK/platforms/android-9/arch-arm
# Expand the prebuilt/* path into the correct one
TOOLCHAIN=`echo $NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/*-x86`
export PATH=$TOOLCHAIN/bin:$PATH
ANDROID_SOURCE=../android-source
ANDROID_LIBS=../android-libs
ABI="armeabi-v7a"

rm -rf ../build/stagefright
mkdir -p ../build/stagefright

DEST=../build/stagefright
FLAGS="--target-os=linux --cross-prefix=arm-linux-androideabi- --arch=arm --cpu=armv7-a"
FLAGS="$FLAGS --sysroot=$SYSROOT"
FLAGS="$FLAGS --disable-avdevice --disable-decoder=h264 --disable-decoder=h264_vdpau --enable-libstagefright-h264"

EXTRA_CFLAGS="-I$ANDROID_SOURCE/frameworks/base/include -I$ANDROID_SOURCE/system/core/include"
EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/frameworks/base/media/libstagefright"
EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/frameworks/base/include/media/stagefright/openmax"
EXTRA_CFLAGS="$EXTRA_CFLAGS -I$NDK/sources/cxx-stl/gnu-libstdc /include -I$NDK/sources/cxx-stl/gnu-libstdc /libs/$ABI/include"

EXTRA_CFLAGS="$EXTRA_CFLAGS -march=armv7-a -mfloat-abi=softfp -mfpu=neon"
EXTRA_LDFLAGS="-Wl,--fix-cortex-a8 -L$ANDROID_LIBS -Wl,-rpath-link,$ANDROID_LIBS -L$NDK/sources/cxx-stl/gnu-libstdc /libs/$ABI"
EXTRA_CXXFLAGS="-Wno-multichar -fno-exceptions -fno-rtti"
DEST="$DEST/$ABI"
FLAGS="$FLAGS --prefix=$DEST"

mkdir -p $DEST

echo $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" --extra-cxxflags="$EXTRA_CXXFLAGS" > $DEST/info.txt
#注意看這里是./configure,說明這個腳本要移動到上級目錄去執行,也就是ffmpeg目錄下。而不是僅僅把./configure 修改為 ../configure ,不然找不到頭文件什麼的,我之前說錯了 sorry ./configure $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" --extra-cxxflags="$EXTRA_CXXFLAGS" | tee $DEST/configuration.txt
[ $PIPESTATUS == 0 ] || exit 1
make clean
make -j4 || exit 1

你會發現這裡面綠色的兩行是要用git工具的。 git是啥? github 專用的下載工具,功能和svn類似。
這個東西用apt-get install 的方法居然裝不上,後來用新立德軟體管理器安裝成功了,oh-yeah! 但是接下來遇到一個問題: 我們公司是有代理網關的, 通過網關要用戶密碼。 而git始終沒有辦法通過代理網關。
網上提供的方法多半是裝一個connect 工具, 進行埠轉換。我覺得太麻煩了。經過一番折騰之後驚奇的發現,把 git://github.com/CyanogenMod/... 修改為https://github。com/CyanogenMod/ 就能下載了! !
還在被代理困擾的孩紙們可以試試

B. 如何在Android用FFmpeg解碼圖像

注冊, 初始化avformatcontext, 打開視頻流文件。 根據視頻流信息找到對應的codec。 初始化avcodeccontext。 開始循環,初始化一個frame 讀取一個packet, 判斷packet類型, 根據類型,調用對應的(音/視/字幕)解碼函數。 得到frame。 釋放packet。如果packet的類型是視頻,拷貝 frame->data,釋放frame。 將拷貝後的bytes轉換成bitmap給安卓。

C. ffmpeg 可以製作VP6編碼格式碼流嗎怎麼製作。命令是什麼

不可以,vp6是一個很老的編碼格式了,只支持解碼,不支持編碼。可以查看以下ffmpeg官方命令的查詢列表。
現在的ffmpeg新版本,目前,最低只支持到VP8的編碼,最新是VP9,未來還會支持更高版本的編碼器。
Codecs:
D..... = Decoding supported
.E.... = Encoding supported
..V... = Video codec
..A... = Audio codec
..S... = Subtitle codec
...I.. = Intra frame-only codec
....L. = Lossy compression
.....S = Lossless compression
-------
D.V.L. vp3 On2 VP3
D.V.L. vp4 On2 VP4
D.V.L. vp5 On2 VP5
D.V.L. vp6 On2 VP6
D.V.L. vp6a On2 VP6 (Flash version, with alpha channel)
D.V.L. vp6f On2 VP6 (Flash version)
D.V.L. vp7 On2 VP7
DEV.L. vp8 On2 VP8 (decoders: vp8 libvpx vp8_cuvid vp8_qsv ) (encoders: libvpx )
DEV.L. vp9 Google VP9 (decoders: vp9 libvpx-vp9 vp9_cuvid ) (encoders: libvpx-vp9 )

D. ffmpeg基礎知識

ffmpeg是音視頻處理的c庫, 音視頻在網路傳輸過程中,由於數據量大,所有需要進行壓縮
壓縮目的為了去除冗餘信息,冗餘信息分為:
1、空間冗餘:圖像相鄰像素之間有較強的相關性
2、時間冗餘:視頻序列的相鄰圖像之間內容相似
3、 編碼冗餘:不同像素值出現的概率不同
​4、 視覺冗餘:人的視覺系統對某些細節不敏感
​ 5、知識冗餘:規律性的結構可由先驗知識和背景知識得到

● 無損壓縮(Winzip)
​ 壓縮前解壓縮後圖像完全一致
​ 壓縮比低

● 有損壓縮(H.264)
​ 壓縮前解壓縮後圖像不一致
​ 壓縮比高
​ 利用人的視覺系統的特性(人眼能見的動畫頻率和圖像細節有限制)

音視頻壓縮其實就是對音視頻進行編碼,
視頻編碼格式

音頻編碼格式

封裝格式

流媒體協議

YUV ,是一種 顏色 編碼 方法。常使用在各個視頻處理組件中。 YUV在對照片或視頻編碼時,考慮到人類的感知能力,允許降低色度的帶寬。
YUV是編譯true-color顏色空間(colorspace)的種類,Y'UV,YUV, YCbCr , YPbPr 等專有名詞都可以稱為YUV,彼此有重疊。「Y」表示 明亮度 (Luminance、Luma),「U」和「V」則是**[色度]
YUV格式有兩大類:(平面格式)planar和(打包格式)packed。

1.planar:先存儲Y,然後U,然後V

2.packed:yuv交叉存儲

還有我們常說的YUV420sp與YUV420p。

YUV420sp: 一種two-plane模式,即Y和UV分為兩個平面,U、V交錯排列。

YUV420p: 先把U存放完後,再存放V。UV是連續的。

YUV420的數據大小為: 亮度(行×列) + V(行×列/4) + U(行×列/4)即:W H 3/2,

普遍的編碼器都以接受planar的I420數據(YUV420P)

4*4的I420數據排列如下:

y1 y2 y3 y4

y5 y6 y7 y8

y9 y10 y11 y12

y13 y14 y15 y16

u1 u2 u3 u4

v1 v2 v3 v4
Android相機的採集的視頻是NV21(YUV420sP), 也是YUV的格式 只不過U和V的交叉的。
y1 y2 y3 y4

y5 y6 y7 y8

y9 y10 y11 y12

y13 y14 y15 y16

u1 v1 u2 v2

u3 v3 u4 v4
在採集相機數據時需要把UV數據給轉換成上面的 順序。

I frame :幀內編碼幀 ,I 幀通常是每個 GOP(MPEG 所使用的一種視頻壓縮技術)的第一個幀,經過適度地壓縮,做為隨機訪問的參考點,可以當成圖象。I幀可以看成是一個圖像經過壓縮後的產物。

P frame: 前向預測編碼幀,通過充分將低於圖像序列中前面已編碼幀的時間冗餘信息來壓縮傳輸數據量的編碼圖像,也叫預測幀;

B frame: 雙向預測內插編碼幀 ,既考慮與源圖像序列前面已編碼幀,也顧及源圖像序列後面已編碼幀之間的時間冗餘信息來壓縮傳輸數據量的編碼圖像,也叫雙向預測幀;

I frame:自身可以通過視頻解壓演算法解壓成一張單獨的完整的圖片。

P frame:需要參考其前面的一個I frame 或者B frame來生成一張完整的圖片。

B frame:則要參考其前一個I或者P幀及其後面的一個P幀來生成一張完整的圖片。

PTS:Presentation Time Stamp。PTS主要用於度量解碼後的視頻幀什麼時候被顯示出來

DTS:Decode Time Stamp。DTS主要是標識讀入內存中的幀數據在什麼時候開始送入解碼器中進行解碼。

在沒有B幀存在的情況下DTS的順序和PTS的順序應該是一樣的。

DTS主要用於視頻的解碼,在解碼階段使用。PTS主要用於視頻的同步和輸出.在顯示的時候使用。

如上圖:I frame 的解碼不依賴於任何的其它的幀.而p frame的解碼則依賴於其前面的I frame或者P frame.B frame的解碼則依賴於其前的最近的一個I frame或者P frame 及其後的最近的一個P frame.

libavformat

​ 用於各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息以生成解碼上下文結構和讀取音視頻幀等功能;音視頻的格式解析協議,為 libavcodec 分析碼流提供獨立的音頻或視頻碼流源。

libavcodec

​ 用於各種類型聲音/圖像編解碼;該庫是音視頻編解碼核心,實現了市面上可見的絕大部分解碼器的功能,libavcodec 庫被其他各大解碼器 ffdshow,Mplayer 等所包含或應用。

libavfilter

​ filter(FileIO、FPS、DrawText)音視頻濾波器的開發,如水印、倍速播放等。

libavutil

​ 包含一些公共的工具函數的使用庫,包括算數運算 字元操作;

libswresample

​ 原始音頻格式轉碼。

libswscale
​ (原始視頻格式轉換)用於視頻場景比例縮放、色彩映射轉換;圖像顏色空間或格式轉換,如 rgb565,rgb888 等與 yuv420 等之間轉換。

音視頻解5封裝流程:

ffmpeg解碼流程:

閱讀全文

與androidffmpeg編碼格式相關的資料

熱點內容
用演算法控制玩家的行為 瀏覽:482
androidsdk17下載 瀏覽:792
怎麼給單獨表格添加密碼 瀏覽:12
下載壓縮密碼 瀏覽:259
android系統上編程 瀏覽:468
單片機模擬i2c從機 瀏覽:236
教育年報系統伺服器如何開啟 瀏覽:840
對稱密鑰加密後的長度 瀏覽:292
微製造編程軟體下載 瀏覽:106
旋住宿酒店用哪個App最好 瀏覽:60
三菱編程中怎麼創建子程序 瀏覽:199
在單片機溫度輸入採集信號有 瀏覽:684
電腦雲伺服器同步 瀏覽:418
方舟生存進化手游版怎麼轉伺服器 瀏覽:89
哪個app可以聽小說 瀏覽:160
網路發送數據如何加密 瀏覽:201
教材完全解讀pdf 瀏覽:820
什麼是多台伺服器 瀏覽:36
菜鳥音樂編輯app哪個好 瀏覽:548
人工魚群演算法matlab 瀏覽:83