導航:首頁 > 操作系統 > androidffmpeg硬解碼

androidffmpeg硬解碼

發布時間:2022-09-09 03:26:20

Ⅰ ffmpeg 是否支持硬體解碼

ffmpeg解碼就是調用ffmpeg的開源庫函數進行解碼,這屬於軟體解碼,硬體解碼么就是用一些解碼晶元如dsp加一些演算法,更ffmpeg無關了。

Ⅱ 如何在android上集成ffmpeg

下面把具體編譯步驟描述如下,假定NDK安裝在~/android-ndk-r7:
1. 首先從FFmpeg官網下載最新的release版本源碼ffmpeg-0.11.tar.gz解壓縮到Android源碼樹的ffmpeg/下。
2 准備一個編譯腳本build_android.sh並放在ffmpeg/下面,這個腳本也是Rockplayer提供的,需做一些修改,其內容附在後面。我目前用的也會附在後面。
3 在ffmpeg目錄下運行./build_android.sh開始編譯FFmpeg,編譯好的libffmpeg.so會放在文件夾android裡面,一共有3個版本分別對應3種ARM體系結構,包括armv7-a、armv7-a-vfp、armv6_vfp,根據所運行的硬體平台選取其中一個版本。為了編譯使用FFmpeg的程序時可以方便地找到libffmpeg.so,可將它復制到$OUT/system/lib/和$OUT/obj/lib/,當然這一步也可以加在build_android.sh中做。
4. 接下來就是編譯可執行文件ffmpeg了,這個工具可以在命令行下完成FFmpeg提供的幾乎所有功能包括編碼、解碼、轉碼等,也是用來調試和驗證很有用的工具。其實上述編譯完後在$ANDROID_BUILD_TOP/external/ffmpeg/下也會生成ffmpeg,但是在設備上無法運行。為了編出能在設備上運行的ffmpeg,可以寫一個簡單的Android.mk,

Ⅲ 安卓開發怎麼將和h264文件解碼播放

如題所示,我想將攝像頭採集的數據進行h.264硬編碼,我想知道Android是如何對視頻數據進行硬體編碼的
目前已經知道的方案有:
1、用Android4.1 API MediaCodec來對視頻數據進行編碼

http://stackoverflow.com/q/17232477/2293921
此種方式我測試了,並未成功,目前一直卡在這里,如果你等幫助我,我將非常感激

2、通過MediaRecorder方式對數據進行編碼

具體可參考 http://blog.csdn.net/zblue78/article/details/6083374

3、通過移植ffmpeg

這種方式沒接觸過,也不了解

可能還有一些其他的方式來對視頻硬編碼,如果你了解一下,感謝分享!

綜上,我更傾向於1的方式去做

我來回答

Android , MediaCodec , 硬編碼

post_newreply

