Difference between revisions of "Nginx: Konfigurasi RTMP dengan HLS dan Dash"

From OnnoWiki
Jump to navigation Jump to search
(New page: We already looked at using our nginx-rtmp server to transcode our streams or to deliver them to more than one location. But another very nice feature, especially for mobile devices is the ...)
 
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
We already looked at using our nginx-rtmp server to transcode our streams or to deliver them to more than one location. But another very nice feature, especially for mobile devices is the option to offer streams using HLS or Mpeg-Dash.
+
Untuk mendukung HLS & Dash, kita perlu mengubah sedikit konfigurasi nginx.conf
  
  Dash explanation
+
  vi /usr/local/nginx/conf/nginx.conf
HLS explanation
 
  
In nginx-rtmp, both features are actually quite easy to use, but they depend on a few factors:
+
ubah agar
 
 
    both HLS and DASH need their own temp folder which we define in our settings soon
 
    your input stream should use the baseline H264 profile for Iphones etc.
 
 
 
In the nginx config we have to change our http section as well as our application, both in the nginx.conf:
 
  
 
  http {
 
  http {
Line 15: Line 9:
 
     server {
 
     server {
 
   
 
   
         listen      8080;
+
         listen      80;
 
   
 
   
 
         location /hls {
 
         location /hls {
Line 35: Line 29:
 
  }
 
  }
  
So we need a folder tmp/dash and tmp/hls in our root folder for nginx. And in the rtmp section:
+
 
 +
Kita butuh menambahkan folder tmp/dash and tmp/hls di root folder untuk nginx.
 +
 
 +
mkdir /tmp/hls
 +
mkdir /tmp/dash
 +
chmod -Rf 777 /tmp/hls
 +
chmod -Rf 777 /tmp/dash
 +
 
 +
Juga di bagian rtmp:
  
 
  rtmp {
 
  rtmp {
Line 43: Line 45:
 
         listen 1935;
 
         listen 1935;
 
         chunk_size 4000;
 
         chunk_size 4000;
 +
 +
        application live {
 +
            live on;
 +
            record off;
 +
        }
 
   
 
   
 
         application hls {
 
         application hls {
Line 60: Line 67:
 
  }
 
  }
  
That is pretty much all we need. In his example configuration arut also shows us a simple ffmpeg configuration to stream a movie to either of the applications:
 
  
# ffmpeg -loglevel verbose -re -i movie.avi  -vcodec libx264
 
#    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
 
#    -f flv rtmp://localhost:1935/hls/movie
 
  
Now you are ready to go and test the stream on your mobile. There are different ways to playback the stream so you will probably want to google the best solution for your system (Android/iOS/WP).
+
Contoh lain untuk hls
 +
 
 +
location /hls/ {
 +
    hls;  # Use the HLS handler to manage requests
 +
 +
    # serve content from the following location
 +
    alias /var/www/video;
 +
 +
    # HLS parameters
 +
    hls_fragment          8s;
 +
    hls_buffers        10 10m;
 +
    hls_mp4_buffer_size 1m;
 +
    hls_mp4_max_buffer_size 5m;
 +
}
 +
 
  
Default playlist address in this setup is:
+
 
 +
 
 +
 
 +
Contoh sederhana untuk men-stream sebuah video .avi menggunakan ffmpeg:
 +
 
 +
ffmpeg -loglevel verbose -re -i movie.avi  -vcodec libx264
 +
    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
 +
    -f flv rtmp://localhost:1935/hls/movie
 +
 
 +
atau
 +
 
 +
avconv -loglevel verbose -re -i movie.avi  -vcodec libx264
 +
    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
 +
    -f flv rtmp://localhost:1935/hls/movie
 +
 
 +
 
 +
ffmpeg -loglevel verbose -re -i source.mp4 -c:v libx264 -crf 19
 +
    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
 +
    -f flv rtmp://localhost:1935/hls/movie
 +
 
 +
 
 +
Default playlist address pada setup ini adalah:
  
 
  http://server.ip/hls/StreamKey.m3u8  
 
  http://server.ip/hls/StreamKey.m3u8  
  
The StreamKey in our example ffmpeg commandline was “movie”. Remember, the rtmp address is always rtmp://ip/ApplicationName/StreamKey. If you have questions, as always, post them below!
+
contoh
 +
 
 +
http://192.168.0.3/hls/movie.m3u8
 +
 
 +
StreamKey pada contoh ffmpeg commandline di atas adalah “movie”. Ingat, address rtmp address selalu rtmp://ip/ApplicationName/StreamKey.
  
  
 +
==Sisi Client==
  
 +
Di sisi client tampaknya kita perlu menginstalasi CODEC khususnya untuk mendukung H.264.
  
 +
apt-get install gstreamer1.0-plugins-bad gstreamer1.0-plugins-bad-dbg \
 +
gstreamer1.0-plugins-bad-doc gstreamer1.0-plugins-bad-faad \
 +
gstreamer1.0-plugins-bad-videoparsers gstreamer1.0-plugins-ugly \
 +
totem-plugins totem-plugins-extra gstreamer0.10-plugins-bad \
 +
gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-ugly \
 +
gnome-codec-install gstreamer0.10-plugins-bad \
 +
gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-base \
 +
gstreamer0.10-plugins-base-apps gstreamer0.10-plugins-good \
 +
gstreamer0.10-plugins-ugly gstreamer0.10-x gstreamer0.10-tools
  
  
Line 83: Line 136:
 
* http://www.helping-squad.com/category/server/
 
* http://www.helping-squad.com/category/server/
 
* http://www.helping-squad.com/nginx-rtmp-hls-or-dash-streaming/
 
* http://www.helping-squad.com/nginx-rtmp-hls-or-dash-streaming/
 +
* http://nginx.com/products/streaming-media-delivery/

Latest revision as of 07:31, 2 November 2014

Untuk mendukung HLS & Dash, kita perlu mengubah sedikit konfigurasi nginx.conf

vi /usr/local/nginx/conf/nginx.conf

ubah agar

http {

    server {

        listen      80;

        location /hls {
            # Serve HLS fragments
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;
            add_header Cache-Control no-cache;
        }

        location /dash {
            # Serve DASH fragments
            root /tmp;
            add_header Cache-Control no-cache;
        }
    }
}


Kita butuh menambahkan folder tmp/dash and tmp/hls di root folder untuk nginx.

mkdir /tmp/hls
mkdir /tmp/dash
chmod -Rf 777 /tmp/hls
chmod -Rf 777 /tmp/dash

Juga di bagian rtmp:

rtmp {

    server {

        listen 1935;
        chunk_size 4000;

        application live {
            live on;
            record off;
        }

        application hls {
            live on;
            hls on;
            hls_path /tmp/hls;
        }

        # MPEG-DASH is similar to HLS

        application dash {
            live on;
            dash on;
            dash_path /tmp/dash;
        }
    }
}


Contoh lain untuk hls

location /hls/ {
    hls;  # Use the HLS handler to manage requests

    # serve content from the following location
    alias /var/www/video;

    # HLS parameters
    hls_fragment  	        8s;
    hls_buffers         	10 10m;
    hls_mp4_buffer_size 	1m;
    hls_mp4_max_buffer_size 5m;
}



Contoh sederhana untuk men-stream sebuah video .avi menggunakan ffmpeg:

ffmpeg -loglevel verbose -re -i movie.avi  -vcodec libx264
    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
    -f flv rtmp://localhost:1935/hls/movie

atau

avconv -loglevel verbose -re -i movie.avi  -vcodec libx264
    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
    -f flv rtmp://localhost:1935/hls/movie


ffmpeg -loglevel verbose -re -i source.mp4 -c:v libx264 -crf 19
    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
    -f flv rtmp://localhost:1935/hls/movie


Default playlist address pada setup ini adalah:

http://server.ip/hls/StreamKey.m3u8 

contoh

http://192.168.0.3/hls/movie.m3u8 

StreamKey pada contoh ffmpeg commandline di atas adalah “movie”. Ingat, address rtmp address selalu rtmp://ip/ApplicationName/StreamKey.


Sisi Client

Di sisi client tampaknya kita perlu menginstalasi CODEC khususnya untuk mendukung H.264.

apt-get install gstreamer1.0-plugins-bad gstreamer1.0-plugins-bad-dbg \
gstreamer1.0-plugins-bad-doc gstreamer1.0-plugins-bad-faad \
gstreamer1.0-plugins-bad-videoparsers gstreamer1.0-plugins-ugly \
totem-plugins totem-plugins-extra gstreamer0.10-plugins-bad \
gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-ugly \
gnome-codec-install gstreamer0.10-plugins-bad \
gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-base \
gstreamer0.10-plugins-base-apps gstreamer0.10-plugins-good \
gstreamer0.10-plugins-ugly gstreamer0.10-x gstreamer0.10-tools


Referensi