jsi*_*sim 5 ffmpeg decode x264
我尝试使用 ffmpeg (libavcodec) 解码一系列 nal 单元,但出现“无帧”错误。我按照如何使用 x264 C API 将一系列图像编码为 H264? 中的指南生成了最终单元。。我尝试了以下解码策略:
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);
Run Code Online (Sandbox Code Playgroud)
我通过了到达此代码的所有单元,但 frameFinished 仍为 0。我猜 pCodecContext 设置一定有问题。有人可以给我发送一个工作示例吗?
谢谢
查看本教程。它应该能够解码任何视频类型,包括 H.264:
我不知道到底是什么导致了这个问题,但我怀疑这与您没有使用 from av_read_framelibavformat 一次解析出一帧数据有关。H.264 能够将帧分割成多个切片,从而分割成多个 NAL 单元。
我非常确定 x264 编码器默认情况下不会执行此操作,而是每帧生成一个 NAL 单元。然而,还有一些带有其他流信息的 NAL 单元需要馈送到解码器。我过去曾对此进行过实验,当av_read_frame解析出一帧数据时,它有时包含多个 NAL 单元。我建议密切关注本教程,看看是否有效。
另一件事是,我认为您确实需要将 NAL 单元的前 4 个字节传递进去,avcodec_decode_video如果这是您正在谈论的起始代码 ( 0x00000001)。研究了 的输出后av_read_frame,当传递到解码器时,起始码仍然在数据中。
| 归档时间: |
|
| 查看次数: |
20492 次 |
| 最近记录: |