Jumat, 21 Maret 2014

Membuat server streaming TV/Video di LAN/STREAMING | LINUX Version

Dengan semakin murahnya akses dan harga perangkat internet saat ini, sehingga semakin banyak kesempatan bagi semua orang untuk saling bertatap muka lewat internet dengan menggunakan fasilitas video & audio streaming.  Sudah banyak penyedia layanan internet yang bergerak di bidang ini, sebut saja skype, yahoo messenger, google talk, dll. Nah, bagaimana jadinya kalau kita membuat sendiri layanan live video streaming ini? Mungkin nanti bisa digunakan untuk bahan iseng buat mantau kecengan atau keperluan serius seperti CCTV.
Secara teknis, apa keuntungan kita menggunakan streaming server?
Pertama, dari sisi client :
  1. Server dapat mendeteksi kecepatan koneksi client dan secara otomatis menentukan kualitas video stream terbaik
  2. User tidak perlu menunggu sampai seluruh file didownload ke client (buffer), sehingga user bisa memilih bagian mana saja dari video/audio yang akan diputar (berlaku untuk file video/audio streaming)
Kedua, dari sisi provider :
  1. Memungkinkan penyiaran secara langsung sebuah event (audio/video)
  2. Mendukung penyediaan konten2 multimedia interaktif seperti live chat, video conference, dll
  3. Karena tidak perlu menunggu user mendownload seluruh stream, maka pemutaran stream hanya membutuhkan sumber daya server dan transfer data yang lebih sedikit (dibandingkan dengan progressive download)
  4. Karena tidak didownload (tidak disimpan di cache PC user), file audio/video yang distream (mestinya) lebih aman
Dalam membangun suatu sistem live video/audio streaming yang sederhana, secara umum komponen yang harus ada kurang lebih seperti berikut :
  • Publisher berperan sebagai encoder, untuk mengubah data-data yang ditangkap dari alat penangkap (video/audio) menjadi format file lain yang dapat diteruskan ke RTMP server yang akan mempublikasikan data2 stream tersebut. Untuk memudahkan user, biasanya data-data audio/video diubah menjadi flash video (menggunakan codec Sorenson). Publisher sendiri merupakan sebuah aplikasi, diantaranya JWPlayer (versi > 4.5.207) dengan menggunakan type=camera, atau menggunakan Red5. Di sisi Publisher ini pula dipasang audio/video device, penyimpanan file, atau link stream RTMP lain, yang akan distream.
  • RMTP server berfungsi untuk menerima stream dari Publisher, sehingga user dapat mengakses hasil stream tersebut via perangkat client (browser/media player). Sehingga client mengakses stream ke RTMP server bukan ke publisher lagi
  • Client merupakan sisi pengguna, yang menampilkan flash movie yang merupakan hasil stream dari RTMP server. Aplikasi client ini bisa merupakan flash video player yang disimpan di web hosting dan dibuka via browser (client hanya membutuhkan browser yang terpasang plugin flash) atau media player yang mendukung stream RTMP. Salah satu aplikasi flash video player ini adalah JWPlayer dan FlowPlayer
Btw, apa sih sebenernya RTMP itu sendiri? RTMP (Real Time Messaging Protocol)  merupakan protokol internet yang digunakan untuk audio/video streaming antara flash player dan server streaming. Suatu aplikasi khusus diperlukan untuk menerima dan menyiarkan koneksi RTMP dari penyedia stream ke user.
Aplikasi RTMP server yang banyak digunakan diantaranya Wowza (komersil), Adobe File Media Server (Adobe FMS, komersil) dan Red5 (Open Source). Dalam tulisan ini, kita akan mengimplementasikan streaming server berbasis Red5, karena selain gratis, juga memiliki fitur-fitur yang sama dengan RTMP server komersil.
Red5 sendiri merupakan server streaming open source berbasis Java yang mendukung streaming audio/video, merekam stream, shared object (live chat, presentasi online), siaran live stream, dll. Saat tulisan ini dibuat, versi terbaru Red5 adalah 1.0.0-RC2. Red5 dapat diunduh dari web resminya http://red5.org/, dan dapat diinstal pada sistem operasi Linux, Windows dan MacOS.
Kembali lagi soal RTMP, layaknya untuk mengakses HTTP, untuk mengakses suatu stream, client harus mengarahkan media playernya ke URL stream RTMP yang berbentuk rtmp://IP-server/folder-aplikasi-stream/channel-stream. Folder-aplikasi-stream merupakan direktori penyimpanan aplikasi stream yang memungkinkan publisher mengarahkan  hasil tangkapan perangkat audio-video/file media. Aplikasi disini merupakan aplikasi red5 yang ditulis dengan bahasa XML. Kita bisa menggunakan aplikasi demo yang disediakan oleh Red5.
Sementara channel-stream merupakan saluran streaming yang akan diakses client. Hasil tangkapan perangkat audio-video/file media yang berbeda dapat diarahkan ke aplikasi stream yang sama, namun dengan saluran yang berbeda. Client tinggal memilih saluran mana yang akan ditampilkan.
Cukup sudah pendahuluan yang cukup panjang ini, saatnya kita bersenang-senang

