为什么 FFMpeg av_probe_input_format 函数会发生访问冲突?

Why FFMpeg av_probe_input_format function is doing an access violation?

我正在尝试探测包含 H264 视频流的 DHAV 缓冲区。 我使用下面的代码来做到这一点:

AVProbeData probeData;
probeData.buf_size = len < 4096 ? len : 4096;
probeData.filename = "stream";
probeData.buf = (unsigned char*)malloc(probeData.buf_size);
memcpy(probeData.buf, lpData, probeData.buf_size);

AVInputFormat* pAVInputFormat = av_probe_input_format(&probeData, 1);

我的问题是在调用 av_probe_input_format 期间出现访问冲突异常。 如果我将第二个参数更改为 0,我没有错误,但找不到格式。任何的想法? 我使用的是通过vcpkg编译的FFMpeg版本。

几乎正确,首先将结构初始化为0,因为它还有其他字段。

缓冲区末尾必须有额外的 AVPROBE_PADDING_SIZE 个零填充字节。

关于av_probe_input_format,如果第二个参数是0,它只会检查带有标志AVFMT_NOFILE的分路器,所以这是正常的。

AVProbeData probeData = {0};
probeData.buf_size = len < 4096 ? len : 4096;
probeData.filename = "stream";
probeData.buf = av_mallocz(probeData.buf_size + AVPROBE_PADDING_SIZE);
memcpy(probeData.buf, lpData, probeData.buf_size);

我没有要测试的 DAV,也许你可以在某处上传前 4096 个字节。它适用于其他格式。