Wednesday, October 25, 2017

NGINX Sebagai RTMP Server

Streaming dengan STREAMING SERVER NGINX dan CDN 3rd party.

Kofigurasi:

Case 1: Encoder (ffmpeg) ---- rtmp push ---- NGINX ---- rtmp --- jwplayer

Case 2: Encoder (ffmpeg) ---- rtmp push ---- NGINX ---- rtmp push --- CDN ---- rtmp ---- jwplayer


Case 1:

aa. FFMPEG streaming file as live streaming

ffmpeg -re -i https://s3-us-west-1.amazonaws.com/tfcvideos/rockfall.mov -vcodec libx264 -preset veryfast -maxrate 1500k -c:a aac -b:a 128k -ac 2 -ar 44100 -f flv rtmp://3.3.3.3:1935/live/livestream


bb. Setting RTMP streaming-server menggunakan NGINX

Misal IP Server NGINX adalah 3.3.3.3

Pada nginx.conf tambahkan:

rtmp {
      server {
              listen 1935;
              chunk size: 8192;
           
              application live {
                   live on;
                   allow publish all;
                   allow play all;
                   record all;
                   record_path /home/video_recordings;
               }
       }
}


cc. Setting html untuk jwplayer
file index.html
<html>
  <head>
    <script type="text/javastrict" src="jwplayer.js"></sript>
  </head>
  <body>
     <div id="meElement"> loading player.....</div>
     <script type=test/javascript">
          jwplayer("myElement").setup({
            file: "rtmp//3.3.3.3:1935/live/livestream",
            height:720,
            width:1280
          });
     </script>
   </body>
</html>



Case 2:

aa. FFMPEG streaming file as live streaming

ffmpeg -re -i https://s3-us-west-1.amazonaws.com/tfcvideos/rockfall.mov -vcodec libx264 -preset veryfast -maxrate 1500k -c:a aac -b:a 128k -ac 2 -ar 44100 -f flv rtmp://3.3.3.3:1935/live/livestream

bb. NGINX sebagai RTMP Push dan Pull server

Ciri RTMP Pull server adalah ada port TCP yang listen biasanya 1935.

Apabila stream yann diterima ingin di kirim ke CDN Server, misalkan provider CDN nya adalah Twitch maka settingganya dijelaskan spt di bawah ini.

Pertama-tama tentu ambil paket langganan dari Twitch dulu, setelah itu akan mendapatkan URL untuk nantinya Encoder pusth RTMP ke ingest server Twitch. Dalam case ini URL yang didapat adalah: rtmp://live-jfk.twicth.tv/app/<stream-key>


rtmp {
      server {
              listen 1935;
              chunk size: 8192;
           
              application live {
                   live on;
                   allow publish all;
                   allow play all;
                   record all;
                   record_path /home/video_recordings;
 
                   push rtmp://live-jfk.twicth.tv/app/<stream-key>
               }
       }
}                 

dalam case diatas ffmpeg kirim stream ke NGINX, lalu NGINX push RTMP ke Ingest Server Twitch.

cc. Setting jwplayer

file index.html
<html>
  <head>
    <script type="text/javastrict" src="jwplayer.js"></sript>
  </head>
  <body>
     <div id="meElement"> loading player.....</div>
     <script type=test/javascript">
          jwplayer("myElement").setup({
            file: "rtmp//CDNServer:1935/live/<streamkey>",
            height:720,
            width:1280
          });
     </script>
   </body>
</html>


CATATAN: sayangnya banyak player CDN ke depan akan stop support RTMP dengan berbagai alasan, antara lain (i) RTMP protokol yang sudah kuno, (ii) tidak di support oleh iOS (Apple), (iii) sering terkendala dengan firewall karena tidak menggunakan port 80, baca disini.

Referensi:
https://www.youtube.com/watch?v=n-83P2InwhU&list=WL&index=22
https://www.youtube.com/watch?v=IeAMsyyGja8
https://www.youtube.com/watch?v=eg69VD2VUo8&index=2&list=PLbr4egwqAlwB4vEbSwFuo0-FcSWnTtbI7

No comments: