使用ffmpeg-1.0内置RTMP协议实时解码H264视频流

正在做一个基于RTMP+H264的手机端实时视频流项目。
按以前的方案需要分别用librtmp/JUV和opencore的H264解码库实现。
在进一步了解FFmpeg后,决定全部使用ffmpeg来实现。
当然,在手机客户端上,多余的解码库是不需要的。因此需要对ffmpeg精简配置,最终jni代码编译链接libavcodec.a?libavformat.a ?libavutil.a?libswscale.a 后的so大小控制在1.2M左右,打包到apk后压缩到456k。
配置如下

build_i386

build_armeabi

build_armeabi-v7a

 

最大的好处就是统一了代码实现,在我们的IOS平台上可以使用相同的代码。

参考:

  1. http://stackoverflow.com/questions/9251747/record-rtsp-stream-with-ffmpeg-libavformat
  2. ?https://github.com/lajos/iFrameExtractor

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 使用ffmpeg-1.0内置RTMP协议实时解码H264视频流

14 评论

  1. 您好,最近对ffmpeg1.0(官网下载最新)源码进行android移植时遇到一些疑惑,我是win7-64的系统,用的cygwin,在最后so文件的编译时出现如下错误use_yg@LP0201 /cygdrive/f/Android/android-ndk-r8c/ffmpeg1.0$ $ndk/ndk-buildjni/ffmpeg/libavcodec/Makefile:1: *** 分離記号を欠いています. 中止.对ffmpeg源码目录中的libavcodev,libavfilter,libavformat,libavutil,libpostproc,libswscale中的Makefile,我是这样操作的,将Makefile中的开头:include $(SUBDIR)../config.mak都注释掉。也是在网上边学边做,不知博主能否抽出点宝贵的时间~谢谢

  2. 博主你好,你的博客很好,数字鸡巴论坛(www.dgcock.com)想跟你交换友情链接,可以的话请发送邮件到shuzijiba@qq.com联系我,期待答复

  3. 楼主可以方便把你的config.sh配置公开不,我的编译好静态库
    avformat_open_input打开rtmp视频流老是返回负值,我的视频流是没有问题,用其它软件可以打开,但是在ANDROID下面就不行

  4. #!/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-protocol=rtmp
    –disable-devices
    –disable-demuxers
    –enable-demuxer=flv
    –enable-avfilter
    –enable-network
    –enable-demuxer=h264
    –disable-parsers
    –enable-parser=h264
    –enable-parser=aac
    –disable-decoders
    –enable-decoder=h264
    –enable-decoder=rawvideo
    –enable-dct
    –enable-dwt
    –enable-lsp
    –enable-mdct
    –enable-rdft
    –enable-fft
    –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 "

    这是我的配置,里面又加了一些楼主的配置,我的NDK9

  5. 您好,楼主,我现在遇到问题是编译的时候出错了,configure按照您的指令,【ccKxg8Cg.s:1834: Error: unshifted register required — `eor r2,r3,r3,ror#16’】这是错误信息,使用的是ffmpeg1.1.4。指导一下吧谢谢。

  6. 牛人,我们需要使用的ffpmeg实时解码网络流媒体然后建立一个本地的流,这块想找个牛人开发,我们有一个别人开发的APK做参考,如果你有时间,请联系我:QQ362837270 周先生!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据