Menü

  • Ana Sayfa
  • Kimim Ben ?
  • Bağlan Bana ;)

Yazılımcı ne yazar ?

  • C#.Net
  • Asp.Net
  • Ado.Net
  • Sql Server
  • XML
  • Javascript
  • Web Service
  • Portable Hayat
  • Diğer

Başka Şeyler

  • Günün İçinden
  • Yazılarım
  • Kitaplık
  • Beyaz Perdem

Micro Blog

ne geçmiş tükendi ne yarınlar ... hayat yeniler bizleri. geçsede yolumuz bozkırlardan, denizlere çıkar sokaklar ...

Soru Sor ;)

Hakkımda öğrenmek ve sormak istediklerinizi buradaki adresten dilediğiniz gibi sorabilirsiniz. Sorularınızı bekliyorum (;
 

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

Share


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.

<httpRuntimeexecutionTimeout="110"
                                   maxRequestLength="32768"
                                   requestLengthDiskThreshold="80"
                                   useFullyQualifiedRedirectUrl="false"
                                   minFreeThreads="8"
                                   minLocalRequestFreeThreads="4"
                                   appRequestQueueLimit="5000"
                                   enableKernelOutputCache="true"
                                   enableVersionHeader="true"
                                   requireRootedSaveAsPath="true"
                                   enable="true"shutdownTimeout="90"
                                   delayNotificationTimeout="5"
                                   waitChangeNotification="0"
                                   maxWaitChangeNotification="0"
                                   enableHeaderChecking="true"
                                   sendCacheControlHeader="true"
                                   apartmentThreading="false"/>

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


3 Eylül 2009 Perşembe 0:26

Mesajınızı yazabilirsiniz


Rumuz :  
 
Email :   
  
Mesaj :  
Bu konuya abone olmak ister misiniz ?



Mesajlar


resooul
8 Eylül 2009 Salı sabah 10:18
Çok güzel bir çalışma olmuş, ellerine sağlık.


ramazan
8 Aralık 2009 Salı akşam 19:53
upload_edilen_dosya_adi ni nasil alabilirim. yani işlemi yapıyor ama örneğin deneme.avi dosyasını çevirdiğim zaman deneme.avi.flv yapıyor


Emre KIYAK
9 Aralık 2009 Çarşamba öğleden sonra 12:7
Merhaba ramazan, ASP.NET'te dosya upload konusunu hızlıca bir araştırmanı tavsiye ediyorum öncelikle. Upload edilen dosyanın adını FileUpload1.Filename şeklinde alabilirsin. Upload edilen dosyanın uzantısını da System.IO namespaceini dahil ettikten sonra (using System.IO) Path.GetExtension(FileUpload1.FileName.ToLower()); şeklinde alabilirsin. Buna göre video convert işleminde de dosya adını ve uzantısını yönetebilirsin. Yani önce upload edilen dosya ile ilgili bilgileri değişkenlerde tut. O kısmı makaleye dahil etmedim. Dosya upload konusuna önce bir göz at. Sonra tekrar bu konuya dönmeni tavsiye ederim.


zaliym
14 Aralık 2009 Pazartesi sabah 9:38
Hocam daha yüksek bi dosya upload etmek için nasıl bir yol izleyebiliriz. İyi çalışmalar kolay gelsin.


Emre KIYAK
14 Aralık 2009 Pazartesi sabah 9:46
Makalenin sonunda verdiğim ayarlamalardan yapacaksınız. Web.Configden. maxRequestLength="32768" mesela bu 32. MB'lık bi dosyaya işarettir ama ben başarılı olamadım 27MB'a kadar upload ettim. Denemek gerekiyor.