Instalasi Red5

Sistem operasi yang digunakan untuk instalasi ini adalah Ubuntu 10.04, dan versi red5 yang digunakan adalah versi 0.9.1. karena red5 adalah aplikasi berbasis java, maka sistem operasi yang diinstal harus sudah mendukung java, kita instal terlebih dahulu javanya dengan :
apt-get install java-common openjdk-6-jre openjdk-6-jdk
Selanjutnya, kita akan menyimpan aplikasi red5 ini di direktori /opt/red5 (bisa juga di tempat lain). Download terlebih dahulu file source Red5, kemudian ekstrak di direktori /opt/red5
wget http://www.nielsenaa.com/red5-installers/red5-0.7.0.tar.gz
tar -xvzf red5-0.7.0.tar.gz -C /opt/red5
Jika direktori ekstrak Red5 di list, tampilannya sebagai berikut :
ady@local-server:/opt/red5$ tree -L 2
âââ boot.jar
âââ conf –> file konfigurasi red5
âââ lib
âââ license.txt
âââ log –> log red5
âââ red5.bat
âââ red5-debug.bat –> file eksekusi red5 di windows jika ingin melihat output log saat red5 dijalankan
âââ red5-debug.sh –> file eksekusi red5 di linux jika ingin melihat output log saat red5 dijalankan
âââ red5-highperf.bat
âââ red5-highperf.sh
âââ red5.jar
âââ red5.sh –> file eksekusi red5 normal
âââ red5-shutdown.bat –>  file untuk mematikan layanan Red5 di windows
âââ red5-shutdown.sh –>  file untuk mematikan layanan Red5 di linux
âââ webapps –> direktori penyimpanan aplikasi XML Red5
âââ work –> direktori penyimpanan engine Red5

Ubah permission file *.sh Red5 agar dapat dieksekusi dengan :
find /opt/red5 -name ‘*.sh’ -exec chmod +x {} \;
Saat ini, kita bisa langsung menjalankan red5 dengan menggunakan perintah :
cd /opt/red5
./red5.sh
Atau
sh red5.sh
Atau jika ingin melihat keluaran log Red5 (verbose) saat dijalankan :
./red5-debug.sh
Saat ini Red5 tidak dijalankan pada proses background, untuk menghentikannya cukup menekan Ctrl-C, otomatis layanan Red5 akan berhenti.
Tapi, sebelum menjalankan layanan Red5, pastikan terlebih dahulu komunikasi yang diperlukan oleh Red5 telah diiizinkan lewat oleh firewall. Berikut list port yang secara default perlu dibuka :
1935 : untuk RTMP
8088 : untuk RTMPT
5080 : untuk HTTP servlet engine
1936 : untuk debug proxy
Pengaturan konfigurasi port yang digunakan Red5 ini terdapat di file $folder-instalasi-red5/conf/red5.properties, salah satu contoh pengaturan port di Red5 dapat dilihat di http://gregoire.org/2009/01/28/rtmpt-and-red5/

Konfigurasi Layanan Red5

Agar red5 dapat dijalankan saat booting, maka perlu dibuat file skrip init untuk Red5. caranya buat file red5 (bebas sebenarnya) di direktori /etc/init.d :
nano /etc/init.d/red5
Isi dengan keterangan berikut (sesuaikan RED5_HOME dengan direktori tempat kita menyimpan Red5):
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC=”Red5 flash streaming server”
NAME=red5
RED5_HOME=/opt/red5
DAEMON=$RED5_HOME/$NAME.sh
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
# Read config file if it is present.
if [ -r /etc/default/$NAME ]
then
. /etc/default/$NAME
fi
#
# Function that starts the daemon/service.
#
d_start() {
start-stop-daemon –start -c nobody –pidfile $PIDFILE –chdir $RED5_HOME –background –make-pidfile –exec $DAEMON
}
#
# Function that stops the daemon/service.
#
d_stop() {
start-stop-daemon –stop –quiet –pidfile $PIDFILE –name java
rm -f $PIDFILE
}
case “$1″ in
start)
echo -n “Starting $DESC: $NAME”
d_start
echo “.”
;;
stop)
echo -n “Stopping $DESC: $NAME”
d_stop
echo “.”
;;

