Flash ile streaming yayın yapan bir FLV player yapmak isteyince…

Çalıştığım yerde elimizdeki bazı videoları güvenli bir ÅŸekilde internet üzerinden yayınlamak istedik. Darwin Media Server, VLC, Real Media Server, vb.. alternatifleri test edip denedikten sonra en uygun formatın FLV olduÄŸuna kanaat getirdim. Ancak elimizde Flash Media Server olmadığı için daha deÄŸiÅŸik yollardan streaming yapmamız gerekti. Neyse konu bu deÄŸil:)

Konu, streaming olarak gelen FLV yi çalabilecek bir FLV player hazırlamak isteyince baÅŸa gelenler. Flash benim hep uzak kalmak istediÄŸim, hep de uzak kaldığım bir konu. Belki Director ve Lingo ile uÄŸraÅŸmak zevkli olabilir ancak ne bileyim Flash deyince actionscript’in çok popüler olmadığı dönemde flashla hazırlanan tasarımlar filan geliyor, bir tasarım aleti olarak gördüÄŸüm için de uzakta kalmakta fayda görüyorum. Malum serde tasarımcı yeteneÄŸi yok.

Flash’ı safi meraktan bugüne kadar birkaç kez kurcalamışlığım, SWF decompiler ile ÅŸöyle birkaç SWF yi açıp, "bu ne yahu" demiÅŸliÄŸim vardır. Actionscript diye birÅŸeyden bahsediyorlar son yıllarda, onu da genel kültür nevinden arkadaÅŸ muhabbetlerinde konuÅŸmuÅŸluÄŸum vardır sadece.

Dolayısıyla, bir FLV playerı lazım olunca, ilk önce open source bir fla arayışına girdim. BirÅŸeyler buldum, biri Flv dosyalarını streaming olarak okuyup çalabilen bir player yapmış. E güzel iÅŸte dedim ama tabii asıl dert burda baÅŸlamadı.

BulduÄŸum player, actionscript ile verilen url, video dosyası vs. ile bir php dosyasından FLV dosyasını okuyup çalıyor. Bana ise güvenlik nedeniyle (ah ÅŸu byte-code a çevrilen diller, yapılar..) swf decompile edilince video adresi ortaya çıkmasın diye playera çalacağı adresi HTML tarafından göndermeyi istedim. Zaten baÅŸka türlü her video için bir player derlemem gerekecekti, güvenliÄŸi boÅŸversem de.

Fla dosyasındaki actionscript kodlarına bakınca büyük bir ferahlama hissetmiÅŸtim, zira aynen javascript. Javascripti de bilir ve severim. Biraz bakınca anlaşılır dedim herhalde. Murat beni uyardı: "Evet actionscript’in javascripte benzeyen tarafı kolay görünüyor ama asıl mesele Flash tarafını anlamak zaten" diye.

Hemen javascript ile swf ye nasıl parametre gönderebileceÄŸime baktım, bir iki örnek filan derken kendi hazırladığım "parametre gönderme" örneÄŸi de çalıştı. Gerisinin kolay olacağını düÅŸünmüÅŸtüm, nasılsa yapılması gereken sadece playerda direkt çalışarak videoyu oynatan kodları bir fonksiyon içine alarak, javascript ile actionscriptte tanımladığım fonksiyonu çağırınca çalışmasını saÄŸlamaktı geriye kalan. Dolayısıyla, prosedürel olarak yazılmış kodu, fonksiyon parantezleri içine alıp, javascript ile tetiklenebilecek hale getirince bitecekti olay.

Ama olmadı tabii, varolan actionscript’i defalarca baÅŸtan yazar gibi yazdım, bu arada yavaÅŸtan actionscript de öÄŸrendim fakat bir türlü fonksiyon içine alınınca playerın doÄŸru çalışmasını saÄŸlayamadım. Ya video oynuyor, ama ilerleme çubuÄŸu hareket etmiyor, ya video’da istenilen ana gidilemiyor. Bir sürü problem çıktı. Düzeltmek için bayağı kastıktan sonra, youtube’u incelemeye karar verdim.

