导航:首页 > 操作系统 > 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硬解码相关的资料

热点内容
c语言编译之后如何运行 浏览:566
mfc多线程编程视频 浏览:410
c编译的中文怎么写 浏览:91
单片机连接蜂鸣器电路 浏览:844
程序员买房前后对比照 浏览:988
cmdjava中文乱码 浏览:947
窗口app哪个好 浏览:731
xzforandroid 浏览:577
程序员那么可爱歌曲完整版 浏览:906
为什么购买pdf 浏览:45
操作系统代码编译 浏览:483
程序员东北大学 浏览:426
编译忽略空字符 浏览:117
多店铺阿里云服务器教程 浏览:378
单片机求初值 浏览:420
安卓机如何在电脑备份图片 浏览:925
ca证书加密机价格 浏览:798
天干地支年份算法 浏览:797
程序员打造的视频 浏览:7
java和php通信 浏览:681