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

转自:http://bashell.sinaapp.com/archives/using-ffmpeg-1_0-rtmp-protocol-decode-h264-stream.html

正在做一个基于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

? View Code SHELL
1
2
#!/bin/bash 
./configure --disable-yasm --prefix=/usr --enable-small --disable-debug  --cc="ccache gcc" --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-everything --enable-protocol=rtmp --disable-demuxers --enable-demuxer=flv  --enable-demuxer=h264 --disable-parsers --enable-parser=h264 --enable-parser=aac  --disable-decoders --enable-decoder=h264 --enable-decoder=rawvideo

build_armeabi

? View Code SHELL
1
2
3
4
5
6
#!/bin/bash 
NDKRROOT=/home/aliang/Application/android-ndk 
PREBUILT=$NDKRROOT/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86 
PLATFORM=$NDKRROOT/platforms/android-8/arch-arm 
export PATH=$PATH:$PREBUILT/bin 
./configure --prefix=$PWD/armeabi --arch=arm --target-os=linux --enable-cross-compile --extra-cflags="-I$PLATFORM/usr/include -O3 -msoft-float" --extra-ldflags="-L$PLATFORM/usr/lib -nostdlib  -lc -lm -ldl" --cc="ccache arm-linux-androideabi-gcc"  --enable-small --disable-debug --cross-prefix=arm-linux-androideabi-  --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver  --disable-encoders --disable-muxers --disable-filters --disable-bsfs --disable-indevs --disable-outdevs --disable-protocols --enable-protocol=rtmp --disable-demuxers --enable-demuxer=flv  --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

build_armeabi-v7a

? View Code SHELL
1
2
3
4
5
6
#!/bin/bash 
NDKRROOT=/home/aliang/Application/android-ndk 
PREBUILT=$NDKRROOT/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86 
PLATFORM=$NDKRROOT/platforms/android-8/arch-arm 
export PATH=$PATH:$PREBUILT/bin 
./configure --prefix=$PWD/armeabi-v7a --arch=arm --target-os=linux --enable-cross-compile --extra-cflags="-I$PLATFORM/usr/include -O3 -march=armv7-a -mfpu=neon -mfloat-abi=softfp" --extra-ldflags="-L$PLATFORM/usr/lib -nostdlib  -lc -lm -ldl" --cc="ccache arm-linux-androideabi-gcc"  --enable-small --disable-debug --cross-prefix=arm-linux-androideabi-  --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver  --disable-encoders --disable-muxers --disable-filters --disable-bsfs --disable-indevs --disable-outdevs --disable-protocols --enable-protocol=rtmp --disable-demuxers --enable-demuxer=flv  --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

 

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

参考:

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

你可能感兴趣的:(android,图像与音视频)