您的位置:首页 > 其它

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

2013-12-29 22:00 886 查看
转自: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
23
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
23
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平台上可以使用相同的代码。

参考:

http://stackoverflow.com/questions/9251747/record-rtsp-stream-with-ffmpeg-libavformat
https://github.com/lajos/iFrameExtractor
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: