gpt4 book ai didi

ffmpeg - H264 : decode series of nal units with ffmpeg

转载 作者:行者123 更新时间:2023-12-01 11:59:12 29 4
gpt4 key购买 nike

我尝试使用 ffmpeg (libavcodec) 解码一系列最终单元,但出现“无帧”错误。我根据 How does one encode a series of images into H264 using the x264 C API? 的指南生成了最终单元。 .我尝试了以下解码策略:

avcodec_init();  
avcodec_register_all();
AVCodec* pCodec;
pCodec=lpavcodec_find_decoder(CODEC_ID_H264);
AVCodecContext* pCodecContext;
pCodecContext=lpavcodec_alloc_context();
avcodec_open(pCodecContext,pCodec);
AVFrame *pFrame;
pFrame=avcodec_alloc_frame();
//for every nal unit:
int frameFinished=0;
//nalData2 is nalData without the first 4 bytes
avcodec_decode_video(pCodecContext,pFrame,&frameFinished,(uint8_t*) nalData2,nalLength);

我通过了这段代码的所有单元,但 frameFinished 保持为 0。我猜 pCodecContext 设置一定有问题。有人可以给我一个工作示例吗?

谢谢

最佳答案

查看本教程。它应该能够解码任何视频类型,包括 H.264:

http://dranger.com/ffmpeg/

我不知道到底是什么导致了这个问题,但我怀疑这与您没有使用 libavformat 中的 av_read_frame 来解析一帧数据有关一次。 H.264 能够将一个帧拆分为多个切片,从而拆分为多个 NAL 单元。

我很确定 x264 编码器默认情况下不会执行此操作,并且每帧生成一个 NAL 单元。然而,有一些 NAL 单元需要提供给解码器的其他流信息。我过去曾对此进行过试验,当 av_read_frame 解析出一帧数据时,它有时包含多个 NAL 单元。我会建议密切关注教程,看看它是否有效。

另一件事是我认为你确实需要将 NAL 单元的前 4 个字节传递到 avcodec_decode_video 如果那是你正在谈论的起始代码(0x00000001 ).调查了 av_read_frame 的输出后,开始代码在传递给解码器时仍在数据中。

关于ffmpeg - H264 : decode series of nal units with ffmpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3286453/

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