gpt4 book ai didi

c - H264解码使用ffmpeg

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:54 26 4
gpt4 key购买 nike

我正在尝试使用 ffmpeg 库解码视频流,我基本上就是这样做的:

void video_decode(const char *filename)
{
AVCodec *codec;
AVCodecContext *c= NULL;
int frame_count=0;
FILE *f;
AVFrame *frame;
uint8_t inbuf[INBUF_SIZE + AV_INPUT_BUFFER_PADDING_SIZE];
AVPacket avpkt;
av_init_packet(&avpkt);
memset(inbuf + INBUF_SIZE, 0, AV_INPUT_BUFFER_PADDING_SIZE);
printf("Decoding video file...\n");
/* find the h264 video decoder */
codec = avcodec_find_decoder(AV_CODEC_ID_H264);
c = avcodec_alloc_context3(codec);
c->bit_rate = 400000;
c->width = 1920;
c->height = 1080;

if (avcodec_open2(c, codec, NULL) < 0) {
fprintf(stderr, "Could not open codec\n");
exit(1);
}
frame = av_frame_alloc();
for (;;) {
avpkt.size = fread(inbuf, 1, INBUF_SIZE, f);
if (avpkt.size == 0)
break;
avpkt.data = inbuf;
while(avpkt.size > 0){

int len, got_frame;
len = avcodec_decode_video2(c, frame, &got_frame, &avpkt);
if (len < 0) {
fprintf(stderr, "Errr while decding frame %d\n", frame_count);
exit (1);
}
if (got_frame) {
//Print out frame information..
}
if (avpkt.data) {
avpkt.size -= len;
avpkt.data += len;
}
}
}
}

但我得到了以下输出:

Decoding video file...
[h264 @ 0x303c040] decode_slice_header error
[h264 @ 0x303c040] decode_slice_header error
[h264 @ 0x303c040] decode_slice_header error
[h264 @ 0x303c040] no frame!
Errr while decding frame 0

显然编解码器的启动是不完整的。你有h264 api的经验吗?任何帮助将不胜感激。

最佳答案

您不能只将随机数 (INBUF_SIZE) 字节放入 AV 数据包中。应该是full AU或者NALU,如果不是annex B,必须先设置extra data字段。对于您的情况,我建议使用 libavformat 打开文件并读取 AVPackets。

关于c - H264解码使用ffmpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35910824/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com