Wednesday, June 17, 2015

STREAMING DENGAN FFMPEG DAN NGINX

Oke gan, sebelum mulai membuat streaming server dengan ffmpeg dan nginx ada yang harus dijelaskan terlebih dahulu, diantaranya :
  • Bit rate : besar data sebuah file video, audio atau integrasi audio dan video dalam satu detik.
  • Frame rate : jumlah gambar (frame) sebuah video dalam satu detik.
  • Bitrate berpengaruh pada kualitas gambar, yang berbanding luru dengan jenis codecnya.
  • Codec adalah sebuah coding (bahasa pemrograman) yang membentuk sebuah file video
  • misalnya, pada sebuah video DV PAL, dengan codec Microsoft DV, bit rate nya 25Mbps. Saat video tersebut di convert ke codec MPEG 2, hanya membutuhkan 6Mbps untuk kualitas yang menyerupai (tidak sama persis) dengan kualitas DV. Karena setiap codec memiliki karakteristik kualitas gambar sendiri" (tergantung cara codingnya), maka kita tidak bisa bilang sama persis kualitasnya.
  • Sementara frame rate pada awalnya tergantung media dan lokasinya, dimana :
  • Film : 24 fps 
  • PAL : 25 fps, sistem televisi yang digunakan di Eropa dan daerah bekas jajahanya(Indonesia, Australia, dsb)
  • NTSC : 29,978 fps, sistem televisi yang digunakan oleh Amerika dan negara konsianya (Jepang, dsb)

Selanjutnya kita akan menginstall ffmpeg dan paket" yang dibutuhkan.


Update paket compiler :

sudo apt-get install autoconf automake build-essential libass-dev libfreetype6-dev libgpac-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libx11-dev libxext-dev libxfixes-dev pkg-config texi2html zlib1g-dev

Buat direktori agar mempermudah proses penginstallan :
sudo mkdir ~/souceffmpeg

Compile library video dan audio yang dibutuhkan :

YASM library :
cd ~/sourceffmpeg
wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
tar xzvf yasm-1.2.0.tar.gz
cd yasm-1.2.0
./configure
make
sudo make install
sudo make distclean

LIBX264 UNTUK VIDEO CODEC H264
cd ~/sourceffmpeg
wget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
tar xjvf last_x264.tar.bz2
cd x264-snapshot*
./configure --enable-static
make
sudo make install
sudo make distclean

LIBFDK-AAC UNTUK CODEC AUDIO AAC
cd ~/sourceffmpeg
wget -O fdk-aac.zip https://github.com/mstorsjo/fdk-aac/zipball/master unzip fdk-aac.zip
cd mstorsjo-fdk-aac*
autoreconf -fiv
./configure --disable-shared
make
sudo make install
sudo make distclean

LIBMP3LAME UNTUK CODEC AUDIO MP3
Install terlebih dahulu aplikasi nasm
sudo apt-get install nasm
cd ~/sourceffmpeg
wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar xzvf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure --enable-nasm --disable-shared
make
sudo make install
sudo make distclean

LIBOPUS UNTUK CODEC AUDIO OPUS
cd ~/sourceffmpeg
wget http://downloads.xiph.org/releases/opus/opus-1.1.tar.gz
tar xzvf opus-1.1.tar.gz
cd opus-1.1
./configure --disable-shared
make
sudo make install
sudo make distclean

LIBVPX UNTUK CODEC VIDEO WEBM (VP8/VP9)
cd ~/sourceffmpeg
wget http://webm.googlecode.com/files/libvpx-v1.3.0.tar.bz2
tar xjvf libvpx-v1.3.0.tar.bz2
cd libvpx-v1.3.0
./configure --disable-examples
make
sudo make install
sudo make clean

COMPILE FFMPEG
cd ~/sourceffmpeg
wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
./configure --extra-libs="-ldl" --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
make
sudo make install
sudo make distclean
hash -r 

Jika sudah, ketik ffmpeg di terminal. Hasilnya akan seperti ini jika berhasil :

Selanjutnya install nginx dan paket pendukung  :

Install paket pendukung :
sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev

Download dan ekstrak Source nginx :
wget http://nginx.org/download/nginx-1.4.2.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
tar -zxvf nginx-1.4.2.tar.gzunzip master.zip

Masuk direktorik nginx :
cd nginx-1.4.2

Compile nginx :
./configure --add-module=../nginx-rtmp-module-master

$ make
$ sudo make install

Konfiguras nginx :

