关于Android ffmpeg 的问题??请教各位前辈!!!!!!!!!!!

yierhan111 2013-09-23 06:13:50
采用的方法cygwin + ndk-r9 + xp +ffmpeg0.9.3
参考http://zzhhui.blog.sohu.com/244819188.html编译静态库的方法,我在XP下终于编译出了
libavcodec.a、libavformat.a、libavutil.a、libpostproc.a、libswscale.a和libffmpeg.so

然后再参照
https://github.com/churnlabs/android-ffmpeg-sample方法建立工程

工程如下


Android.mk文件如下

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := ffmpeg
LOCAL_SRC_FILES := native.c

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_LDLIBS := -L$(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-arm/usr/lib -L$(LOCAL_PATH) -lavformat -lavcodec -lpostproc -lavutil -lswscale -llog -ljnigraphics -lz -ldl -lgcc

include $(BUILD_SHARED_LIBRARY)

native.c文件如下

void Java_cn_ct_rtmpdemo_MainActivity_openFile(JNIEnv * env, jobject this)
{
int ret;
int err;
int i;
AVCodec *pCodec;
uint8_t *buffer;
int numBytes;

avcodec_init();
av_register_all();
avformat_network_init();
LOGE("Registered formats");
err = av_open_input_file(&pFormatCtx, "rtmp://202.64.87.58/e/855crovd1", NULL, 0, NULL);
LOGE("Called open file");
if(err!=0) {
LOGE("Couldn't open file");
return;
}
LOGE("Opened file");

if(av_find_stream_info(pFormatCtx)<0) {
LOGE("Unable to get stream info");
return;
}

videoStream = -1;
for (i=0; i<pFormatCtx->nb_streams; i++) {//AVMEDIA_TYPE_VIDEO
// if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO) {
if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO) {
videoStream = i;
break;
}
}
if(videoStream==-1) {
LOGE("Unable to find video stream");
return;
}

LOGI("Video stream is [%d]", videoStream);

pCodecCtx=pFormatCtx->streams[videoStream]->codec;

pCodec=avcodec_find_decoder(pCodecCtx->codec_id);
if(pCodec==NULL) {
LOGE("Unsupported codec");
return;
}

if(avcodec_open(pCodecCtx, pCodec)<0) {
LOGE("Unable to open codec");
return;
}

pFrame=avcodec_alloc_frame();
pFrameRGB=avcodec_alloc_frame();
LOGI("Video size is [%d x %d]", pCodecCtx->width, pCodecCtx->height);

numBytes=avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width, pCodecCtx->height);
buffer=(uint8_t *)av_malloc(numBytes*sizeof(uint8_t));

avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24,
pCodecCtx->width, pCodecCtx->height);
}

在NDK编译的时候报错
D:/android-ndk/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/objs/ffmpeg/native.o: in function Java_cn_ct_rtmpdemo_MainActivity_openFile:jni/native.c:119: error: undefined reference to 'avcodec_find_decoder'

提示avcodec_find_decoder找不到,但是在头文件中这个函数是有的,是不是我编译成静态库的时候出错了?
很多FFMPEG中的函数都提示找不到


下载下来的churnlabs这个工程是可以通过编译的,看了工程中的函数,在我的头文件中是都有的,都能找到啊
...全文
329 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
tommy_zhang 2013-12-11
  • 打赏
  • 举报
回复
问题解决了吗?我最近也在做这方面的东西,不过我移植的是VLC-Android,现在能播放rtmp流,就是延迟比较长,大概有5s左右。咱俩可以交流一下。QQ:56431858
illhan98 2013-09-30
  • 打赏
  • 举报
回复
编译的时候要加入rtmp
yierhan111 2013-09-24
  • 打赏
  • 举报
回复
没有前辈知道么
yierhan111 2013-09-24
  • 打赏
  • 举报
回复
引用 9 楼 youngc527 的回复:
av_register_all(); 调了没
有调用的 能打开视频文件,但是不能打开视频流
yierhan111 2013-09-24
  • 打赏
  • 举报
