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
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
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
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
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
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
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
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
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
./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;
}
}
}
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
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
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 1000Selanjutnya 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