Youtube’da dikkatimi çeken hem playerin object/embed kodları arasındaki adresine videonun ID si sayılabilecek bir parametrenin querystring ÅŸeklinde gönderildiÄŸi oldu. Sonra da flashvars parametreleri dikkatimi çekti. Döküman döküman, site site dolaÅŸtıktan sonra flashvars ismindeki bir parametre ile flasha parametre gönderilebildiÄŸini öÄŸrendim.

Adobe’un kendi dökümanlarındaki örneklerde anlatıldığı gibi yaptım herÅŸeyi ama çalışmadı. İnternetten bulabilen örnekleri denedim, onlar da olmadı. Çok zor da bir mesele deÄŸil, sadece iki satır HTML kodu ekleyip, actionscript ile bu HTML kodundaki parametreleri direkt çağırıyorsunuz. Fakat onlarca site ve örnek denememe raÄŸmen çalışmadı.

Querystring ile göndereyim dedim, o da olmadı. Ve Flash & Actionscript ikilisi için ÅŸu sonuçları çıkardım:

1 . Actionscript ile birÅŸey yapmaya çalışıyorsanız ve google de nasıl yapıldığı konusunda bir örnek ararsanız doÄŸru düzgün bir örnek bulmanız olası deÄŸildir.

2. Flash ve actionscript ile webde yayınlamak üzere birÅŸey deneyecekseniz, kesinlikle hazırladığınız dosyaları gerçek bir domaini olan web sitenizin altına koyun test etmek için. Ya da en azından IIS kurup, localhost’tan çağırın dosyaları çünkü, flash bu konularda karışık bir güvenlik anlayışına sahip, localden çaÄŸrılan html lerde birçok ÅŸey çalışmayabiliyor.

3.  Bu kadar bug’lı bir dil ile uÄŸraÅŸmamıştım (actionscript 2.0 bu arada), karşılaÅŸtığım hangi problem ile ilgili araÅŸtırma yapsam, "iÅŸte efenim, o konuda ÅŸöyle bir takla atmak gerekiyor yoksa flash davranması gerektiÄŸi gibi davranmıyor" ya da "bu konuda birçok bug var, ÅŸöyle yapınca bir rivayete göre oluyormuÅŸ" gibi ÅŸeylerle karşılaÅŸtım. Flash’ın resmi dökümanlarının sayfalarındaki yorumları bir okuyun, verilen örnekleri yapıp çalıştıramayan birçok kiÅŸi var. En sonunda da genel de yukarıdaki gibi ÅŸeyler söylenmiÅŸ.

4. Dökümantasyon konusunda çok zayıf Actionscript. Resmi dökümanları var ama, internette ÅŸöyle derli toplu actionscript 2.0 anlatan bir site bulamadım.

5. Variable scope konusunda çok kıl sorunlar çıkabiliyor. Bu konu da zayıf ve karışık.

Ve sonuç, flashvars kullanamadım hala çalışmıyor. Querystring kullanamadım hala çalıştıramadım. Javascriptle playerın tetiklenmesi hadisesini de halledemedim, o da çalışmıyor. Ama onun yerine prosedürel koda çok fazla dokunmadan video parametrelerini global hale getirip, onları HTML sayfanın onload’ında set eden bir javascript yazıp durumu hallettim.

Actionscript 3.0 böyle deÄŸildir umarım. O object oriented olmuÅŸ gördüÄŸüm kadarıyla. Çok güzel ama ne bileyim çok içime sinmiyor actionscript artık. Bu kadar uÄŸraÅŸmak yeterli geldi bana. Gene lazım olursa bakarız, o kadar..

Actionscript ve Flash ile uÄŸraÅŸanlara kolay gelsin..

