在 ffmpeg

问题描述

关于如何将我的编码器结果复用到 mp4 文件中,我遇到了一些基本问题。我目前的方法是创建一个自定义 AVFormatContext,其中 DataProvider 是编码器:

AVFormatContext *create_format_context(DataProvider *pDataProvider) {
  AVFormatContext *ctx{avformat_alloc_context()};

  size_t   bufSize{8 * 1024 * 1024};
  uint8_t *avBuffer{(uint8_t*)av_malloc(bufSize)};

  ctx->pb = avio_alloc_context(avBuffer,bufSize,pDataProvider,DataProvider::read,nullptr,nullptr);

  ctx->flags |= AVFMT_FLAG_CUSTOM_IO;

  FFMPEG_CALL(avformat_open_input(&ctx,nullptr));
  return ctx;
}

但我在 avformat_open_input 上崩溃并显示以下错误消息:

处理输入时发现无效数据

它第一次尝试从编码器读取,但由于这是在初始化时,编码器还没有任何结果。我想问题是 ffmpeg 试图查询一些头信息,因为刚打开时询问实际数据会感觉很奇怪。
我如何提供该标头信息/我可以在哪里了解有关此标头的外观以及我还需要为 ffmpeg 提供哪些信息?
或者是否有完全不同的方法,因为老实说,如果我可以将每帧编码的数据直接提供给 ffmpeg 而不是通过整个上下文抽象,我会很高兴。

对于上下文,我粘贴了 muxer 类,我猜progress() 函数是最有趣的,这里是 header,source

我也称之为有点神奇的功能

av_register_all();
avcodec_register_all();
avformat_network_init();

在所有关于 ffmpeg 的事情之前。

编码器不是用 ffmpeg 编写的,而是用 cuda/nvidia 视频 sdk 编写的,用于硬件加速。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...