【发布时间】:2012-03-07 17:09:45
【问题描述】:
我是 FFmpeg 的新手,正在努力解码可以作为 uint8_t 数组获得的 H264 数据包。
经过多次调查,我认为应该可以将数组放入如下所示的 AVPacket 中
AVPacket *avpkt = (AVPacket *)malloc(sizeof(AVPacket) * 1);
av_init_packet(avpkt);
avpkt->data = ct; // ct is the array
avpkt->length =....
并由avcodec_decode_video2() 解码。
部分代码是这样的:
...
codec = avcodec_find_decoder(CODEC_ID_H264);
gVideoCodecCtx = avcodec_alloc_context();
gFrame = avcodec_alloc_frame();
avcodec_decode_video2(gVideoCodecCtx, gFrame, &frameFinished, packet);
...
我想我正确设置了所有必需的属性,但这个函数只返回-1
我刚刚发现-1 来自
ret = avctx->codec->decode(avctx, picture, got_picture_ptr, avpkt);
在avcodec_decode_video2();
实际上,我想知道的是如何通过avcodec_decode_video2() 解码 H264 数据包(没有 RTP 标头)?
更新:
好的,我仍在努力寻找解决方案。我现在在做的是下面的
**这个RTP码流中的H264码流是FU-A编码的
接收 RTP 数据包
查看 RTP 标头的第二个字节是否 > 0,这意味着它是第一个数据包(可能会被跟随)
查看下一个 RTP 数据包的第二个字节是否也 > 0,则表示前一帧是完整的 NAL,或者如果这是
删除数据包的所有 RTP 标头,使其仅具有类似 FU 指示符 | FU头| NAL
试试
avcodec_decode_video2()
但它只返回-1.....
我也应该删除 FU 指示器和标题吗??
任何建议将不胜感激
【问题讨论】:
标签: streaming ffmpeg decode h.264