- .NET 3.5
- C#/ WPF
- 的Visual Studio 2010 SP1
- Directshow.Net
- DES(DirectShow的編輯服務)
- P/Invoke
=======
應用概要:
我已經開發了C#一個簡單的視頻編輯/ WPF與經過DirectShow.NET連接到DES和基於大量的自定義WPF時間軸控制DirectShow.NET附帶的DESCombine.cs示例。該應用程序的用戶可以將視頻和圖像添加到時間線,並選擇一首歌曲在後臺播放。
最終目標是將時間線內容(ds圖形內容)呈現爲基於wmv的文件。這主要通過選擇一個prx配置文件,並開始正確構建的圖來完成。
在添加到時間軸/ directshow圖形之前,所有輸入視頻都轉換爲wmv8,因此不需要特殊的第三方directshow濾鏡來連接引腳。
=======
的問題和問題:
有時但並非總是如此,Directshow的佔領期間呈現最終的視頻文件。沒有例外,CPU使用率簡單地降到0,沒有任何反應。由於我通過DirectShow.NET訪問DirectShow並且我不知道幕後發生了什麼,所以很難調試。雖然我確實啓用了非託管調試,但沒有拋出異常,我不知道什麼是錯誤的。
我可以告訴這個問題發生得更頻繁,因爲圖形越來越多的針腳。例如,渲染包含50個視頻和圖像的時間線比渲染少數圖像和視頻更可能導致這種情況。
我能做些什麼來確切地發現什麼是錯誤的,以及爲什麼發生這種情況時沒有拋出異常或錯誤指示?
=======
我曾嘗試:
設置圖表中的日誌文件(與IGraphBuilder :: SetLogFile)。
該日誌確實表明某些引腳無法連接,但是在渲染完成並失敗時,日誌看起來完全相同。
IntPtr hfile = CreateFile("c:\\dslog2.txt", GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
m_pGraph.SetLogFile(hfile);
使用IMediaControl來暫停和運行圖形,當我檢測到它已經被分割時。這沒有做任何事情。
m_pControl.Pause();
Thread.Sleep(2000);
m_pControl.Run();
=======
預先感謝您,任何幫助是極大的讚賞。
難以分辨,但您需要找到方法來檢查圖形事件,以查看在流式傳輸過程中是否報告了任何錯誤。另一項檢查是在凍結時查看線程棧來獲取鎖的細節。最終,它最有可能是兩個EC_ERRORABORT事件之一,或者某些內存分配器上的緩衝區溢出。 –