//$(\'note_\').focus();
function succeedhandle_vfastpost(url, message, param) {
$(\'vmessage\').value = \'\';
succeedhandle_fastpost(url, message, param);
showCreditPrompt();
}
var vf_tips = \'#在這里快速回復#\';
$(\'vmessage\').value = vf_tips;
$(\'vmessage\').style.color = \'#CDCDCD\';
$(\'vmessage\').onclick = function() {
if($(\'vmessage\').value==vf_tips) {
$(\'vmessage\').value=\'\';
$(\'vmessage\').style.color=\"#000\";
}
}
$(\'vmessage\').onblur = function() {
if(!$(\'vmessage\').value) {
$(\'vmessage\').value=vf_tips;
$(\'vmessage\').style.color=\"#CDCDCD\";
}
}
$(\'vreplysubmit\').onclick = function() {
if($(\'vmessage\').value == vf_tips) {
return false;
}
}

Ⅳ 如何在Android用FFmpeg+SDL2.0解碼顯示圖像

創建一個VideoPicture結構體用來保存解碼出來的圖像。

LOCAL_PATH:=$(callmy-dir)
###########################
#
#SDLsharedlibrary
#
###########################
include$(CLEAR_VARS)
LOCAL_MODULE:=SDL2
LOCAL_C_INCLUDES:=$(LOCAL_PATH)/include
LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_C_INCLUDES)
LOCAL_SRC_FILES:=
$(subst$(LOCAL_PATH)/,,
$(wildcard$(LOCAL_PATH)/src/*.c)
$(wildcard$(LOCAL_PATH)/src/audio/*.c)
$(wildcard$(LOCAL_PATH)/src/audio/android/*.c)
$(wildcard$(LOCAL_PATH)/src/audio/mmy/*.c)
$(LOCAL_PATH)/src/atomic/SDL_atomic.c
$(LOCAL_PATH)/src/atomic/SDL_spinlock.c.arm
$(wildcard$(LOCAL_PATH)/src/core/android/*.c)
$(wildcard$(LOCAL_PATH)/src/cpuinfo/*.c)
$(wildcard$(LOCAL_PATH)/src/dynapi/*.c)
$(wildcard$(LOCAL_PATH)/src/events/*.c)
$(wildcard$(LOCAL_PATH)/src/file/*.c)
$(wildcard$(LOCAL_PATH)/src/haptic/*.c)
$(wildcard$(LOCAL_PATH)/src/haptic/mmy/*.c)
$(wildcard$(LOCAL_PATH)/src/joystick/*.c)
$(wildcard$(LOCAL_PATH)/src/joystick/android/*.c)
$(wildcard$(LOCAL_PATH)/src/loadso/dlopen/*.c)
$(wildcard$(LOCAL_PATH)/src/power/*.c)
$(wildcard$(LOCAL_PATH)/src/power/android/*.c)
$(wildcard$(LOCAL_PATH)/src/filesystem/mmy/*.c)
$(wildcard$(LOCAL_PATH)/src/render/*.c)
$(wildcard$(LOCAL_PATH)/src/render/*/*.c)
$(wildcard$(LOCAL_PATH)/src/stdlib/*.c)
$(wildcard$(LOCAL_PATH)/src/thread/*.c)
$(wildcard$(LOCAL_PATH)/src/thread/pthread/*.c)
$(wildcard$(LOCAL_PATH)/src/timer/*.c)
$(wildcard$(LOCAL_PATH)/src/timer/unix/*.c)
$(wildcard$(LOCAL_PATH)/src/video/*.c)
$(wildcard$(LOCAL_PATH)/src/video/android/*.c)
$(wildcard$(LOCAL_PATH)/src/test/*.c))
LOCAL_CFLAGS+=-DGL_GLEXT_PROTOTYPES
LOCAL_LDLIBS:=-ldl-lGLESv1_CM-lGLESv2-llog-landroid
include$(BUILD_SHARED_LIBRARY)
###########################
#
#SDLstaticlibrary
#
###########################
#LOCAL_MODULE:=SDL2_static
#LOCAL_MODULE_FILENAME:=libSDL2
#LOCAL_SRC_FILES+=$(LOCAL_PATH)/src/main/android/SDL_android_main.c
#LOCAL_LDLIBS:=
#LOCAL_EXPORT_LDLIBS:=-Wl,--undefined=java_org_libsdl_app_SDLActivity_nativeInit-ldl-lGLESv1_CM-lGLESv2-llog-landroid
#include$(BUILD_STATIC_LIBRARY)


二、參考[原]如何在Android用FFmpeg解碼圖像, 在工程中新建一個ffmpeg文件夾,將與ffmpeg相關的頭文件include進來。ffmpeg文件夾下的Android.mk內容:

LOCAL_PATH:=$(callmy-dir)
include$(CLEAR_VARS)
LOCAL_MODULE:=ffmpeg
LOCAL_SRC_FILES:=/path/to/build/ffmpeg/libffmpeg.so
include$(PREBUILT_SHARED_LIBRARY)


三、新建player文件夾,用來編寫解碼與顯示文件。player.c文件內容:

/*
*SDL_Lesson.c
*
*Createdon:Aug12,2014
*Author:clarck
*/
#include<jni.h>
#include<android/native_window_jni.h>
#include"SDL.h"
#include"SDL_thread.h"
#include"SDL_events.h"
#include"../include/logger.h"
#include"../ffmpeg/include/libavcodec/avcodec.h"
#include"../ffmpeg/include/libavformat/avformat.h"
#include"../ffmpeg/include/libavutil/pixfmt.h"
#include"../ffmpeg/include/libswscale/swscale.h"
intmain(intargc,char*argv[]){
char*file_path=argv[1];
LOGI("file_path:%s",file_path);
AVFormatContext*pFormatCtx;
AVCodecContext*pCodecCtx;
AVCodec*pCodec;
AVFrame*pFrame,*pFrameYUV;
AVPacket*packet;
uint8_t*out_buffer;
SDL_Texture*bmp=NULL;
SDL_Window*screen=NULL;
SDL_Rectrect;
SDL_Eventevent;
staticstructSwsContext*img_convert_ctx;
intvideoStream,i,numBytes;
intret,got_picture;
av_register_all();
pFormatCtx=avformat_alloc_context();
if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO|SDL_INIT_TIMER)){
LOGE("CouldnotinitializeSDL-%s. ",SDL_GetError());
exit(1);
}
if(avformat_open_input(&pFormatCtx,file_path,NULL,NULL)!=0){
LOGE("can'topenthefile. ");
return-1;
}
if(avformat_find_stream_info(pFormatCtx,NULL)<0){
LOGE("Could'tfindstreaminfomation. ");
return-1;
}
videoStream=1;
for(i=0;i<pFormatCtx->nb_streams;i++){
if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO){
videoStream=i;
}
}
LOGI("videoStream:%d",videoStream);
if(videoStream==-1){
LOGE("Didn'tfindavideostream. ");
return-1;
}
pCodecCtx=pFormatCtx->streams[videoStream]->codec;
pCodec=avcodec_find_decoder(pCodecCtx->codec_id);
if(pCodec==NULL){
LOGE("Codecnotfound. ");
return-1;
}
if(avcodec_open2(pCodecCtx,pCodec,NULL)<0){
LOGE("Couldnotopencodec. ");
return-1;
}
pFrame=av_frame_alloc();
pFrameYUV=av_frame_alloc();
//---------------------------initsdl---------------------------//
screen=SDL_CreateWindow("MyPlayerWindow",SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,pCodecCtx->width,pCodecCtx->height,
SDL_WINDOW_FULLSCREEN|SDL_WINDOW_OPENGL);
SDL_Renderer*renderer=SDL_CreateRenderer(screen,-1,0);
bmp=SDL_CreateTexture(renderer,SDL_PIXELFORMAT_YV12,
SDL_TEXTUREACCESS_STREAMING,pCodecCtx->width,pCodecCtx->height);
//-------------------------------------------------------------//

img_convert_ctx=sws_getContext(pCodecCtx->width,pCodecCtx->height,
pCodecCtx->pix_fmt,pCodecCtx->width,pCodecCtx->height,
AV_PIX_FMT_YUV420P,SWS_BICUBIC,NULL,NULL,NULL);
numBytes=avpicture_get_size(AV_PIX_FMT_YUV420P,pCodecCtx->width,
pCodecCtx->height);
out_buffer=(uint8_t*)av_malloc(numBytes*sizeof(uint8_t));
avpicture_fill((AVPicture*)pFrameYUV,out_buffer,AV_PIX_FMT_YUV420P,
pCodecCtx->width,pCodecCtx->height);
rect.x=0;
rect.y=0;
rect.w=pCodecCtx->width;
rect.h=pCodecCtx->height;
inty_size=pCodecCtx->width*pCodecCtx->height;
packet=(AVPacket*)malloc(sizeof(AVPacket));
av_new_packet(packet,y_size);
av_mp_format(pFormatCtx,0,file_path,0);
while(av_read_frame(pFormatCtx,packet)>=0){
if(packet->stream_index==videoStream){
ret=avcodec_decode_video2(pCodecCtx,pFrame,&got_picture,
packet);
if(ret<0){
LOGE("decodeerror. ");
return-1;
}
LOGI("got_picture:%d",got_picture);
if(got_picture){
sws_scale(img_convert_ctx,
(uint8_tconst*const*)pFrame->data,
pFrame->linesize,0,pCodecCtx->height,pFrameYUV->data,
pFrameYUV->linesize);
////iPitch計算yuv一行數據占的位元組數
SDL_UpdateTexture(bmp,&rect,pFrameYUV->data[0],pFrameYUV->linesize[0]);
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer,bmp,&rect,&rect);
SDL_RenderPresent(renderer);
}
SDL_Delay(50);
}
av_free_packet(packet);
SDL_PollEvent(&event);
switch(event.type){
caseSDL_QUIT:
SDL_Quit();
exit(0);
break;
default:
break;
}
}
SDL_DestroyTexture(bmp);
av_free(out_buffer);
av_free(pFrameYUV);
avcodec_close(pCodecCtx);
avformat_close_input(&pFormatCtx);
return0;
}

四、編寫player文件夾下面的Androidmakefile,內容如下:
LOCAL_PATH:=$(callmy-dir)
include$(CLEAR_VARS)
LOCAL_MODULE:=player
SDL_PATH:=../SDL
FFMPEG_PATH:=../ffmpeg
LOCAL_C_INCLUDES:=$(LOCAL_PATH)/include
LOCAL_C_INCLUDES+=$(LOCAL_PATH)/$(SDL_PATH)/include
LOCAL_C_INCLUDES+=$(LOCAL_PATH)/$(FFMPEG_PATH)/include
#...
LOCAL_SRC_FILES:=$(SDL_PATH)/src/main/android/SDL_android_main.c
LOCAL_SRC_FILES+=player.c
LOCAL_SHARED_LIBRARIES:=SDL2
LOCAL_SHARED_LIBRARIES+=ffmpeg
LOCAL_LDLIBS:=-lGLESv1_CM-lGLESv2-llog
include$(BUILD_SHARED_LIBRARY)五、修改SDLActivity.java文件內容,用來載入libffmpeg.so以及libplayer.so,以及修改用來解碼的文件路徑。

//Loadthe.so
static{
System.loadLibrary("ffmpeg");
System.loadLibrary("SDL2");
//System.loadLibrary("SDL2_image");
//System.loadLibrary("SDL2_mixer");
//System.loadLibrary("SDL2_net");
//System.loadLibrary("SDL2_ttf");
System.loadLibrary("player");
}

/**
SimplenativeInit()runnable
*/
{
@Override
publicvoidrun(){
//RunsSDL_main()
Stringsdcard=Environment.getExternalStorageDirectory().getAbsolutePath();
SDLActivity.nativeInit("/sdcard/a.mp4");
//Log.v("SDL","SDLthreadterminated");
}
}

Ⅳ 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/ 就能下載了! !
還在被代理困擾的孩紙們可以試試

Ⅵ ffmpeg+cuda硬解碼右邊有黑條

ffmpeg+cuda硬解碼軟體有個去黑條命令,格式為ffmpeg-itest。mp4-vfcrop=200:360:220:0testOK。mp4,其中test。MP4為文件名。

Ⅶ 如何在Android用FFmpeg解碼圖像

這涉及到兩個問題,一個是解碼,另一個是顯示,解碼問題要先交叉編譯ffmpeg,然後參考下面的解碼流程

avcodec_register_all();
/*
########################################
[1]
########################################
*/
av_register_all();
/*
// Open video file
########################################
[2]
########################################
*/
pFormatCtx = avformat_alloc_context();

if(avformat_open_input(&pFormatCtx, filename, NULL, NULL)!=0)
return -1; // Couldn't open file

// Retrieve stream information
/*
########################################
[3]
########################################
*/
if(avformat_find_stream_info(pFormatCtx,NULL)<0)
return -1; // Couldn't find stream information

// Dump information about file onto standard error
// mp_format(pFormatCtx, 0, argv[1], 0);

// Find the first video stream
videoStream=-1;
for(i=0; i<pFormatCtx->nb_streams; i++)
if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO) {
videoStream=i;
break;
}
if(videoStream==-1)
return -1; // Didn't find a video stream

// Get a pointer to the codec context for the video stream
pCodecCtx=pFormatCtx->streams[videoStream]->codec;

// Find the decoder for the video stream
pCodec=avcodec_find_decoder(pCodecCtx->codec_id);
if(pCodec==NULL) {
fprintf(stderr, "Unsupported codec!\n");
return -1; // Codec not found
}
// Open codec
if(avcodec_open2(pCodecCtx, pCodec,NULL)<0)

pFrame=avcodec_alloc_frame();

// Allocate an picture structure
avpicture_alloc(&picture, PIX_FMT_RGB24, pCodecCtx->width, pCodecCtx->height);

// Determine required buffer size and allocate buffer
img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height, pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height, PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL, NULL);
if(img_convert_ctx == NULL)
{
fprintf(stderr, "Cannot initialize the conversion context!\n");
exit(1);
}

// Read frames and save first five frames to disk
/*
########################################
[4]
########################################
*/
i=0;
dirtyRegion.set(android::Rect(0x3FFF, 0x3FFF));
while(av_read_frame(pFormatCtx, &packet)>=0) {
// Is this a packet from the video stream?
if(packet.stream_index==videoStream) {
// Decode video frame
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished,
&packet);

// Did we get a video frame?
if(frameFinished) {
// Convert the image from its native format to RGB

sws_scale(img_convert_ctx,
pFrame->data, pFrame->linesize, 0, pCodecCtx->height,
picture.data, picture.linesize);

}
}

// Free the packet that was allocated by av_read_frame
av_free_packet(&packet);
}
pFrame為解碼後的數據,將它顯示在畫布上,就完成了FFMEPG解碼

Ⅷ android 中的 ffmpeg 是否添加了 rockchip 的硬體編解碼功能

涉及到硬編硬解絕對就是跟平台相關了,必須要用到相應平台的編解碼庫,還不如在自己寫個庫,自己調用,何必集成到ffmpeg中呢

Ⅸ android ffmpeg 硬解嗎

要讓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/ 就能下載了! !
還在被代理困擾的孩紙們可以試試

腳本最後執行了make 。是會編譯的,而且在編譯之前會先執行configure配置(原先的配置項會保留,同時會追加編譯stagefright 需要的參數)

Ⅹ 如何快速實現ffmpeg dxva2硬解碼

live555解 客戶端應該先RTP包解數據 放進內存 要邊存入已經H264格式視頻數據直接用ffmpeg進行解碼埃

閱讀全文

與androidffmpeg硬解碼相關的資料

熱點內容
求索記錄頻道哪個app可以看 瀏覽:726
金梅瓶pdf下載 瀏覽:967
機器軟體用什麼編程 瀏覽:841
java虛擬機指令 瀏覽:657
shell編程入門書籍 瀏覽:941
大連桶裝水溯源碼售價 瀏覽:302
php怎麼跳轉到電腦 瀏覽:414
如何在電腦上創建新網路連接伺服器 瀏覽:61
c語言編譯之後如何運行 瀏覽:569
mfc多線程編程視頻 瀏覽:411
c編譯的中文怎麼寫 瀏覽:91
單片機連接蜂鳴器電路 瀏覽:845
程序員買房前後對比照 瀏覽:990
cmdjava中文亂碼 瀏覽:948
窗口app哪個好 瀏覽:732
xzforandroid 瀏覽:580
程序員那麼可愛歌曲完整版 瀏覽:911
為什麼購買pdf 瀏覽:48
操作系統代碼編譯 瀏覽:483
程序員東北大學 瀏覽:429