2010-11-12 115 views
1

我想使用SharpFFMpegFFmpeg的Windows的C#H264

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

什么本杰明想要说的是,你应该尝试的线条

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

打开SharpFFmpeg源和内AVFormat.cs变成

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

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

当这有助于(av_init_packet在异常消息中消失)时,尝试在每个PInvoke方法上添加CallingConvention.Cdecl

+0

呀已经尝试了一些东西,仍然需要做让它流H264似乎等问题...似乎需要更多的修改SharpFFMPeg。 – TheWommies 2010-11-22 01:13:42

3

听起来就像调用试图用错误的调用约定。需要使用__stdcall或__cdecl应该可以工作。

+0

对不起,我不知道你是什么意思? – TheWommies 2010-11-15 21:32:38

0

根据你的操作系统是64位或32位,你需要确保堆栈对齐到足够大的字节数量,使这项工作。

在我的64位Windows 7的电脑,我只能用FFmpeg的库在64位应用程序,从而确保堆栈撑对齐,以16字节为单位,解决许多这些问题。

我不知道如何解决您的特定问题,但我希望这有助于。