我是 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 header ) ?更新:
好的,我仍在努力寻找解决方案。我现在正在做的是以下
** 此 RTP 码流中的 H264 码流由 FU-A 编码
avcodec_decode_video2()
玩吧但它只返回
-1
......我也应该删除 FU 指示器和标题吗?
任何建议将不胜感激
最佳答案
Actually, what I'm wondering is if I can decode H264 packets (without RTP header) by avcodec_decode_video2().
如果您使用除单个 NAL 单元模式之外的打包模式,则在将 NAL 单元传递给解码器之前,您可能需要预处理 RTP 有效负载(重新组装分段的 NALU,拆分聚合的 NALU)。流中允许的 NAL 单元类型(STAP、MTAP、FU)取决于打包模式。阅读 RFC 6184有关打包模式的更多信息。
其次,虽然我对 FFMPEG 不太熟悉,但它可能更像是一般的 H.264 解码问题:您必须始终使用 H.264 序列 (SPS) 和图片参数集 (PPS) 初始化解码器,然后才能使用能够解码其他帧。你这样做了吗?
关于streaming - 使用 FFmpeg,如何解码 H264 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9308976/