我是一名新手使用FFmpeg,正在努力解码H264数据包,这些数据包可以作为uint8_t数组获取。
经过多次尝试,我认为只需要将此数组放入类似下面的AVPacket中即可。请帮我确认是否正确。
经过多次尝试,我认为只需要将此数组放入类似下面的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()
解码没有RTP头的H264数据包?
更新:
好的,我仍在尝试找到解决方法。我现在正在做以下事情
**这个RTP流中的H264流是由FU-A编码的
接收一个RTP数据包
查看RTP头的第二个字节是否>0,这意味着这是第一个数据包(可能会跟随其他数据包)
查看下一个RTP数据包的第二个字节是否>0,那么它就表示前一个帧是完整的NAL,或者如果这个字节<0,则应将该数据包附加到前一个数据包。
删除所有分组分割指示符(FU)和分组分割头部,使其只有像NAL这样的内容
尝试使用
avcodec_decode_video2()
播放它
但它只返回-1
.....
我是否也应该删除FU指示符和头?
非常感谢任何建议