1

我从 IP 摄像机获取 H.264 图像,并希望保存编码图像(不解码)。为此,我正在使用ffmpeg (libavformat/output-example.c)中的 output-example.c。为了保存原始 H.264 图像,我执行以下操作:

AVPacket pkt;
av_init_packet(&pkt);
if (c->coded_frame->pts != AV_NOPTS_VALUE)
        pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
if(c->coded_frame->key_frame)
        pkt.flags |= PKT_FLAG_KEY;
pkt.stream_index= st->index;
pkt.data= (uint8_t *)ulAddr;//video_outbuf;
pkt.size= out_size;
save_image(pkt.data, out_size);

其中ulAddr是指向图像的地址指针,out_size 是图像大小。我不想将图像保存到媒体视频文件,而是保存单个图像。save_image 函数仅使用基本的fopenfwrite函数来保存图像。如果我解码帧然后保存,一切正常。但我在保存编码帧时遇到问题。编码的帧以非常小的尺寸保存,然后无法解码。有什么问题吗?我将非常感谢这方面的任何帮助。

4

1 回答 1

2

H.264 不是“图片”编码格式,它是“电影”编码格式。编码器不会单独对每张图片进行编码,它会一起查看一组图片,并将任何给定图片的编码传播到组中的图片中。

如果您在大多数情况下查看单个编码图片,您会发现它具有对其他图片的引用,这些图片可能在编码流中之前在它之后。在能够解码您的目标图片之前,可能需要为解码器提供几张其他图片。

您可能需要选择一种不同的编码格式,让您可以做您想做的事,而 H.264 则做不到。独立于其他图片对每张图片进行编码的格式称为“帧内编码”。

于 2011-10-07T16:14:57.280 回答