为什么 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 个字节。它适用于其他格式。
我正在尝试探测包含 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 个字节。它适用于其他格式。