restart|force-reload)
echo -n “Restarting $DESC: $NAME”
d_stop
sleep 1
d_start
echo “.”
;;

*)
echo “Usage: $SCRIPTNAME {start|stop|restart|force-reload}” >&2
exit 1
;;

esac
exit 0
exit 0
Kemudian ubah permission file init ini :
chmod +x /etc/init.d/red5
Kemudian agar file init red5 ini dilload saat booting, jalankan perintah :
update-rc.d red5 defaults
Dengan menambahkan file init ini, kita bisa mengontrol layanan Red5 dengan menggunakan
/etc/init.d/red5 {start|stop|restart|force-reload}
Atau
service red5 {start|stop|restart|force-reload}
Kemudian buka brower, di bagian URL ketikkan :
Sehingga keluar tampilan :
Jika halaman di atas sudah muncul, berarti layanan Red5 standar sudah berhasil terpasang. Jika belum muncul, cek kembali keluaran file red5.sh, jika perlu jalankan file red5-debug.sh

Percobaan Live Streaming

Setelah menginstal Red5, kita coba aplikasi sederhana bawaan dari Red5 yaitu demo Publisher, arahkan browser ke halaman http://IP:5080/demos/publisher.html, sehingga keluar tampilan
Untuk menjalankan percobaan video streaming, pertama hubungkan client dengan server rtmp dengan mengganti box Location ke rtmp://IP/oflaDemo, kemudian klik tombol Connect
jika di menu samping sudah terdapat pesan NetConnection.Connect.Success, artinya client sudah terhubung dengan rtmp server. Jika belum mendapat tampilan seperti di atas, cek terlebih dahulu apakah port rtmp telah berjalan di server kita dengan :
# telnet IP 1935
Selain itu, masalahnya bisa terjadi di jaringan yang terhalang oleh firewall/proxy.
Selanjutnya, untuk melakukan streaming, kita harus mempunyai perangkat Video dan Audio yang telah terpasang di komputer client kita, pilih media Video & Audio yang akan digunakan untuk streaming di menu Video dan Audio
Sebelum memulai proses streaming, terlebih dahulu ubah nama stream kita di box Name dengan nama apa saja, misalkan Live. Setelah memilih perangkat Video & Audio yang digunakan, tekan tombol Start, dengan segera akan muncul notifikasi perizinan Flash untuk mengakses perangkat Video & Audio kita, klik Allow.
Setelah muncul notifikasi dari Flash, seharusnya ditampilkan keluaran Video & Audio di halaman demo publisher kita
Setelah muncul keluaran Video & Audio, kita dapat mempublish streaming kita dengan menekan tombol Publish

Sisi Client

Di sisi client, kita dapat menggunakan media player yang sudah mensupport streaming rtmp. Dalam tulisan ini, kita akan menggunakan flash media player yang dipasang di web hosting kita untuk menampilkan streaming rtmp kita. Kita dapat menggunakan JWPlayer atau Flowplayer. Kali ini kita menggunakan JWPlayer sebagai player rtmp streaming, unduh terlebih dahulu sourcenya di http://www.longtailvideo.com/jw/upload/mediaplayer.zip
Kemudian upload di halaman web yang dapat diakses client, kemudian buat sebuah file html (atau embed di halaman web yang kita inginkan), kode html sebagai berikut :
<div id=”mediaplayer”>JW Player goes here</div>
<script type=”text/javascript” src=”jwplayer.js”></script>
<script type=”text/javascript”>
jwplayer(“mediaplayer”).setup({
flashplayer: “player.swf”,
file: “streamname”,
streamer:’rtmp://IP/oflaDemo/’,
autostart:’true’,
});
</script>
ganti IP dengan IP rtmp server kita dan file streamname dengan nama saluran stream sesuai saat mempublish streaming Video & Audio kita. Selanjutnya buka halaman web yang sudah kita embed kode html tersebut, dan voila
Selesai sudah percobaan streaming Video & Audio kita. Hasil streaming akan mengalami delay sesuai dengan kualitas Video & Audio yang dipilih saat publish (dapat kita ganti juga setelah publish) juga bandwidth client.


Selasa, 11 Maret 2014

Perbedaan CCD dan CMOS [Kasus pada CCTV merk Taiwan dan Cina)

Banyak merk CCTV yang beredar saat ini, dan banyak pula yang menjanjikan hal yang yang seringkali berlebihan. Anda mungkin akan bingung dengan banyaknya pilihan dengan jenis TVL yang tinggi dan menjanjikan kualitas bagus. Namun menurut saya, sebaiknya anda memperhatikan jenis sensor yang digunakan, apakah CCD atau CMOS

Berikut ini akan saya paparkan perbedaan mendasar antara keduanya

CCD - Charged Coupled Device

Beberapa fakta tentang sensor CCD:
  1. Pada awalnya memang sudah dirancang sebagai perangkat penangkapan cahaya
  2. Teknologi konservatif
  3. Secara arsitektur fisik berkepekaan lebih tinggi
  4. Dioptimalkan untuk ISO rendah, dengan kondisi pencahayaan yang berlimpah atau terkendali, pada ISO tinggi noise cenderung lebih banyak.
  5. Berkecepatan rendah
  6. Konsumsi baterai yang tinggi, lebih karena banyak bertumpunya fungsi-fungsi manajemen sinyal elektrik dan sinyal digital di dalam prosesor kamera
  7. Sinyal keluaran langsung dari CCD bersifat lebih murni dan lebih seragam karena sangat minim campur-tangan sirkuit elektronik
  8.  Kelemahan blooming.
CMOS - Complementary Metal Oxide Semiconductor

 Beberapa fakta tentang sensor CMOS:
  1. Pada awalnya tidak diciptakan sebagai perangkat penangkapan cahaya, melainkan sebagai komponen elektronik
  2. Teknologi generasi baru
  3. Secara arsitektur elektronik berkepekaan lebih tinggi
  4. Dioptimalkan untuk ISO tinggi, dengan kondisi intensitas  pencahayaan minimal
  5. Berkecepatan tinggi
  6. Konsumsi baterai yang minim, karena tugas prosesor yang lebih ringan
  7. Sinyal keluaran langsung dari sensor CMOS bersifat tidak lebih murni dan tidak lebih seragam daripada sensor CCD, karena sudah banyaknya campur-tangan sirkuit elektronik internal
  8. Kelemahan skewing 


Camera CCTV sensor CCD (charge-coupled device) dan CMOS (complimentary metal-oxide semiconductor) berfungsi sama yaitu mengubah cahaya menjadi elektron atau partikel gambar. Untuk mengetahui cara sensor bekerja kita harus mengetahui prinsip kerja sel surya. Anggap saja sensor yang digunakan di kamera digital seperti memiliki ribuan bahkan jutaan sel surya yang kecil dalam bentuk matrik dua dimensi. Masing-masing sell akan mentransform cahaya dari sebagian kecil gambar yang ditangkap menjadi elektron. Kedua sensor tersebut melakukan pekerjaan tersebut dengan berbagai macam teknologi yang ada. jadi saran kami, apapun merk dan brandnya kamera tersebut, usahakan jenis ccd.
Masing-masing sell akan mentransform cahaya dari sebagian kecil gambar yang ditangkap menjadi elektron gambar. Kedua sensor tersebut melakukan pekerjaan tersebut dengan berbagai macam teknologi yang ada. Langkah berikut adalah membaca nilai dari setiap sel di dalam gambar. Dalam kamera CCD, nilai tersebut dikirimkan ke dalam sebuah chip dan sebuah konverter analog ke digital mengubah setiap nilai piksel analog menjadi nilai digital.
  • Sensor CCD, seperti yang disebutkan di atas, kualitasnya tinggi, gambarnya low-noise. Sensor CMOS lebih besar kemungkinan untuk noise.
  • Sensitivitas CMOS lebih rendah dibanding sensor CCD. Banyak perbedaan pada bagian  jumlah transistor .
  • Sensor CMOS menggunakan sumber daya listrik yang lebih kecil.
  • Sensor CCD menggunakan listrik yang lebih besar, perbandingannya 100 kali lebih besar dari CMOS.
  • Chip CMOS dibuat dengan cara  yang umum sehingga lebih murah dibandingkan sensor CCD.
  • Sensor CCD telah diproduksi masal dan ditargetkan untuk pemakain dalam jangka waktu lama sehingga lebih produktif dan kualitasnya lebih tinggi serta lebih baik hasilnya.
Berdasarkan perbedaan tersebut, Anda dapat lihat bahwa sensor CCD lebih banyak digunakan di kamera yang fokus pada gambar yang high-quality dengan piksel yang besar dan sensitivitas cahaya yang baik. Sensor CMOS lebih ke kualitas dibawahnya, resolusi dan sensitivitas cahaya yang lebih rendah. Akan tetapi pada saat ini sensor CMOS telah berkembang hampir menyamai kemampuan sensor CCD.