【发布时间】:2015-03-26 17:19:53
【问题描述】:
这是我的问题,
我已经使用 Red5 实现了一个服务器端应用程序,它发送 H.264 编码的实时流,在客户端接收流作为字节 []
为了在 Android 客户端解码它,我遵循了 Javacv-FFmpeg 库。解码代码如下
public Frame decodeVideo(byte[] data,long timestamp){
frame.image = null;
frame.samples = null;
avcodec.av_init_packet(pkt);
BytePointer video_data = new BytePointer(data);
avcodec.AVCodec codec = avcodec.avcodec_find_decoder(codec_id);
video_c = null;
video_c = avcodec.avcodec_alloc_context3(codec);
video_c.width(320);
video_c.height(240);
video_c.pix_fmt(0);
video_c.flags2(video_c.flags2()|avcodec.CODEC_FLAG2_CHUNKS);
avcodec.avcodec_open2(video_c, codec, null))
picture = avcodec.avcodec_alloc_frame()
pkt.data(video_data);
pkt.size(data.length);
int len = avcodec.avcodec_decode_video2(video_c, picture, got_frame, pkt);
if ((len >= 0) && ( got_frame[0] != 0)) {
....
process the decoded frame into **IPLImage of Javacv** and render it with **Imageview** of Android
}
}
从服务器收到的数据如下
少数帧具有以下模式
17 01 00 00 00 00 00 00 02 09 10 00 00 00 0F 06 00 01 C0 01 07 09 08 04 9A 00 00 03 00 80 00 00 16 EF 65 88 80 07 0 05 6C 98 90 00...
许多帧具有以下模式
27 01 00 00 00 00 00 00 02 09 30 00 00 00 0C 06 01 07 09 08 05 9A 00 00 03 00 80 00 00 0D 77 41 9A 02 04 15 B5 06 20 E3 11 E2 3C 46 ....
对于解码器使用 H.264 编解码器,解码器输出长度 >0 但 got_frames=0 始终。
使用 MPEG1 编解码器,解码器输出长度 >0 且 got_frames>0 但输出图像为绿色或失真。
但是,按照 javacv 的 FFmpegFrameGrabber 代码,我可以使用与上述类似的代码解码本地文件(H.264 编码)。
我想知道我缺少哪些细节,以及与标头相关的数据操作或设置适合解码器的编解码器。
任何建议,感谢您的帮助。
提前致谢。
【问题讨论】:
标签: android ffmpeg red5 javacv live-streaming