FFMPeg Windows C#H264

时间:2010-11-12 00:25:56

标签: c# ffmpeg

我正在尝试使用SharpFFMpeg

http://sourceforge.net/projects/sharpffmpeg/

我在网上某处发现了avcodec-52.dll和avformat-52.dll ...

当我使用SharpFFMpeg并进行像av_init_packet

这样的调用时

我得到像这样的PInvoke错误

检测到PInvokeStackImbalance 消息:对PInvoke函数'WpfApplicationFFMpegTest!FFmpegSharp.Interop.FFmpeg :: av_init_packet'的调用使堆栈失衡。这很可能是因为托管PInvoke签名与非托管目标签名不匹配。检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配。

简而言之,我正在尝试解码H264并显示来自摄像头的输入流......

只是想知道是否有人能够在C#中成功地做到这一点?

由于

3 个答案:

答案 0 :(得分:3)

听起来像调用试图使用错误的调用约定。需要使用__stdcall或__cdecl才能正常工作。

答案 1 :(得分:3)

本杰明想要说的是你应该尝试打开SharpFFmpeg来源并在AVFormat.cs内线改变

[DllImport("avformat.dll"), SuppressUnmanagedCodeSecurity]
public static extern void av_init_packet(IntPtr pAVPacket);

[DllImport("avformat.dll", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern void av_init_packet(IntPtr pAVPacket);

并重新编译SharpFFmpeg项目。我没有测试,因为我没有DLL。

如果这有帮助(av_init_packet在异常消息中消失),请尝试在每个PInvoke方法上添加CallingConvention.Cdecl

答案 2 :(得分:0)

根据您的操作系统是64位还是32位,您需要确保堆栈与足够大的字节数对齐以使其工作。

在我的64位Windows 7计算机上,我只能在64位应用程序中使用FFMpeg库,这可以确保堆栈保持对齐到16字节的增量,从而解决了许多问题。

我不确定如何解决您的特定问题,但我希望这会有所帮助。