首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFMPeg Windows C# H264

FFMPeg Windows C# H264
EN

Stack Overflow用户
提问于 2010-11-12 08:25:56
回答 3查看 4.9K关注 0票数 1

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

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-21 20:59:59

本杰明想说的是,您应该尝试打开SharpFFmpeg源代码,并在AVFormat.cs代码行中进行更改

代码语言:javascript
复制
[DllImport("avformat.dll"), SuppressUnmanagedCodeSecurity]
public static extern void av_init_packet(IntPtr pAVPacket);

转到

代码语言:javascript
复制
[DllImport("avformat.dll", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern void av_init_packet(IntPtr pAVPacket);

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

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

票数 3
EN

Stack Overflow用户

发布于 2010-11-16 03:43:15

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

票数 3
EN

Stack Overflow用户

发布于 2011-09-22 05:57:54

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

在我的64位Windows7电脑上,我只能在64位应用程序中使用FFMpeg库,这确保了堆栈保持16字节的增量,解决了许多这样的问题。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4160589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档