Edit file /etc/usr/local/nginx/conf/nginx.conf menjadi seperti ini :
worker_processes  1;
events {
    worker_connections  1024;
}
#Konfigurasi Untuk Live Streaming HLS dan Ondemand File pergunakan video format mp4
http {
    server {
        listen      8080;
        location /hls {
            # HLS Live Streaming sumber dari RTMP
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /var/live;
            add_header Cache-Control no-cache;
        }
    location /ond {
            # HLS untuk ondemand Streaming
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp4 ts;
            }
            alias /var/video;
            add_header Cache-Control no-cache;
        }
    }
}
#Streaming Live  RTMP
rtmp {
    server {
        listen 1935;
        chunk_size 4000;
     #Untuk Live Streaming RTMP
      application hls {
            live on;
            hls on;
            hls_path /var/live/hls;
        }
      #Untuk Ondemand Live Streaming RTMP
       application ond {
            play /var/www;
        }
    }
}

Jalankan nginx :
sudo /usr/local/nginx/sbin/nginx
untuk memastikan apakah port 1935 pada nginx berfungsi , ketik
netstat -nltp

Berikut ini sedikit option dari perintah ffmpeg :
  • -acodec aac sets the audio codec (internal AAC encoder)
  • -strict experimental allows use of some experimental codecs (the internal AAC encoder is experimental)
  • -ar 44100 set the audio sample rate
  • -ac 2 specifies two channels of audio
  • -b:a 96k sets the audio bit rate
  • -vcodec libx264 sets the video codec
  • -r 25 set the frame rate
  • -b:v 500k set the video bit rate
  • -f flv says to deliver the output stream in an flv wrapper
Sekarang saatnya kita tes ffmpeg heheheheh 

Pertama saya akan menampilkan sebuah film yaitu "Hello Ghost", dengan format mkv menjadi mp4 :

ffmpeg -i HELLO_GHOST.mkv -vcodec libx264 -s 600x480 -b:v 200k -acodec libfdk_aac -ar 22050 -ac 1 -b:a 16k -f flv rtmp://localhost/hls/testing.mp4

Tampilkan dengan ffplay :
ffplay rtmp://localhost:1935/hls/testing.mp4



Selanjutnya saya akan mencoba input video dari android menggunakan aplikasi "arutcam"


Berikut ini adalah settingan yang saya gunakan di arutcam. Pastikan server dan hp android terubung, 192.168.43.45 adalah ip server, tes adalah nama video/file yang akan di kirim






Tampilkan dengan ffplay :
ffplay rtmp://localhost/hls/tes -> saya mencoba di server jadi localhost



gunakan perintah berikut untuk mengurangi delay :
ffplay rtmp://localhost/hls/tes -analyzeduration 1000

Selanjutnya saya akan mencoba untuk menambahkan logo, logo.png adalah nama logo yg saya gunakan.

input dari android --> ffmpeg --> output. 

rtmp://localhost/hls/tes adalah input
rtmp://localhost/hls/tes1 adalah output yang sudah ditambahkan logo.png

ffmpeg -i rtmp://localhost/hls/tes -i logo.png -vcodec libx264 -acodec libfdk_aac -filter_complex overlay -f flv rtmp://localhost/hls/tes1



Tampilkan dengan ffplay :
ffplay rtmp://localhost/hls/tes1


selesai, mohon maaf apabila ada kesalahan dalam penulisan maupun penjelasan pada postingan saya kali ini

referensi :
http://andrijohandri.blogspot.com/2014/08/konfigurasi-live-streaming-mobile-hls.html
http://andrijohandri.blogspot.com/2014/05/encoder-live-rtmp-dengan-ffmpeg-di.html
http://andrijohandri.blogspot.com/2014/05/streaming-server-rtmp-dengan-nginx.html
https://trac.ffmpeg.org/wiki/StreamingGuide#Latency





3 comments:

  1. bro kok ane error disini
    Unknown option "--enable-x11grap".
    See ./configure --help for available options.

    sudah ikutin semua nya

    ReplyDelete
  2. sama dibag ini juga bro
    kalo mau coba putar
    ffmpeg -i batman.mp4 -vcodec libx264 -s 600x480 -b:v 200k -acodec libfdk_aac -ar 22050 -ac 1 -b:a 16k -f flv rtmp://localhost/hls/testing.mp4

    error pesannya
    Unknown encoder 'libfdk_aac'

    ReplyDelete

dilarang berkomentar menggunakan kata-kata yang tidak pantas... !!!