我目前正在寻找从 .NET 访问 libavutil、libavformat 和 libavcodec(FFMpeg 的所有部分)。
目前,我从每天晚上为 Windows 32 位执行的共享 FFMpeg 包的自动构建中获取库。
我也在使用ffmpeg-sharp 项目中的代码。在那个项目中,我删除了一些未编译的类(它们是包装类而不是 P/Invoke 声明)。
代码编译得很好,但我遇到了一些问题。
首先,av*.dll 的构建似乎使用了cdecl 调用约定PInvokeStackImbalanceException
,因为我在尝试调用时收到了一些av_open_input_file
。这很容易改变以使其正常工作。该AVFormatContext
结构已填充。
之后,我想调用av_find_stream_info
以获取有关文件中流的信息。但是,当使用AVFormatContext
从调用中检索到的 to调用它时av_open_input_file
,AccessViolationException
会抛出一个表明我正在尝试从受保护的内存中读取或写入的信息。
有没有人使用 P/Invoke 通过 P/Invoke 访问 libavutil、libavformat 和 libavcodec dll 库并让它工作?
我应该提到,使用 FFMpeg 的命令行版本虽然是一种解决方案,但在这种情况下并不是一个可行的解决方案,需要通过库进行访问。这样做的原因是我不得不过多地敲打磁盘来做我需要做的事情(我必须对一些非常高清的视频进行逐帧分析)并且我想避免磁盘越多越好。