android+ffmpeg 解码264视频流
血色天坑 2015-08-27 05:36:58 最近在做视频传输,PC与PC端在局域网内传输已经实现,即一台电脑连接一个工业相机,将相机拍摄的视频实时编码(使用x264库)然后RTP封包发送,另一台电脑进行接收使用ffmpeg解码并显示,效果还可以。
现在想要将接收端换成Android手机,如法炮制,发送端还是PC没有变,接收端需要将ffmpeg移植到Android上,通过参考资料http://blog.csdn.net/gobitan/article/details/22750719 我成功生成了相应so库,并使用jni技术,在Android手机上实现了对手机本地.264文件的解码显示,一切顺利。下面问题来了:
现在我想要用手机读取网络端口过来的视频流数据并解码显示,采用之前PC-PC传输的方法,我让它通过读取sdp文件来读取网络端口的流数据,test.sdp内容如下所示,
v=0
o=- 0 0 IN IP4 192.168.1.10
s=No Name
c=IN IP4 192.168.1.18
t=0 0
a=tool:libavformat 55.37.102
m=video 6666 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1
我的sdp文件中没有给出sps和pps的编码值,不过我在发送端编码发送的时候每隔一段时间就会发送一次sps和pps所以我之前PC-PC传输成功了,可是这次,直接在avformat_open_input()的时候就返回-1094995529,我查了下这是AVERROR_INVALIDDATA的值,求指点!
分析:是我编译ffmpeg的时候出了问题了吗?我已经注意编译的时候开启了network、rtsp、sdp等功能了啊,附上我的.sh文件,如下
#!/bin/bash
NDK=D:/NDK/android-ndk-r10d
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64
function build_one {
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-doc \
--disable-symver \
--enable-network \
--enable-demuxer=rtsp \
--enable-demuxer=sdp \
--enable-protocols \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one
求指点,深表感谢!!