RTMP (Real Time Messaging Protocol) adalah protokol berkinerja tinggi untuk transmisi data, audio, dan video melalui internet antara teknologi platform berbasis flash. Awalnya dikembangkan oleh Macromedia, dan sekarang dimiliki oleh Adobe.
Nginx RTMP adalah streamer media berbasis nginx dengan streaming langsung RTMP, HLS, dan MPEG-DASH. Modul Nginx RTMP memiliki banyak fitur, termasuk dukungan H264/AAC, dukungan panggilan balik HTTP, modul kontrol HTTP untuk merekam audio/video, dll.
Dalam tutorial ini, saya akan menunjukkan cara menginstal dan mengkonfigurasi server web Nginx dengan modul RTMP. Kami akan menggunakan server CentOS 7 terbaru, dan panduan ini akan mencakup konfigurasi modul nginx dan rtmp serta membuat streaming langsung RTMP dan video sesuai permintaan.
Prasyarat
- Server CentOS 7
- Hak istimewa root
Apa yang akan kita lakukan?
- Instal Dependensi
- Unduh Nginx dengan Paket Tambahan dan Modul RTMP
- Kompilasi Nginx dan Instal dari Sumber
- Konfigurasi Nginx sebagai Layanan
- Konfigurasi Modul Nginx RTMP
- Siapkan Streaming Langsung RTMP Pertama
- Pengujian
Langkah 1 - Instal Dependensi
Dalam tutorial ini, kita akan membangun server web Nginx dari sumber. Kita perlu menginstal semua dependensi paket yang diperlukan, termasuk alat pengembangan, repositori EPEL, dan paket lainnya.
Instal 'Alat Pengembangan' CentOS.
sudo yum -y groupinstall 'Development Tools'
Tambahkan repositori EPEL.
sudo yum -y install epel-release
Instal dependensi Nginx.
sudo yum install -y wget git unzip perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel pcre-devel GeoIP GeoIP-devel
Tunggu hingga semua paket terinstal.
Langkah 2 - Unduh Nginx dengan Paket Tambahan dan Modul RTMP
Pada langkah ini, kita akan mengunduh kode sumber nginx dengan dependensi tambahan termasuk pcre, zlib, dan OpenSSL.
Buka direktori '/usr/local/src'.
cd /usr/local/src
Unduh Nginx 1.14.0 dan ekstrak.
wget https://nginx.org/download/nginx-1.14.0.tar.gz
tar -xzvf nginx-1.14.0.tar.gz
Unduh paket pcre dan ekstrak.
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.zip
unzip pcre-8.42.zip
Unduh paket zlib dan ekstrak.
wget https://www.zlib.net/zlib-1.2.11.tar.gz
tar -xzvf zlib-1.2.11.tar.gz
Unduh paket OpenSSL dan ekstrak.
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
tar -xzvf openssl-1.1.0h.tar.gz
Selanjutnya, kloning kode sumber Modul Nginx RTMP menggunakan perintah git.
git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git
Dan hapus semua file tar.gz dan .zip terkompresi.
rm -f *.tar.gz *.zip
Berikut adalah detail direktori yang kami miliki.
ls -lah
Dan kami siap untuk mengkompilasi dan menginstal.
Langkah 3 - Kompilasi Nginx dan Instal dari Sumber
Buka direktori 'nginx-1.14.0'.
cd nginx-1.14.0/
Konfigurasi nginx 1.14.0 menggunakan parameter di bawah ini.
./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=nginx \
--group=nginx \
--build=CentOS \
--builddir=nginx-1.14.0 \
--with-select_module \
--with-poll_module \
--with-threads \
--with-file-aio \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic \
--with-http_geoip_module=dynamic \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--with-mail=dynamic \
--with-mail_ssl_module \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream_geoip_module=dynamic \
--with-stream_ssl_preread_module \
--with-compat \
--with-pcre=../pcre-8.42 \
--with-pcre-jit \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.0h \
--with-openssl-opt=no-nextprotoneg \
--add-module=../nginx-rtmp-module \
--with-debug
Kompilasi dan instal Nginx dengan modul RTMP dengan menjalankan perintah berikut.
sudo make
sudo make install
Ketika instalasi selesai, kita perlu membuat direktori modul symlink baru, membuat pengguna dan grup nginx baru, dan membuat direktori cache nginx baru.
Buat modul symlink nginx ke direktori konfigurasi '/etc/nginx'.
sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules
Buat pengguna dan grup sistem 'nginx' baru.
sudo useradd -r -d /var/cache/nginx/ -s /sbin/nologin -U nginx
Sekarang buat direktori cache Nginx baru '/var/cache/nginx' dan ubah pemilik direktori menjadi pengguna dan grup 'nginx'.
mkdir -p /var/cache/nginx/
chown -R nginx:nginx /var/cache/nginx/
Uji konfigurasi nginx dan versi nginx yang diinstal.
nginx -t
nginx -V
Dan berikut adalah hasilnya.
Server web Nginx telah diinstal pada CentOS 7 dengan Modul RTMP diaktifkan.
Langkah 4 - Konfigurasi Nginx sebagai Layanan
Dalam tutorial ini, kita akan menjalankan nginx sebagai layanan dan kita perlu membuat file layanan nginx baru ke direktori layanan systemd.
Buka direktori '/lib/systemd/system' dan buat file 'nginx.service' baru menggunakan vim.
cd /lib/systemd/system/
vim nginx.service
rekatkan konfigurasi di bawah ini.
[Unit] Description=nginx - high performance web server Documentation=https://nginx.org/en/docs/ After=network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/var/run/nginx.pid ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID [Install] WantedBy=multi-user.target
Simpan dan keluar.
Sekarang muat ulang sistem systemd.
systemctl daemon-reload
Mulai layanan nginx dan aktifkan untuk diluncurkan setiap kali sistem boot.
systemctl start nginx
systemctl enable nginx
Server web Nginx aktif dan berjalan sebagai layanan pada sistem CentOS 7.
Langkah 5 - Konfigurasi Modul Nginx RTMP
Pada langkah ini, kita akan membuat konfigurasi Nginx kustom baru untuk modul RTMP.
Buka direktori konfigurasi '/etc/nginx' dan buat cadangan file 'nginx.conf' asli.
cd /etc/nginx/
mv nginx.conf nginx.conf.asli
Sekarang buat konfigurasi khusus 'nginx.conf'.
vim nginx.conf
Tempel konfigurasi Nginx RTMP di bawah.
worker_processes auto; events { worker_connections 1024; } # RTMP configuration rtmp { server { listen 1935; # Listen on standard RTMP port chunk_size 4000; # Define the Application application show { live on; # Turn on HLS hls on; hls_path /mnt/hls/; hls_fragment 3; hls_playlist_length 60; # disable consuming the stream from nginx as rtmp deny play all; } } } http { sendfile off; tcp_nopush on; aio on; directio 512; default_type application/octet-stream; server { listen 8080; location / { # Disable cache add_header 'Cache-Control' 'no-cache'; # CORS setup add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Expose-Headers' 'Content-Length'; # allow CORS preflight requests if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain charset=UTF-8'; add_header 'Content-Length' 0; return 204; } types { application/dash+xml mpd; application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /mnt/; } } }
Simpan dan keluar.
Selanjutnya, kita perlu membuat direktori baru untuk konfigurasi HLS dan kita telah menetapkan direktori root web ada di direktori '/mnt'.
Buat direktori 'hls' di bawah direktori '/mnt' dan ubah pemilik direktori menjadi pengguna dan grup nginx.
mkdir -p /mnt/hls
chown -R nginx:nginx /mnt/hls
Uji konfigurasi dan mulai ulang layanan nginx.
nginx -t
systemctl restart nginx
Langkah 6 - Siapkan Streaming Langsung RTMP Pertama
Dalam tutorial ini, kita akan membuat video streaming RTMP baru sesuai permintaan menggunakan video mp4 di server, dan membuat streaming RTMP langsung baru yang akan disiarkan dari komputer lokal menggunakan perangkat lunak OBS.
Buka direktori konfigurasi '/etc/nginx' dan edit file 'nginx.conf'.
cd /etc/nginx/
vim nginx.conf
Tempelkan konfigurasi di bawah ini ke dalam tanda kurung 'rtmp { ... }'.
# RTMP video on demand for mp4 files application vod { play /mnt/mp4s; } # RTMP stream using OBS application stream { live on; }
Simpan dan keluar.
Sekarang buat direktori baru 'mp4s' untuk menyimpan semua video vod, dan ubah pemiliknya menjadi grup pengguna nginx.
mkdir -p /mnt/mp4s
chown -R nginx:nginx /mnt/mp4s
Uji konfigurasi nginx dan pastikan tidak ada kesalahan, lalu restart layanan nginx.
nginx -t
systemctl restart nginx
Konfigurasi Nginx untuk streaming langsung RTMP dan streaming vod telah selesai.
Langkah 7 - Pengujian
Uji streaming langsung RTMP dan streaming vod menggunakan pemutar VLC.
Aliran Video Sesuai Permintaan
Buka aplikasi VLC di komputer Anda.
Klik menu 'File' pilih opsi 'Open Network'.
Sekarang ketik URL RTMP untuk aliran vod kami.
rtmp://192.168.1.10:1935/vod/file.mp4
Klik tombol 'Buka'.
Dan berikut adalah hasil streaming videonya.
Live Stream menggunakan OBS (Open Broadcaster Software)
Dalam tutorial ini, kami akan menguji streaming langsung RTMP menggunakan perangkat lunak obs, dan pemutar vlc.
Kami hanya akan mengalirkan jendela terminal menggunakan perangkat lunak penyiar terbuka, dan mencoba menonton streaming langsung RTMP menggunakan pemutar VLC.
Berikut ini adalah konfigurasi saya untuk perangkat lunak obs.
Buka aplikasi VLC di komputer Anda.
Klik menu 'File', pilih opsi 'Open Network'.
Sekarang ketik URL RTMP untuk streaming langsung kami.
rtmp://192.168.1.10:1935/stream/
Klik tombol 'Buka'.
Dan berikut adalah hasil live streaming menggunakan open broadcaster melalui modul nginx rtmp.
Instalasi server web Nginx dengan modul RTMP di CentOS 7 telah berhasil diselesaikan.