回复
引用 9 楼 youngc527 的回复:
av_register_all(); 调了没
av_register_all();// 初始化 libavformat和注册所有的muxers、demuxers和protocols avformat_network_init(); LOGE("Registered formats"); err = avformat_open_input(&pFormatCtx, "rtmp://xxx.xxx.87.58/e/mystream", NULL, NULL); LOGE("Called open file"); if(err!=0) { LOGE("Couldn't open file %d",err); return; } LOGE("Opened file");
yierhan111 2013-09-24
  • 打赏
  • 举报
回复
在工程中加入<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.INTERNET"/> 另外直接修改config.h跟config.mak文件中的network 还有rtmp协议,全部都打开或者设置成1 编译以后导入工程 av_open_input_file(&pFormatCtx, "rtmp://xxx.xxx.87.58/e/mystream", NULL, 0, NULL);还是出错,返回值始终是-5但是我的网络视频是好的,路径没有问题,用其他软件都能看
Darcy杨 2013-09-24
  • 打赏
  • 举报
回复
av_register_all(); 调了没
yierhan111 2013-09-24
  • 打赏
  • 举报
回复
确实是静态文件的问题,重新编辑了一下mk文件,编译出来的静态文件就可以了,ndk-build的时候能通过, 但是av_open_input_file(&pFormatCtx, "rtmp://xxx.xxx.87.58/e/mystream", NULL, 0, NULL);的返回值始终是负数,我的config.sh文件是这样的 #!/bin/bash PREBUILT=${NDK_ROOT}/toolchains/arm-linux-androideabi-4.8/prebuilt/windows PLATFORM=android-18 ARCH=--arch=arm ./configure \ ${ARCH} \ --target-os=linux --enable-cross-compile --cross-prefix=${PREBUILT}/bin/arm-linux-androideabi- \ --extra-cflags=" -fPIC -DANDROID -std=c99 " \ --enable-version3 \ --enable-gpl \ --enable-nonfree \ --disable-stripping \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffserver \ --disable-ffprobe \ --disable-encoders \ --enable-demuxer=rtsp \ --disable-devices \ --enable-protocols \ --enable-protocol=tcp \ --enable-avfilter \ --enable-network \ --enable-decoder=h264 \ --disable-avdevice \ --disable-asm \ --enable-neon \ --enable-armv5te \ --sysinclude=${NDK_ROOT}/platforms/${PLATFORM}/arch-arm/usr/include \ --extra-ldflags="-Wl,-rpath-link=${NDK_ROOT}/platforms/${PLATFORM}/arch-arm/usr/lib -L${NDK_ROOT}/platforms/${PLATFORM}/arch-arm/usr/lib -nostdlib ${NDK_ROOT}/platforms/${PLATFORM}/arch-arm/usr/lib/crtbegin_static.o ${NDK_ROOT}/platforms/${PLATFORM}/arch-arm/usr/lib/crtend_android.o -lc -lm -ldl " protocol跟network我都有打开啊,./config.sh的时候我看了一下提示 install prefix /usr/local source path . C compiler D:\android-ndk\android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-gcc ARCH c (generic) big-endian no runtime cpu detection no debug symbols yes strip symbols no optimize for size no optimizations yes static yes shared no postprocessing support yes new filter support yes network support no network support是no不是yes 是不是还有什么地方要设置,期待大婶来解答一下,感觉CSDN安卓板块的人好少啊
yierhan111 2013-09-23
  • 打赏
  • 举报
回复
是我搞错了,把churnlabs的JNI目录全部拷贝过来,刷新一下工程在编译,是可以的 可能是我静态文件的问题吧,是不是编译的步骤有什么问题
illhan98 2013-09-23
  • 打赏
  • 举报
回复
应该是静态文件的问题吧
yierhan111 2013-09-23
  • 打赏
  • 举报
回复
奇怪的是我把自己工程中的JNI文件夹全部都删除,然后拷贝churnlabs中的JNI文件夹到工程中来修改一下native.c文件,NDK编译的时候还是报错,所有的FFMPEG函数都找不到,是不是工程中还有什么地方要设置的,churnlabs用NDK是可以编译的
yierhan111 2013-09-23
  • 打赏
  • 举报
回复
为什么它的能找到我的却找不到呢
yierhan111 2013-09-23
  • 打赏
  • 举报
回复
我的配置路径跟churnlabs是一样的,也是把头文件放到include中的

80,354

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