2010-11-12 113 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字節爲單位,解決許多這些問題。

我不知道如何解決您的特定問題,但我希望這有助於。