Friday, March 3, 2017

Membangun Server RTMP Streaming dengan NGINX di Ubuntu Server 16.04

  2 comments
Livestream Illustration | Source Image: Youtube - How to Code ?
Assalamu'alaikum Wr. Wb.
Di artikel ini saya akan menuliskan bagaimana membangun Server untuk keperluan Streaming dengan Protokol RTMP.

a. Pengertian
Real-Time Messaging Protocol (RTMP) merupakan sebuah protokol TCP yang dapat digunakan untuk melakukan Streaming Audio, Video, maupun Data antara Flash dan Server RTMP.

b. Latar Belakang
Latar belakang dari dilakukannya konfigurasi ini adalah karena saya ingin membuat Website dan Server Video Streaming sendiri yang menyerupai Server Live Streaming milik Youtube dengan memanfaatkan aplikasi-aplikasi Open Source yang ada.

c. Maksud dan Tujuan
Tujuan dari artikel ini adalah untuk membangun Server Streaming yang akan digunakan untuk keperluan Streaming Lokal secara bersama-sama oleh banyak orang.

d. Waktu Pengerjaan
Waktu yang diperlukan untuk membuat Server Streaming ini kurang lebih 20-30 Menit.

e. Alat dan Bahan
- PC
- 1 Server untuk Streaming dengan OS Ubuntu Server 16.04
- Webserver NGINX dengan Modul RTMP
- OBS Studio
- VLC Player

f. Langkah Pengerjaan
Saya mengasumsikan Server sudah dalam posisi terinstall Ubuntu Server.
1. Install NGINX dengan Modul RTMP
Untuk menginstall NGINX dengan modul ini, teman-teman mempunyai dua opsi.

- Build NGINX dari Source Code
Untuk cara ini saya tidak mengcovernya disini, melainkan teman-teman dapat membacanya dari blog Lance Cleveland mengenai Configuring VirtualBox As A nginx RTMP Server.

- Install NGINX dari Paket yang sudah pre-compilled dengan Modul RTMP
Saya sudah siapkan Paket Webserver NGINX yang sudah saya build dan paketkan ulang dengan modul RTMP Streaming, Teman-teman dapat mengunduhnya melalui Google Drive saya.

Untuk cara instalasi, silahkan teman-teman unduh dan ekstrak file tersebut. Kemudian buka terminal lalu masukkan perintah berikut:
;; Instalasi Dependensi
~/home/fajar/Downloads/nginx-streampack# apt-get install fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libhiredis0.13 libjbig0 libjpeg-turbo8 libjpeg8 libluajit-5.1-2 libluajit-5.1-common libtiff5 libvpx3 libxpm4 libxslt1.1
;; Install NGINX

~/home/fajar/Downloads/nginx-streampack# dpkg -i nginx-common*.deb libnginx*.deb nginx-full*.deb
Apabila sudah terinstall, cobalah untuk membuka IP Server teman-teman. Pastikan Webserver berjalan ditandai dengan munculnya Page "Welcome to nginx!" ketika membuka IP Server.

2. Konfigurasi NGINX sebagai RTMP Stream Server
Untuk mengkonfigurasi NGINX agar menjadi Server RTMP Stream sebenarnya cukup mudah, kita hanya menambahkan sedikit konfigurasi pada /etc/nginx/nginx.conf.
~# nano /etc/nginx/nginx.conf
Kita akan konfigurasi RTMP Stream Server ini dengan mode Multi-Worker Streaming, yaitu Server Streaming yang memungkinkan banyak orang untuk mengirim Streaming ke Server dan banyak orang yang memplayback Streaming-streaming tersebut.

Tambahkan baris berikut dibaris paling akhir didalam file konfigurasi /etc/nginx/nginx.conf.
rtmp_auto_push on;
rtmp {
server {
listen 1935;
application stream {
live on;
record off;
}
}
}
Nama Aplikasi stream diatas bukanlah konfigurasi dari sistem, sehingga teman-teman dapat menggantinya sesuai selera.

3. Simpan Konfigurasi dan Restart NGINX
Silahkan simpan konfigurasi tersebut kemudian kita restart NGINX

4. Install OBS Studio / Open Broadcaster Software di sisi Client
Kita akan menggunakan OBS Studio untuk melakukan Live Streaming ke Server yang kita buat.
~# add-apt-repository ppa:obsproject/obs-studio
~# apt update && install ffmpeg obs-studio -y
5. Test Live Stream!
Setelah diinstall, silahkan buka OBS Studio. Kemudian kita konfigurasi Server Streamingnya. Klik Menu Settings -> Stream.

Stream Type : Custom Streaming Server
URL : rtmp://IPServer/stream
Stream Key : Masukkan ID Streaming, Bisa isikan Bebas.
Jika sudah klik OK untuk menyimpan pengaturan.
Untuk memulai Streaming teman-teman dapat mengklik Start Streaming. Jika tidak ada Error maka akan muncul statistik Upload Speed dan Dropped Frames dibagian Statusbar.

Untuk menampilkan Media Foto, teman-teman bisa mengklik Button + pada Bagian Source lalu pilih Image / Image Slide Show. Apabila ingin memasukkan Media seperti Audio atau Video teman-teman bisa memilih Media Source. Untuk yang lain kalian bisa mencobanya sendiri :)
Kemudian di sisi Client yang melakukan Playback Streaming atau sebagai Viewer, kita akan menggunakan VLC Player. Silahkan buka VLC Player kemudian menuju Menu File -> Open Network Stream.

Masukkan URL Streaming beserta Stream ID nya dengan format seperti ini pada Network Protocol.
rtmp://IPServer/<appname>/<idstream>
Jika sudah teman-teman bisa klik Play. Tunggu beberapa saat untuk VLC agar terkoneksi ke Server Streamingnya.
VLC Playback di PC yang sama.
VLC Playback di PC Teman.
Teman-teman pun dapat melakukan Streaming secara bersamaan di Server tersebut dengan Stream ID yang berbeda-beda dengan penonton yang berbeda-beda pula.

g. Referensi
Lance Cleveland - Configuring VirtualBox As A nginx RTMP Server
- OBS Project Forum - How to set up your own private RTMP server using nginx
- GitHub - NGINX RTMP Module
- GitHub - NGINX Push Stream

h. Kesimpulan
Webserver NGINX tidak hanya berfungsi sebagai Webserver, Load Balancer, ataupun Reverse Proxy. Namun juga dapat digunakan sebagai Server RTMP Streaming dengan menambahkan Modul Khusus RTMP Stream. Untuk konfigurasi yang lebih lanjut pun kita dapat me-relay Streaming tersebut ke Server Streaming yang lain seperti Twitch, Youtube, dsb. Bahkan bisa sekaligus merekamnya.

Cukup sekian yang dapat saya tulis, semoga bermanfaat bagi teman-teman semua!
Dan seperti biasa Terima Kasih!
Wassalamu'alaikum Wr. Wb.

2 comments :

  1. bisakah saya mendapatkan akses NGINX dari Paket yang sudah pre-compilled dengan Modul RTMP milik anda di google drive? link anda sudah tidak bisa diakses lagi. terima kasih

    ReplyDelete
    Replies
    1. Sudah saya update linknya mas.
      Kalo dicoba di distro berbasis Ubuntu 17.04+ mungkin ada sedikit masalah dependensi, karna saya compile nya di Ubuntu 16.04 otomatis versi paketnya lebih lawas.

      Delete