6 Yorum »

  1. Murat Çorlu dedi ki: ,

    Tarih : September 27, 2007 @ 12:39 am

    Seninle paralel zamanlarda ben de Actionscript 3.0 ile hem SWF hem de FLV oynatan, dosya patametresini haricen alabilecek bir uygulama yazmaya kastım. Actionscript 3.0′da hedeflenen nesne yönelimli mantık hoÅŸuma gitmiÅŸ olsa da, hal-i hazırda yüzlerce class dosyasının hepsinin tek tek incelenmek zorunda olması, dokümantasyonun zayıflığı ve senin de hatırlattığın gibi hala “Flash’ın yapısını çözememiÅŸ olmam” sebepleriyle deveye hendek atlatmama raÄŸmen meseleyi nihayete erdiremedim. Aslında FLV oynatmak çok sıkıntı olmadı ancak SWF oynatmak tam bir iÅŸkenceydi. Zaten son geldiÄŸim nokta ÅŸu olmuÅŸtu: Actionscript 3.0 ile hazırlanmış bir SWF’ye Actionscript 2.0 veya 1.0 ile hazırlanmış bir SWF’yi import edersen bu dosyayı AVM1Movie diye bir formatta alıyor ve bu formatın neredeyse hiçbir metod ve özelliÄŸi yok. Import ettiÄŸim bu swf’leri Play/Pause bile edemedim, düşün artık.

    Ben de ikinci bir ihtiyaca kadar Actionscript’i rafa kaldırdım senin gibi. Hayırlısı olsun bakalım…

  2. ismail ayahan dedi ki: ,

    Tarih : October 10, 2007 @ 5:13 pm

    mp3 nasıl flv yapcaz bea.. onu de :)

  3. x3uqm4 dedi ki: ,

    Tarih : November 9, 2007 @ 5:26 pm

    bende youtubeyi senin gibi incelemiştim başardım dikkatli izle bak yaparsın veya bir programı kırabilrsen kır yani flv player kodunu aL yap (; (:

  4. Songul Barlas dedi ki: ,

    Tarih : March 27, 2008 @ 2:52 pm

    ya anlatım tarzınız cok guzel olmuş bende flash tan mp3 yapmak istıyorum ama kodları yerlerştirnce sureklı hata verıyor bunu için ne yapmam gereklı resımlı olarak anlatırmısınız lütfen şimdeden teşekkürler

  5. İlker İLGEN dedi ki: ,

    Tarih : April 27, 2008 @ 9:41 pm

    Uğraştığın olayı şuan itibari ile halletmiş bulunmaktayız. Ayrıca sadece KAYITLI dosyalarda değil LIVE stream de.
    Linux makina kameradan ve ses kartından verileri alıp flv ye cevirip stream yapıyoruz.
    Ayrıca kayıtlı dosyaları dün itibari ile flash server olamadan hatta 1 adım öne geçip herhangi bir flash player yada vlc de oynatılamayacak şekilde yaptık.

    Nasılmı ?
    Şimdilik çözüm GPL değil. Üzerinde çalıştığım proje için gerçekleştirdim.Şimdi 3. aşamadayız onuda yapıp bitirdikten sonra yayınlayacağım.Yalnız siz ticari olarak kullanacaksanız bilgi vermenizi rica ederim.Sorununuza çözüm olaibliriz
    Çözüm için kaynak yetersiz oldu değdiğiniz gibi.Heleki live stream de hiç birşey yok.
    Saygılaırmla
    İlker İLGEN

    Linux herÅŸeye yeter.

  6. ugur dedi ki: ,

    Tarih : April 30, 2008 @ 8:20 am

    İlginiz ve yorumunuz için teşekkür ederim İlker Bey. Bu yazıyı yazdığım dönemde işimle alakalı olarak (ticari olarak kullanılacak) gerekmekteydi. Daha sonra üzerinde çalışarak tasarım açısından olmasa da çalışma mantığı olarak istediğim düzeyde birşey elde ettim. Dediğiniz gibi Linux herşeye yetiyor:) Ancak ben de hazırladığım yapıyı çalıştığım firma için geliştirdiğim için maalesef şimdilik kodları açamıyorum.

    Projenizde başarılar dilerim, ellerinize sağlık.

Yorum RSS · Takip URI

Yorumunuzu Ekleyin

Ad - Soyad: (Gerekli)

E-posta: (Gerekli)

Web siteniz:

Yorumunuz: