Mungkin anda pernah mengalami hal ini : ketika anda mendownload film, kemudian seperti biasa anda open file tersebut dengan menggunakan video player kesayangan anda (misal windows media player), kemudian tiba-tiba ada pesan error bahwa formatnya tidak didukung, kemudian anda menanyakan pada teman anda atau pada forum di internet, beberapa orang menyarankan anda menggunakan player lain (misal: MediaPlayerClassic) namun pesan error tetap muncul bahwa file video anda tidak didukung, setelah menanyakan lebih lanjut ternyata yang salah bukanlah player anda melainkan codec atau directshow filter untuk membaca format tersebut tidak terinstall di komputer anda. Setelah anda menginstall codec atau filter tersebut ternyata kedua player (Windows Media Player dan Media Player Classic) dapat menjalankan format video tersebut.
lalu apa itu sebenarnya codec dan apa itu filter, pada umumnya codec itu berbentuk filter, directshow filter lengkapnya, mungkin sekarang anda tambah bingung atau salah mengira bahwa biasanya filter (directshow filter) anda gunakan untuk menambah effect pada video agar gambar terlihat lebih bagus, seperti noise redutction atau settings brightness dan contrast
sebenarnya pernyataan tersebut tidaklah salah, tetapi sebenarnya filter memiliki arti yang lebih umum daripada sekedar memberikan effect pada video, pada bagian ini kita akan membahas apa itu filter agar penjelasan bisa lebih jelas saya akan menggunakan program graphedit dari microsoft, software ini biasanya digunakan oleh developer (pembuat) codec,filter atau aplikasi directshow pada umumnya untuk melakukan testing dan mencoba berbagai macam effect.
anda dapat mendownload aplikasi graphedit dari website microsoft, atau agar mudahnya tanyakan pada google.com dia tau segalanya..
sejarah
Pada awal 1990 dikenalkan windows 3.1 kemudian dikenalkan VFW (Video for Windows), VFW adalah sebuah API (Application Programming Inteface) dengan adanya ini maka windows sudah mendukung video dan API tersebut memberikan interface pada programmer untuk membuat aplikasi multimedia (video) agar bisa jalan di windows 3.1
Lama kelamaan hardware dan aplikasi multimedia semakin berkembang, dan VFW dirasakan memiliki batasan yang sangat besar salah satunya kesulitan untuk mendukung format video MPEG, kemudian untuk mengatasi hal ini microsoft membuat project yang dinamakan dengan "Quartz" yang rencananya akan diperkenalkan saat peluncuran Windows 95. "Quartz" merupakan API yang telah dikembangkan lebih lanjut untuk aplikasi multimedia.
Kemudian lagi-lagi semakin banyak hardware dan software multimedia yang menuntut lebih, dan microsoft (khususnya pengembang quartz) kesulitan untuk membayangkan seluruh scenario yang mungkin bisa terjadi dan harus didukung oleh API tersebut. Akhirnya mereka mendapat sebuah solusi untuk hal ini yaitu menggunakan arsitektur framework yang sederhana, prinsipnya setiap programmer (yang menggunakan API) membuat sebuah block dan block ini dapat saling dihubungkan pada block lain (yang dibuat oleh orang yang berbeda).
Block tersebut dinamakan filter, setiap filter memiliki kemampuan macam-macam (terserah pembuatnya), mulai dari membaca data, memainkan musik sampe mengirim video lewat jaringan. microsoft hanya memberikan syarat-syarat sehingga setiap filter akan bisa dihubungkan dengan filter lain untuk menjalankan fungsinya
Gambar diatas memperlihatkan kumpulan filter (block) yang disebut dengan Filter Graph, setiap filter dapat saling terhubung (graph) pada setiap pin-nya, setiap filter memiliki program atau kemampuan masing-masing. Gambar ini menunjukkan Filter Graph, yaitu filter-filter yang saling dihubungkan untuk playing video (container AVI, video format XviD dan audio format MP3), video dirender pada filter video renderer default (VMR) dan audio dirender pada filter DirectSound
Kemudian project quartz ini berubah nama (dikembangkan lebih lanjut) menjadi project "ClockWork". Kemudian dikembangkan lagi hingga projectnya dinamakan "activemovie". Bersamaan dengan direleasenya DirectX (API untuk Graphic,Multimedia,Games..) project ini (API) digabungkan hingga dinamakan "DirectShow", selain directshow didalam directx terdapat berbagai macam API untuk multimedia seperti: Direct3D (3D Graphics),DirectDraw (2D Graphics) ,DirectSound (Sound),DirectPlay (Network / Streaming), DirectInput (input device) dan lain-lain
Filter Graph
Apabila anda telah membaca bagian sejarah mungkin anda telah memahami apa itu filter dan bagaimana sejarah singkatnya. Filter adalah sebuah modul-modul terpisah yang menjalankan fungsinya masing-masing, filter ini dapat saling terhubung dengan filter lainya yang membentuk Filter Graph untuk membuat sebuah system, berikut adalah gambar filter graph ketika sebuah media player menjalankan file video dengan container AVI, video format XviD dan audio format MP3, dimana video dirender pada surface VMR dan audio dirender oleh directsound.
Microsoft secara garis besar membagi filter dalam 3 jenis yaitu Source Filter, Transform Filter dan Renderer Filter / output filter. Setiap filter memiliki pin, pin ini dibagi dua yaitu input pin dan output pin, melalui pin ini filter saling terhubung. seperti kita lihat source filter tidak memiliki input pin atau dengan kata lain source filter tidak bisa menerima input dari output filter lain, sebaliknya renderer filter hanya bisa menerima input dari output filter lain dan tidak bisa memberikan output pada filter lain, sedangkan transform filter memiliki keduanya.
Pada graph diatas kita lihat filter paling kiri adalah filter "AVI Reader" yang tugasnya membaca file "Episode 30.avi" kemudian filter "AVI Reader" memberikan input pada "AVI Spliter" yang tugasnya untuk memisah antara data video dan data audio sehingga filter "AVI Splitter" memiliki dua output, yang satu (video) diberikan pada filter "XviD decoder" untuk mendecode data video dan satunya lagi diberikan pada filter "MP3 decoder" untuk mendecode data audio. Setelah data diproses, kedua filter memberikan hasilnya pada output filter yaitu "VMR Video renderer" untuk video dan "DirectSound" untuk audio.
Dengan arsitektur seperti ini akan memudahkan para pembuat software, misalnya kita lihat sebuah contoh scenario. anda akan menjalankan sebuah file film dalam container matroska (.MKV) yang berisi video dengan format XviD dan audio dengan format MP3. lalu anda membuka file ini pada zoom player (buatan inmatrix). ketika membuka file ini zoom player akan melihat "tag" dari file tersebut untuk mengetahui data container dan decoder yang dibutuhkan, lalu zoom player akan mencarinya didalam komputer anda dan mengkontruksi sebuah filter graph untuk memainkan file tersebut.
Yang menarik dari scenario diatas adalah ketika filter graph berhasil dikontruksi maka ada kemungkinan setiap filter dibuat oleh produsen yang berbeda, sebagai contoh player yang merekonstruksi graph dibuat oleh inmatrix kemudian "mkv reader" dan "mkv spliter" dibuat oleh matroska, data video didecode oleh XviD yang dibuat oleh komunitas opensource www.xvid.org sedangkan audio didecode oleh filter yang dibuat oleh Franhaufer Institute, kemudian bila soundcard anda adalah soundblaster maka ada kemungkinan sound renderer filter akan dibuat oleh creative labs dan video renderer dibuat oleh microsoft. Kita melihat ada 6 developer yang berbeda saling bekerja sama untuk memainkan file film anda.
Berikut adalah contoh graph yang lebih rumit untuk menjalankan TV-Tuner dikomputer.
Dengan adanya arsitektur filter ini sangat memudahkan developer software untuk membuat aplikasi multimedia sebagai catatan apabila pada contoh graph pertama kita mengganti filter "Video Renderer" dengan video codec misal "x264 Encoder" maka graph tersebut bukannya memainkan file video melainkan meng-encode video, atau bisa saja anda mengganti output filter dengan filter video broadcasting untuk dikirimkan pada jaringan sehingga teman anda bisa ikut menonton.
Bila anda menguasai pemograman directshow mungkin anda bisa membuat filter sendiri, berikut adalah contoh transform filter yang saya buat untuk melakukan "Edge Detection" pada video
Saya menjalankan 2 buah renderer filter tetapi yang dibaca adalah file yang sama (episode 35.avi) bedanya yang satu saya hubungkan dengan filter yang saya buat dan satunya tanpa menggunakan filter, gambar di window kanan bawah adalah hasil transformasi filter (Edge detection). Perlu diperhatikan lagi yaitu pada video decoder, kedua graph membaca file yang sama tetapi menggunakan decoder yang berbeda, yang satu menggunakan DivX dan satunya lagi menggunakan XviD, hal ini menjelaskan bahwa XviD dan DivX sama-sama menggunakan standard yang sama yaitu MPEG-4 jadi decoder DivX dan men-decode format XviD dan begitu pula sebaliknya




Tidak ada komentar:
Posting Komentar