Pembuatan Aplikasi Peer-to-peer Multimedia Sharing Berbasis Gstreamer, Python, dan GTK+ Kurniawan Haikal dan Wahyu Suadi, S.Kom, M.M., M.Kom. Abstrak: Multimedia adalah media yang terdiri dari satu atau lebih konten yang berbeda, di antaranya teks, suara, gambar, animasi, dan video. Teknologi streaming memungkinkan konten multimedia yang terdapat di server dapat dinikmati tanpa harus mengunduh kesuluruhan berkas multimedia ke hard disk lokal sebelum diputar dengan pemutar multimedia. Gstreamer adalah framework multimedia yang menyediakan fungsifungsi untuk media-handling, audio dan video playback, recording, editing, termasuk streaming. Streaming multimedia dengan model peer-to-peer memungkinkan setiap komputer yang terhubung ke jaringan dapat bertindak sebagai server sekaligus sebagai klien. Dengan model seperti ini, setiap komputer dapat berkomunikasi secara langsung satu sama lain, tanpa harus melalui server terlebih dahulu. Pada tugas akhir ini, dikembangkan sebuah aplikasi streaming multimedia dengan konsep peer-to-peer dengan memanfaatkan fungsi multimedia playback dan streaming dari Gstreamer.
ada, tercatat beberapa yang menggunakan Gstreamer sebagai basisnya. Untuk multimedia player, antara lain Totem, Rhythmbox, Banshee, Songbird. Di segmen multimedia editor terdapat Pitivi dan Jokosher. Aplikasi yang memanfaatkan fitur streaming Gstreamer salah satunya adalah Flumotion. Dari sekian banyak aplikasi tersebut, hanya sedikit yang memanfaatkan fitur streaming dari Gstreamer. Selain itu, aplikasi-aplikasi multimedia streaming yang banyak beredar kebanyakan menggunakan model server-based terpusat. Artinya filefile multimedia hanya disediakan oleh sebuah server, yang kemudian dapat dimainkan oleh beberapa client. Pada tugas akhir ini, kami mencoba menghadirkan model streaming yang sedikit berbeda, yakni dengan model peerto-peer. Pada model peer-to-peer, setiap komputer bertindak sebagai server sekaligus sebagai client. Dengan model ini, beban berat yang ditanggung oleh server pada model server-based terpusat, dapat diminimalisir. Untuk fungsi streaming, akan digunakan Gstreamer.
Kata Kunci : gstreamer, peer-to-peer, python, gtk, pygst, pygtk
2. METODOLOGI Pada aplikasi yang dibangun, terdapat beberapa istilah penting yang Penulis rasa perlu dijelaskan terlebih dahulu, yaitu "Profile", "Playlist", dan "Shared files". Penjelasan dari istilah-istilah tersebut adalah sebagai berikut: • Profile: berisi informasi mengenai nama komputer yang akan ditampilkan pada pengguna lain, alamat IP (internet protocol) komputer, dan nomor port di mana servis HTTP server dijalankan. • Playlist: berisi daftar komputer yang menjalankan aplikasi yang sama pada jaringan komputer yang sama. Komputer-komputer yang terdapat pada playlist memiliki daftar file multimedia yang dapat dimainkan. • Shared files: berisi daftar berkas multimedia (audio/video) yang dapat dimainkan oleh komputer lain dengan aplikasi yang sama. Pada Use Case Diagram berikut ini digambarkan action apa saja yang dapat dijalankan oleh pengguna dari sudut pandang sebagai client dan server.
1. PENDAHULUAN Perkembangan teknologi saat ini semangkin berkembang begitu pesat, tanpa terkecuali perkembangan Teknologi Informasi. Berbagai teknologi ini kemudian mulai banyak dimanfaatkan di berbagai aspek, diantaranya pemerintahan, pendidikan, fasilitas-fasilitas kemasyarakatan dan sebagainya. Salah satu teknologi dalam bidang Teknologi Informasi yang banyak digunakan adalah teknologi multimedia (audio/video). File multimedia dimanfaatkan di berbagai sektor, mulai dari hiburan sampai pendidikan. Aplikasi pemroses file multimedia yang cukup berkembang saat ini salah satunya adalah Gstreamer Gstreamer adalah sebuah framework multimedia berbasis pipeline yang ditulis dalam bahasa pemrograman C dengan berbasis GObject. Gstreamer memungkinkan seorang programmer untuk membangun berbagai macam media-handling components, termasuk audio playback sederhana, audio dan video playback, recording, streaming dan editing. Desain pipeline menyediakan basis untuk membangun banyak model dari aplikasi multimedia seperti video editor, streaming media broadcaster, dan media player. Tipe file audio yang didukung oleh Gstreamer di antaranya mp3, mp4, wav, wma, b-mtp, ogg, dan spx. Sedangkan untuk file video antara lain avi, mov, mpg, mp4, flv, wmv, ogg, dan webm. Dari sekian banyak aplikasi multimedia yang
1
1. 2. 3. 4.
5. Gambar 1 Use Case Diagram Sistem Walaupun pada diagram di atas antara client dan server terpisah, tetapi pada implementasinya nanti, client dan server dijalankan secara bersamaan pada satu komputer. Client akan menjalankan modul Receiver dan server menjalankan modul Sender. Adapun gambaran arsitektur peer-to-peer multimedia shareing antar komputer yang menjalankan aplikasi yang sama pada sebuah jaringan komputer adalah sebagai berikut.
Receiver melakukan request daftar file yang dishare oleh sender melalui layanan HTTP. Sender mengembalikan daftar file yang di-share berua index dan nama file. Receiver menginisiasi “gstreamer tcp server” pada port tertentu. Receiver melakukan request kepada sender untuk memainkan sebuah file dengan parameter berupa index file, alamat IP receiver, dan nomor port di mana layanan “gstreamer tcp server” dijalankan. Request dilakukan melalui layanan HTTP. Sender akan merespon request dari receiver dengan menjalankan “gstreamer player” dengan memanggil element “gstreamer tcpclientsink” sehingga output proses memainkan file multimedia dikirim ke receiver dengan paramater alamat IP receiver dan port “gstreamer tcp server” receiver.
Graphical User Interface (GUI) aplikasi ini dibangun menggunakan library GTK+ (GIMP Toolkit) dengan binding bahasa pemrograman Python sehingga memungkinkan fungsi-fungsi dari GTK+ yang dikembangkan dengan bahasa pemrograman C dapat dipanggil menggunakan bahasa Python. Binding GTK+ ke bahasa pemrograman Python ini disebut dengan PyGTK. Modul-modul dari PyGTK yang digunakan untuk membangun aplikasi pada tugas akhir ini antara lain: Window, Button, IconView, TreeView, Dialog, serta DrawingArea. GUI dari aplikasi yang dibangun pada tugas akhir ini dapat dibagi ke dalama dua bagian utama, yaitu window utama dan window player.
Gambar 2 Arsitektur peer-to-peer multimedia sharing dengan Gstreamer Gambar 2 merupakan ruang lingkup sistem yang akan dikerjakan dalam Tugas Akhir ini. Pada tiap server akan dijalankan Gstreamer sebagai server sekaligus player untuk multimedia streaming. Selain Gstreamer, ada juga service HTTP untuk melayani request file apa yang akan dimainkan dan untuk menampilkan daftar file yang di-share di komputer tersebut. Model komunikasi antara modul RECEIVER di satu komputer dengan modul SENDER di komputer lainnya digambarkan sebagai berikut. Gambar 4 Window utama yang menampilkan daftar file yang di-share di localhost Window utama pada gambar 4 menggunakan beberapa modul dari PyGTK yakni: 1. Window: top-level window yang menampung sebuah child widget. 2. Button: sebuah pushbutton widget yang memunculkan sinyal ketika di-klik. Pada aplikasi ini digunakan untuk mengaktifkan beberapa fungsi seperti Edit Profile, Add Host, Remove
Gambar 3 Sistem komunikasi modul RECEIVER dan modul SENDER antar komputer Setiap kali receiver melakukan request untuk memainkan sebuah file multimedia yang terdapat pada sender, urutan proses yang terjadi adalah sebagai berikut.
2
3.
4.
Host, Add File, dan Delete File. TreeView: sebuah widget yang dapat menampilkan bentuk tree dan list. Pada aplikasi ini menampilkan daftar host yang terdapat pada playlist. TreeView yang ditandai dengan nomor 4 menampilkan daftar file yang di-share pada host tersebut.
Gambar 7 Window player audio Modul Receiver akan diaktifkan ketika pengguna mengaktifkan (meng-klik dua kali) salah satu file yang hendak dimainkan pada daftar file yang di-share oleh salah satu remote host. Modul ini dipanggil dengan parameter alamat IP localhost, alamat IP remote host, port HTTP server dari remote host, ID file yang terdapat yang hendak dimainkan, nama file, dan tipe file (audio/video). Modul Receiver akan menjalankan servis Gstreamer tcpserversrc pada port yang telah ditentukan. Setelah itu modul Receiver akan melakukan HTTP request ke remote host untuk memainkan sebuah file dengan parameter alamat IP local serta ID file.
Gambar 5 Window utama yang menampilkan daftar file yang di-share oleh host lain 5. IconView: sebuah widget yang menampilkan daftar ikon di dalam sebuah grid. Pada aplikasi ini menampilkan daftar file yang di-share oleh host yang dipilih pada playlist di sebelah kiri. Window player menggunakan modul Window dan DrawingArea dari PyGTK. Tampilan dari window player adalah sebagai berikut.
Gambar 8 Skema pemanggilan modul Receiver Modul Receiver menggunakan element "tcpserversrc" dari Gstreamer. Element ini memungkinkan komputer menerima data sebagai server pada jaringan komputer melalui protokol TCP. Berikut ini gambaran dari menyusun modul Receiver.
element-element
yang
Gambar 6 Window player video
Gambar 9 Element penyusun modul Receiver
Bagian yang ditandai dengan huruf A merupakan modul Window dari PyGTK, sedangkan bagian yang ditandai dengan huruf B adalah modul DrawingArea. Modul ini digunakan untuk menampung elemen custom user interface. Sedangkan untuk player audio, tidak menggunakan modul DrawingArea, seperti yang tampak pada gambar di bawah ini.
Ketika HTTP server menerima request untuk memainkan sebuah file, maka server akan memanggil modul Sender dengan parameter alamat IP client yang melakukan request, port Gstreamer tcpserversrc di sisi client, dan nama file yang akan dimainkan. Modul Sender menggunakan element "filesrc" dan "tcpclientsink" dari Gstraeamer. Element "tcpclientsink" memungkinkan komputer mengirim data sebagai client pada jaringan komputer menggunakan
3
protokol TCP. Berikut ini gambaran dari element-element penyusun modul Sender.
Gambar 10 Element penyusun modul Sender
3.
berisi daftar nama file yang di-share oleh host tersebut. Contoh: - Request: http://192.168.56.1:10001/getlist - Response: [u'Cangkruan 25-07-2011.flv', u'01 Borneo I-Borneo II.mp3', u'crunched.flv', u'lagu.mp3', u'Wordpress-budi.ogv', u'Nyanyian kode.flv'] /play Request path ini harus disertai dengan tiga buah parameter, yakni alamat IP dari client, nomor port di mana service Gstreamer tcpserversrc dijalankan, dan nomor ID dari file yang hendak dimainkan. Contoh: - Request: http://192.168.56.1:10001/play? host=192.168.56.21&port=5000&id=3 Maksud dari request di atas adalah client yang melakukan request /play memiliki alamat IP 192.168.56.1 dengan Gstreamer tcpserversrc berjalan pada port 5000 ingin memainkan file dengan nomor ID 3. - Response: Response dari pemanggilan path /play adalah HTTP server akan memanggil modul Sender dengan parameter sesuai dengan request yang dikirimkan client seperti yang digambarkan pada Gambar 3.5. 4. HASIL DAN PEMBAHASAN
Gambar 11 Skema pemanggilan modul
Fitur Create Profile akan dijalankan ketika aplikasi dijalankan untuk pertama kalinya atau jika pada komputer tidak ditemukan konfigurasi profile untuk komputer tersebut. Berikut tampilan dari jendela Create Profile.
Modul HTTP server pada aplikasi ini menggunakan salah satu framework web yang ditulis menggunakan bahasa pemrograman Python, yakni webpy. Webpy sendiri dipilih karena kesederhanaan dan ukurannya yang kecil karena pada aplikasi ini web server hanya menangani sedikit, yakni tiaga buah url dengan fungsi-fungsi yang sederhana pula. Path-path yang ditangani oleh modul HTTP server adalah sebagai berikut. 1. / (root) Request terhadap path ini akan mengembalikan response berupa string tuple yang berisi data profile dari host tersebut. Contoh: - Request: http://192.168.56.1:10001/ - Response: (u'Belinjo', u'192.168.56.1', 10001) Penjelasan dari response di atas adalah 'Belinjo' meruapakan nama profil dari host tersebut, '192.168.56.1' merupakan alamat IP dari host tersebut, dan 10001 merupakan nomor port di mana layanan HTTP server berjalan pada host tersebut. 2. /getlist Request pada path ini akan mengembalikan response berupa string array (atau pada bahasa pemrograman Python disebut dengan list) yang
Gambar 12 Jendela Create Profile Pada field "Hostname" diisi dengan nama komputer yang kita inginkan dibaca oleh komputer lain yang terhubung dengan komputer lokal. "IP Address" berupa combo box berisi daftar alamat IP yang terbaca sedang aktif di network interface yang terdapat di komputer lokal. Sedangkan pada field "Port" diisi dengan nomor port di mana servis HTTP server dijalankan. Jika profile yang sudah dibuat seperti yang dicontohkan di atas ingin diubah, maka fungsi Edit Profile dijalankan dengan meng-klik tombol "Edit Profile" pada toolbar. Atau dengan cara klik kanan pada "My Profile" di playlist sebelah kiri, lalu klik "Edit Profile".
4
Setelah muncul jendela Edit Profile, isi fieldfield yang ada seperti pada langkah Create Profile dengan nilai-nilai yang diinginkan. Kemudian klik tombok "OK" untuk mengubah profile atau klik tombol "Cancel" untuk membatalkan. Berikut ini hasil pengubahan profile dengan menggunakan alamat IP baru yakni 192.168.1.2 dengan port 9000.
Gambar 15 File setelah ditambahkan ke dalam daftar share Fungsi Delete File digunakan untuk menghapus sebuah file dari daftar file yang ingin di-share. Fungsi ini dapat diakses dengan meng-klik tombol "Delete" pada toolbar setelah sebelumnya memilih salah satu file yang ingin dihapus pada panel sebelah kanan. Atau dengan cara klik kanan pada file yang ingin dihapus, kemudian klik "Delete this file".
Gambar 13 Profile setelah diubah Fungsi Add File digunakan untuk menambahkan sebuah file multimedia (audio/video) ke dalam daftar file yang ingin di-share. Fungsi ini dapat diakses dengan meng-klik tombol "Add file" pada toolbar. Atau dengan klik kanan pada area di sebelah kanan, kemudian klik "Add file". Setelah akan muncul sebuah jendela dialog "Open file". Pilih salah satu file yang ingin ditambahkan, kemudian klik tombol "Open" untuk menambahkan file atau klik tombol "Cancel" untuk membatalkan.
Gambar 16 Fungsi delete file Setelah itu, maka file yang dipilih tadi akan dihapus dari daftar file yang di-share. Fungsi Add Host digunakan untuk menambahkan sebuah host ke dalam playlist yang terletak di panel sebelah kiri. Fungsi ini dapat diakses dengan meng-klik tombol "Add host" pada toolbar. Atau dengan klik kanan pada area kosong pada panel sebelah kiri, kemudian klik "Add host". Maka akan muncul jendela "Add new host" sebagai berikut.
Gambar 14 Jendela Open file Setelah sebuah file ditambahkan, maka file tersebut akan tampak di list "Shard files" di panel sebelah kanan.
Gambar 17 Jendela Add new host Kemudian klik tombol "OK" untuk menambahkan host ke playlist atau klik tombol "Cancel" untuk membatalkan. Setelah host ditambahkan ke playlist, jika host tersebut di-klik, maka pada panel sebelah akan akan tampil daftar file yang di-share oleh host tersebut. Seperti yang tampak pada gambar berikut ini. Gambar 4.8 Daftar file yang di-share oleh suatu host
5
Fungsi Remove Host digunakan jika sebuah host ingin dihapus dari playlist. Fungsi ini dapat diakses dengan meng-klik tombol "Remove" pada toolbar. Atau dengan klik kanan pada salah satu host yang ingin dihapus pada playlist di panel sebelah kiri, kemudian klik "Remove this host".
model client-server. Oleh karena itu, dirasa perlu untuk melakukan analisis terhadap penggunaan sumber daya komputer, khususnya CPU dan memory pada saat proses streaming terjadi seperti yang dijelaskan berikut ini. 1.
Komputer sebagai client Komputer dianggap sebagai client pada saat komputer tersebut memainkan file multimedia (audio/video) pada komputer lain. Berikut penggunaan sumber daya jika komputer memainkan sebuah file video pada komputer lain.
Gambar 4.12 Penggunaan sumber daya sebelum file video dimainkan
Setelah itu, maka host tersebut akan dihapus dari playlist pada panel sebelah kiri. Fungsi Play akan dipanggil jika salah satu file pada daftar file yang di-share oleh host lain pada panel sebelah kanan, diklik dua kali. Pada gambar berikut tampak sebuah file audio dimainkan setelah diklik dua kali.
Gambar 4.13 Penggunaan sumber daya setelah file video dimainkan Berdasarkan perbandingan penggunaan sumber daya sebelum file video dimainkan seperti pada Gambar 4.12 dan setelah file video dimainkan seperti pada Gambar 4.13, tampak bahwa ketika komputer sebagai client, penggunaan CPU meningkat sekitar 8% dan penggunaan memory meningkat sekitar 4 MB.
Gambar 18 Play audio file Adapun jika yang dimainkan adalah file video, maka akan tampilannya adalah sebagai berikut.
2.
Komputer sebagai server a)
Server dengan 1 client memainkan file video berukuran 13 MB
Gambar 4.14 Penggunaan sumber daya setelah 1 client memainkan file video Berdasarkan perbandingan penggunaan sumber daya sebelum file video dimainkan oleh 1 client seperti pada Gambar 4.12 dan setelah file video dimainkan seperti pada Gambar 4.14, tidak terdapat pengingkatan penggunaan CPU, bahkan cenderung menurun sekitar 1%. Sedangkan penggunaan memory mengalami peningkatan sekitar 1 MB.
Gambar 19 Play video file Baik pada jendela player audio maupun video, terdapat dua tombol, yaitu tombol "Play/Pause" dan tombol "Stop". Jika file sedang dimainkan atau dalam mode play, maka tombol "Play/Pause" akan menjadi tombol "Pause". Jika tombol "Stop" di-klik, maka tombol "Play/Pause" akan menjadi tombol "Play". Model peer-to-peer mengharuskan sebuah komputer menjadi client sekaligus sebagai server. Hal ini tentu berdampak terhadap penggunaan sumber daya komputer seperti CPU dan memory yang kemungkinan lebih tinggi jika komputer hanya sebagai client pada
b) Server dengan 4 client memainkan file audio berukuran 5 MB dan video 10 MB sampai 30 MB
6
% dan peningkatan penggunaan memory sekitar 25 MB. Dari hasil pemantauan sumber daya di atas, dapat diambil kesimpulan bahwa ketika komputer bertindak sebagai client, penggunaan memory lebih besar dibandingkan dengan CPU. Sebaliknya, ketika komputer bertindak sebagai server, CPU lebih dibutuhkan daripada memory.
Gambar 4.15 Penggunaan sumber daya setelah 4 client memainkan file audio dan video Berdasarkan perbandingan penggunaan sumber daya sebelum ada request dari client seperti pada Gambar 4.12 dan setelah ada request dari 4 client untuk memainkan file audio dan video seperti pada Gambar 4.15, terjadi peningkatan penggunaan CPU sekitar 4% dan peningkatan penggunaan memory sekitar 4 MB. c)
Secara umum, perbedaan penggunaan sumber daya ketika komputer bertindak sebagai server tidak jauh berbeda dengan ketika komputer bertindak sebagai client sekaligus sebagai server. Dari hal ini, dapat ditarik kesimpulan, penggunaan sumber daya komputer, khususnya untuk streaming, tidak terdapat perbedaan yang signifikan antara model peer-to-peer dengan model client-server.
Server dengan 4 client memainkan file video berukuran 400 MB
4. KESIMPULAN Berdasarkan pengembangan aplikasi pada tugas akhir ini, dapat diambil kesimpulan sebagai berikut. 1. Telah dikembangkan apliakasi peer-to-peer multimedia streaming berbasis Gstreamer dengan fitur-fitur: • Manajemen profile • Manajemen playlist • Manajemen shared files 2. Tidak terdapat perbedaan sumber daya, khususnya CPU dan memory yang cukup signifikan pada multimedia streaming antara model peer-to-peer dengan model client-server. 3. Model komunikasi peer-to-peer dapat dijadikan alternatif untuk berbagi pakai file multimedia pada sebuah jaringan komputer. Pengembangan aplikasi pada tugas akhir ini masih dalam tahap awal dan dapat dikembangakan untuk pengembangan selanjutnya. Antara lain: 1. Pengguna tidak perlu menambahkan host secara manual, tetapi program melakukan scanning terhadap host-host yang berada pada jaringan yang menjalankan servis yang sama. 2. Tipe file yang dapat di-share tidak hanya terbatas pada file audio dan video, tetapi bisa ditambahkan dengan sharing webcam maupun file presentasi. 3. Ditambahkannya fitur "chat" yang memungkinkan antar pengguna dapat saling berkomunikasi melalui chatting.
Gambar 4.16 Penggunaan sumber daya setelah 4 client memainkan file video berukuran 400 MB Berdasarkan perbandingan penggunaan sumber daya sebelum ada request dari client seperti pada Gambar 4.12 dan setelah ada request dari 4 client untuk memainkan file video berukuran 400 MB seperti pada Gambar 4.16, terjadi peningkatan penggunaan CPU sekitar 3% dan peningkatan penggunaan memory sekitar 21 MB. 3.
Komputer sebagai client sekaligus server Berikut ini penggunaan sumber daya ketika komputer bertindak sebagai client dengan memainkan file video berukuran 400 MB sekaligus sebagai server dengan melayani 4 buah client yang memainkan file video berukuran 400 MB sekaligus.
Gambar 4.17 Penggunaan sumber daya ketika komputer sebagai client sekaligus sebagai server melayani 4 client
REFERENSI (1) Wim Taymans , Steve Baker , Andy Wingo , Ronald S. Bultje , Stefan Kost. GStreamer Application Development Manual (0.10.32.3). (2) Persson, Jens. Feb. 2009. Python GStreamer Tutorial,
(3) Tagliaretti, G.M, Persson, Jens. Oct. 2007. Python GStreamer Reference Manual,
Berdasarkan perbandingan penggunaan sumber daya sebelum komputer melakukan request ke komputer lain dan sebelum ada request dari 4 buah client seperti pada Gambar 4.12 dan setelah komputer melakukan request ke komputer lain dan setelah ada request dari 4 komputer lain, terjadi peningkatan penggunaan CPU sekitar 11
7
(4) Finlay, John. 2005. PyGTK 2.0 Tutorial. (5) Gill, Peter. 2010. PyGTK Notebook A Journey Through Python Gnome Technologies.
8