繁体   English   中英

FFMPeg Windows C#H264

[英]FFMPeg Windows C# H264

我正在尝试使用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#中成功做到这一点?

谢谢

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

本杰明想说的是,您应该尝试打开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

根据您的操作系统是64位还是32位,您需要确保堆栈对齐到足够大的字节数才能完成此工作。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM