Membuat Sendiri TV Internet

From OnnoWiki
Jump to navigation Jump to search

Sumber: http://www.howtoforge.com/build-your-own-video-community-with-lighttpd-and-flowplayer-ubuntu-9.10

Tulisan ini menjelaskan bagaimana kita dapat membuat sendiri streaming video komunitas menggunakan lighttpd menggunakan modul streaming mod_flv_streaming (untuk streaming video .flv, format yang digunakan oleh banyak video streaming komunitas seperti YouTube) dan modul mod_secdownload (untuk menghalangi hotlinking dari video) di Ubuntu. Kita akan menggunakan FlowPlayer video player, sebuah Flash video player yang mendukung modul lighttpd mod_flv_streaming. Kita juga akan memperlihatkan bagaimana meng-encode video (.mp4 .mov .mpg .3gp .mpeg .wmv .avi) ke format FLV yang di dukung oleh Adobe Flash.


Beberapa Catatan Awal

Dalam tutorial ini akan digunakan

hostname  server1.example.com
IP Address 192.168.0.9

Cara instalasi lighttpd di terangkan di

Kita menjalankan semua perintah di bawah sebagai root. Pastikan anda login sebagai root melalui perintah

sudo su


Instalasi

Instalasi menggunakan perintah

apt-get install ffmpeg flvtool2


Buat Directory untuk menyimpan video

Misalnya

mkdir -p /var/videos/incoming
mkdir -p /var/videos/flv


Encode Video menjadi FLV

Berikut akan di contohkan konversi video.avi di /var/videos/incoming (cara yang sama sebetulnya dapat juga dilakukan untuk extension .mp4 .mov .mpg .3gp .mpeg .wmv). Kita kan mengkonversikan file tersebut menjadi video.flv dan menyimpannya di directory /var/videos/flv. File video.flv dibuat untuk pixel 320x240 dengan frekuensi audio sampling 44100 Hz, dua kanal audio (stereo), dengan frame rate 12 fps. Caranya adalah sebagai berikut:

ffmpeg -i /var/videos/incoming/video.avi -s 320x240 -ar 44100 -r 12 -ac 2 /var/videos/flv/video.flv

Untuk melihat pilihan yang lain ada baiknya melihat perintah

man ffmpeg

Proses ini akan memerlukan beberapa waktu, keluaran / outputnya adalah sebagai berikut:

root@server1:~# ffmpeg -i /var/videos/incoming/video.avi -s 320x240 -ar 44100 -r 12 -ac 2 /var/videos/flv/video.flv
FFmpeg version SVN-r13582, Copyright (c) 2000-2008 Fabrice Bellard, et al.
  configuration: --prefix=/usr --libdir=${prefix}/lib --shlibdir=${prefix}/lib --bindir=${prefix}/bin --incdir=${prefix}/include /ffmpeg --enable-shared --enable-libmp3lame --enable-gpl --enable-libfaad --mandir=${prefix}/share/man --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-libamr-nb --enable-libamr-wb --enable-x11grab --enable-libgsm --enable-libx264 --enable-liba52 --enable-libtheora --extra-cflags=-Wall -g -fPIC -DPIC --cc=ccache cc --enable-swscale --enable-libdc1394 --enable-nonfree --disable-mmx --disable-stripping --enable-avfilter --enable-libdirac --disable-decoder=libdirac --enable-libschroedinger --disable-encoder=libschroedinger --disable-altivec --disable-armv5te --disable-armv6 --disable-vis
  libavutil version: 49.7.0
  libavcodec version: 51.58.0
  libavformat version: 52.16.0
  libavdevice version: 52.0.0
  libavfilter version: 0.0.0
  built on May  3 2009 12:07:18, gcc: 4.3.2
Input #0, avi, from '/var/videos/incoming/video.avi':
  Duration: 00:10:53.82, start: 0.000000, bitrate: 5455 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 1024x576 [PAR 1:1 DAR 16:9], 24.00 tb(r)
    Stream #0.1: Audio: ac3, 48000 Hz, 5:1, 448 kb/s
Output #0, flv, to '/var/videos/flv/video.flv':
    Stream #0.0: Video: flv, yuv420p, 320x240 [PAR 4:3 DAR 16:9], q=2-31, 200 kb/s, 12.00 tb(c)
    Stream #0.1: Audio: libmp3lame, 44100 Hz, stereo, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop encoding
[libmp3lame @ 0x7f983556f6c0]lame: output buffer too small (buffer index: 8359, free bytes: 281)
frame= 7847 fps= 13 q=2.0 Lsize=   21696kB time=653.92 bitrate= 271.8kbits/s
video:16067kB audio:5114kB global headers:0kB muxing overhead 2.428783%
root@server1:~#

Pastikan pada bagian output, kita melihat dua stream, satu untuk video, satu untuk audio. Jika kita hanya melihat video saja, maka artinya suaranya hilang.

Setelah melalukan konversi kita dapat menambahkan metadata ke video.flv menggunakan flvtool2:

cat /var/videos/flv/video.flv | flvtool2 -U stdin /var/videos/flv/video.flv


Konfigurasi Lighttpd

Selanjutnya kita perlu membuka file konfigurasi /etc/lighttpd/lighttpd.conf, dan add/enable module mod_secdownload dan modul mod_flv_streaming. Penting untuk di perhatikan agar mod_secdownload di tulis sebelum mod_flv_streaming dalam urutan server.modules. Jika kita melakukannya terbalik, tampaknya akan menyebabkan video fast-forwarding di FlowPlayer tidak jalan.

vi /etc/lighttpd/lighttpd.conf
[...]
server.modules              = (
            "mod_access",
            "mod_alias",
            "mod_accesslog",
            "mod_compress",
#           "mod_rewrite",
#           "mod_redirect",
#           "mod_evhost",
#           "mod_usertrack",
#           "mod_rrdtool",
#           "mod_webdav",
#           "mod_expire",
            "mod_secdownload",
            "mod_flv_streaming",
#           "mod_evasive"
)
[...]

Di file yang sama, kita dapat menambahkan konfigurasi berikut di akhir file /etc/lighttpd/lighttpd.conf:

[...]
flv-streaming.extensions = ( ".flv" )
secdownload.secret          = "somesecret"
secdownload.document-root   = "/var/videos/flv/"
secdownload.uri-prefix      = "/dl/"
secdownload.timeout         = 120 

Kita dapat mengganti somesecret dengan password yang kita inginkan.

Modul mod_secdownload akan melakukan hal berikut:

Sebuah aplikasi web misalnya sebuah PHP script dengan link dengan format sebagai berikut

<uri-prefix>/<token>/<timestamp-in-hex>/<rel-path>

contoh

/dl/d8a8cb150f7e5962f6a8443b0b6c6cc2/46c1d9f6/video.flv

Dimana <token> adalah MD5 dari

  1. password (yang diberikan user)
  2. <rel-path> (start dengan /)
  3. <timestamp-in-hex>

mod_secdownload akan memetakan link tersebut ke file yang benar di secdownload.document-root (yang berada di luar document root dari web) dan mengijinkan akses ke file tersebut untuk secdownload.timeout detik. Setelah secdownload.timeout detik, link tersebut menjadi tidak valid, akses akan di tolak.

Setelah kita menginstalasi FlowPlayer, kita akan menggunakan PHP script untuk menghasilkan video link yang benar untuk mod_secdownload.

Kita dapat memperoleh informasi tentang mod_secdownload di http://trac.lighttpd.net/trac/wiki/Docs%3AModSecDownload

Jangan lupa untuk me-restart lighttpd sesudah kita melakukan perubahan di /etc/lighttpd/lighttpd.conf:

/etc/init.d/lighttpd restart


Instalasi FlowPlayer

Ambil FlowPlayer

Go to http://flowplayer.org/download and download the latest FlowPlayer version to your /tmp directory, e.g. like this:

apt-get install unzip
cp flowplayer-3.2.7.zip /usr/local/src
cd /usr/local/src
unzip flowplayer-3.2.7.zip
mv flowplayer /var/www/


Konfigurasi FlowPlayer

FlowPlayer telah di instalasi, selanjutnya kita perlu membuat file HTML yang memungkinkan kita untuk melihat video. Kita akan membuat file PHP sederhana dengan nama /var/www/flowplayertest.php yang berisis semua parameter untuk menjalankan FlowPlayer di browser dan membuat video link yang benar untuk mod_secdownload:

vi /var/www/flowplayertest.php

isi dengan

<?php

$secret = "somesecret";
$uri_prefix = "/dl/";

# filename
$f = "/video.flv";

# current timestamp
$t = time();

$t_hex = sprintf("%08x", $t);
$m = md5($secret.$f.$t_hex);

?>

<html>
<head>
<title>Flowplayer Test</title>

<script src="/flowplayer/example/flowplayer-3.2.6.min.js"></script> 

</head>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">

<a
    href="<?php printf('%s%s/%s%s', $uri_prefix, $m, $t_hex, $f, $f); ?>"
    style="display:block;width:320px;height:256px;"
    id="player">
</a> 

<script language="JavaScript">
flowplayer("player", "/flowplayer/flowplayer-3.2.7.swf");
</script>

</body>
</html>

Penting untuk memastikan bahwa nilai $secret sama dengan secdownload.secret di /etc/lighttpd/lighttpd.conf. Juga $uri_prefix dan secdownload.uri-prefix harus sama. Jika ini di penuhi, script di atas akan menghasilkan link yang benar. $f harus mempunyai nama file FLV video, di mulai dengan (/). (Dalam contoh di atas filename dibuat hard-coded, tentunya kita dapat dengan mudah membuatnya dinamik).

Bagian penting yang memanggil FlowPlayer adalah <script src="/flowplayer/example/flowplayer-3.2.6.min.js"></script> (yang mengacu pada script flowplayer-3.2.6.min.js di directory /var/www/flowplayer/example) di bagian <head></head> dan dua bagian <body></body>:

<a
    href="<?php printf('%s%s/%s%s', $uri_prefix, $m, $t_hex, $f, $f); ?>"
    style="display:block;width:320px;height:256px;"
    id="player">
</a>

Bagian terpenting adalah parameter href yang di set pada script PHP di atas yang menentukan path ke file video FLV. Pada parameter style, kita dapat menset lebar dan tinggi layar video player.

dan

<script language="JavaScript">
flowplayer("player", "/flowplayer/flowplayer-3.1.5.swf");
</script>

Disini kita menset path ke file FlowPlayer .swf

Ubah owner & permission

chown -Rf www-data.www-data /var/www
chown -Rf www-data.www-data /var/videos
chmod -Rf 777 /var/www
chmod -Rf 777 /var/videos

Konfigurasi FlowPlayer ini di ambil dari http://flowplayer.org/demos/installation/index.html. Untuk mempelajari lebih lanjut bagaimana cara memanggil FlowPlayer ada baiknya melihat-lihat contoh di http://flowplayer.org/demos/index.html.

Sekarag mari kita test setup yang telah kita lakukan. Akses ke alamat http://192.168.0.9/flowplayertest.php atau http://server1.example.com/flowplayertest.php, video anda harusnya start di browser:

Click to enlarge

Berikut adalah tampilan native Flash 9 pada mode full screen:

Click to enlarge

Referensi

Referensi

Pranala Menarik