C# ile Directx 9 kullanarak video oynatmak ne kadar zor olabilir ki?
July 27, 2008 at 3:49 PM
—
oozturk
DirectX 9 sdk'yı www.microsoft.com sitesinden çektim ve bilgisayarıma kurdum. Yapmam gerektiği gibi c# projemin referanslarına Microsoft.DirectX.AudioVideoPlayback namespace'ini ekledim. Form1 adındaki form'un üstünde panel1 diye bir panel yarattım. Bir video dosyasını denemek için c:\ klasörüne koydum ve oynatmasını istediğim bu dosyayı gösterdim. Start debugging deyince hata alınca dünyam başıma yıkıldı tabii. İnternette ara dur, msdn.microsoft.com'da hatta forumlarda çözüm ara, yok... Olmuyor... Visual Studio 2008 ve .Net 3.5 ile dünyayı baştan yazarım diye düşünüyorken karşılaştığım sorun beni çileden çıkartmaya yetmişken bir de çözüm bulamamak iyice delirtti beni.
Yazdığım kod şuydu:
using Microsoft.DirectX.AudioVideoPlayback;
private void button1_Click(object sender, EventArgs e)
{
try
{
Video v = new Video("c:\\black0.avi");
v.Owner = panel1;
v.Size = panel1.Size;
//v.Size = v.DefaultSize;
//v.Fullscreen = true;
v.Play();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Bakınca hiç hata görünmüyor halbu ki. Sorunu biraz daha deşince ve önerilen çözümleri beraber deneyince bir çözüm ürettim.
İşletim sistemim 64 bit ama directx kütüphanesinin 32 bit olması yüzünden önce configuration manager'dan bir x86 profili oluşturmam gerekiyormuş. Ama esas konu bu da değil, 'loader lock' hatası alıyordum, release alıp da exe dosyasını çalıştırınca hatasız çalışıyorken debug esnasında hata vermesinin sebebi nedir onu bulmam gerekiyordu. Sorun MDA (Managed Debugging Assistant)'da hata varmış ve microsoft bu hatanın farkında olduğunu ve sorunu gidermek için üzerinde çalışacaklarını duyurmuş. Bu sebeple Debug mensünden Exceptions komutunu çalıştırıp MDA nodundan loader lock seçeneği için thrown işaretini kaldırmam gerekiyormuş. Bunun da sebebi DirectX kütüphanesinin .Net 1.1 runtime versiyonuna sahip olması bu arada.
Sonunda bu şekilde sorunu çözmüş oldum. Visual Studio 2005 veya Visual Studio 2008 ile video ya da audio oynatmak istiyorsanız, sorununuzu bu şekilde çözebilirsiniz.
Not: Oynatacağınız audio ya da video için codeclerin programın çalışacağı bilgisayarda da yüklü olması gerekiyor, DirectX için ise redistributable paketini kuruluma eklemeniz gerekiyor.
Eh ben sorunumu çözdüm, darısı başınıza.
Referanslar:
http://www.thezbuffer.com/articles/304.aspx
http://msdn.microsoft.com/tr-tr/directx/default(en-us).aspx
http://msdn.microsoft.com/en-us/library/bb324497(VS.85).aspx#dx_avp_playing_a_video_file
http://msdn.microsoft.com/en-us/library/ms172219.aspx