Hasan Akpürüm
blog-post-1

ASP.NET'te FLV convert işlemi, FFMPEG kurulumu

Son çalıştığım projede kullanıcıların siteye video upload etmeleri söz konusuydu. Bu durumda upload edilen videoların flv dosya türüne de çevrilmesi gerekliydi. Bunun için nette yaptığım bütün araştırmalarda karşıma tek bir convert projesi çıkıyordu : FFMPEG. FFMPEG projesi ses ve video dosyalarının çok geniş dosya türünde birbirine dönüştürülmesine imkan vermektedir. Kaynak kodlarını indirip açtığınızda C ve C++ da hazırlanmış bir dünya dosya ile karşılaşacaksınız. Bunlar şu an işimize yaramıyor. Bize API gibi bir kullanım kılavuzu gerekli. FFMPEG'in kendi sitesinde böyle bir kaynağa ulaşamadım. ASP.NET'te FFMPEG kullanımının anlatıldığı makalelerde ffmpeg.exe ve bir dizi .dll dosyalarının kullanıldığını görüyoruz. Bunları topluca anca o makale kaynaklarında bulabiliyoruz. Ben bu dosyaları bir paket yapıp burada size sunuyorum. İndireceğiniz dosyaları proje ana dizininde bir klasöre kopyalayın. Bir de yüklenecek videolar ve videonun içinden çekilecek olan capture görüntüsü için klasörlerinizi belirleyin. Video dosyası upload edilirken gerekli uzantı ve dosya boyutu kontrollerinizi yaptıktan sonra sıra dosyanın upload edilmesi işlemine geliyor. Burası zaten bildiğiniz dosya upload işlemidir. Video upload ve bunun convert edilmesi konusu ile uğraşanların fileupload kontrolünü kullandığını varsayıyorum. Video dosyasını video/temp gibi bir klasöre yükleyelim. Ardından ilk işimiz bu video dosyası içinden bir capture görüntü almak olsun.

//DOSYA IMAGE ÇIKARILIR
Process create_thumbnail;
//video değişkeninde upload edilen videonun dosya yolu tutulur
//resim değişkeninde de video içinden alınacak capture görüntünün kaydedileceği yol belirtilir
string video = Server.MapPath("medya/video/temp/" + upload_edilen_dosya_adi + video_uzanti);
string resim = Server.MapPath("medya/video/img/" + upload_edilen_dosya_adi + ".jpg");
//process işlemi başlatılır
create_thumbnail = new Process();
//aşağıdaki arguman ifade de hangi ölçülerde görüntü alınacağı belirtilir
create_thumbnail.StartInfo.Arguments = " -i \"" + video + "\" -s 402*338 -vframes 1 -f image2 -vcodec mjpeg \"" + resim + "\"";
//ffmeg.exe dosyası çalıştırılır ve işlem gerçekleşir.
create_thumbnail.StartInfo.FileName = HttpContext.Current.Server.MapPath("~\\ffmpeg\\ffmpeg.exe");
create_thumbnail.Start();
//SIRADA CONVERT İŞLEMİ VAR
Process convert_file; // creating process
string flv = Server.MapPath("medya/video/" + upload_edilen_dosya_adi + ".flv");
convert_file = new Process();
//convert edilecek video dosyası daha önceden upload edilmişti.
//dosyanın hangi boyutlarda olacağı burada belirtilir
convert_file.StartInfo.Arguments = " -i \"" + video + "\" -ar 11025 -f flv -s 402x338 \"" + flv + "\""; // arguments !
//ffmpeg dosyası çalıştırılı ve convert işlemi başlar
convert_file.StartInfo.FileName = HttpContext.Current.Server.MapPath("~\\ffmpeg\\ffmpeg.exe");
convert_file.Start(); // start !
//TÜM İŞLEMLER BİTTİ
Yukarıdaki kodları satır satır incelerseniz ve açıklamaları okursanız convert işlemi için nelerin yapıldığını çok rahatlıkla anlarsınız. Burada şunu belirtmek gerekir : Projeyi sunucuya gönderdiğinizde ffmpeg.exe ve dll dosyalarının bulunduğu klasör ile video dosyasının upload edileceği ve imajın kaydedileceği klasörlere yazma izni vermelisiniz.
Son olarak da web.config dosyasında ayarlamalarımızı yapmamız gerekecek. MaxRequestLength ifadesi upload edilecek dosyanın boyutunun maksimum sınırını belirler. Bununla ilgili yaptığım denemede 28MB'dan büyük dosyaları upload edemediğimi de eklemek isterim.


Konuyla ilgili karşılaşacağınız sorunları mesaj olarak yazabilirsiniz. İyi çalışmalar dilerim

Yorum Yaz