Nginx ile canlı yayın
Bu makalede Nginx ile canlı yayın nasıl yapılır sizlere anlatmaya çalışacağım.
Nginx ile canlı yayın yapabilmek için RTMP modülüne ihtiyacımız vardır. RTMP modülü Nginx'in çekirdeğinde mevcut değildir, ayrıca eklenmesi gereken bir modüldür.
Kurulum CentOS 7.x için geçerlidir. 6.x sürümleri için de sorun çıkacağını düşünmüyorum. Hali hazırda bir 6.x sunucuya sahipseniz deneyebilirsiniz.
Sunucuda sudo yetkisine sahip bir kullanıcı veya root ile oturum açtığınızı varsayıyorum.
Kuruluma başlamadan önce nginx ve rtmp modülünü sunucumuza indirelim.
RTMP modülü için en son paylaşılan kararlı sürüm(v1.1.10).
sudo wget https://github.com/arut/nginx-rtmp-module/archive/v1.1.10.tar.gz
Güncel RTMP modülünün uyumlu çalıştığı nginx sürümü(1.11.5)
sudo wget http://nginx.org/download/nginx-1.11.5.tar.gz
Sunucunuzda wget kurulu değil ise sudo yum -y install wget
komutu ile kurabilirsiniz.
Eğer dosyaları indirdiyseniz tar
komutu ile açalım.
sudo tar xpfz v1.1.10.tar.gz
sudo tar xpfz nginx-1.11.5.tar.gz
Kontrol etmek için ls -l
komutu ile bulunduğunuz dizindeki dosyaların listesini görebilirsiniz.
[[email protected] ~]# ls -l
total 1452
drwxr-xr-x. 8 1001 1001 4096 Oct 11 18:03 nginx-1.11.5
-rw-r--r--. 1 root root 956517 Oct 11 18:08 nginx-1.11.5.tar.gz
drwxrwxr-x. 6 root root 4096 Oct 7 13:15 nginx-rtmp-module-1.1.10
-rw-r--r--. 1 root root 519877 Dec 30 20:59 v1.1.10.tar.gz
Sıra geldi Nginx'i RTMP
modülü ile birlikte derleme kısmına fakat derleme yapabilmek için önce gerekli paketleri yükleyelim.
sudo yum -y install gcc gcc-c++ make zlib-devel pcre-devel openssl-devel
Daha sonra nginx-1.11.5
dizinine geçiş yapıyoruz.
cd nginx-1.11.5
Bu kısımda Nginx yapılandırma ayarlarını belirliyoruz. --add-module=../nginx-rtmp-module-1.1.10
, --with-http_ssl_module
bu iki parametre minumum kurulum için gereklidir.
./configure \
--user=nginx \
--group=nginx \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-pcre \
--with-file-aio \
--with-http_realip_module \
--without-http_scgi_module \
--without-http_uwsgi_module \
--without-http_fastcgi_module \
--add-module=../nginx-rtmp-module-1.1.10
Aşağıdaki gibi bir çıktı alıyorsanız konfigürasyon tanımlanmış demektir.
Configuration summary
+ using system PCRE library
+ using system OpenSSL library
+ using system zlib library
nginx path prefix: "/etc/nginx"
nginx binary file: "/usr/sbin/nginx"
nginx modules path: "/etc/nginx/modules"
nginx configuration prefix: "/etc/nginx"
nginx configuration file: "/etc/nginx/nginx.conf"
nginx pid file: "/var/run/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
Derlemeyi başlatalım.
sudo make
sudo make install
Nginx için nginx
adında bir kullanıcı oluşturup, ssh ile oturum açmasını engelliyoruz.
sudo useradd -r nginx
sudo usermod -s /usr/sbin/nologin nginx
Nginx'i başlatmak ve durdurmak için aşağıdaki dosyayı nano
ile oluşturup içine aşağıdaki satırlarını ekliyoruz.
sudo nano /etc/init.d/nginx
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# pidfile: /var/run/nginx.pid
# user: nginx
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
lockfile=/var/run/nginx.lock
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
Nginx dosyasını çalıştırılabilir yapıyoruz.
sudo chmod +x /etc/init.d/nginx
Sunucu başladığında Nginx'in otomatik olarak başlaması için aşağıki komutları kullanıyoruz.
sudo chkconfig --add nginx
sudo chkconfig --level 345 nginx on
Aşağıdaki komutu kullanarak Nginx'i başlatabilirsiniz.
sudo service nginx start
Nginx'in çalıştığını kontrol etmek için ise aşağıdaki komutu kullanabilirsiniz.
sudo service nginx status
Ekran çıktısında aşağıdaki ifadeyi görüyorsanız Nginx kurulmuş ve başarılı bir şekilde çalıyor demektir.
Active: active (running) since Fri 2016-12-30 21:33:28 EET; 15s ago
Ayrıca IP
adresini tarayıcınıza yazıp Nginx'in varsayılan sayfasını görebiliyorsanız Nginx'in çalıştığını bu şekildede anlayabilirsiniz.
IP'yi yazdığınızda karşınıza birşey gelmedi mi ozaman firewall'dan 80 portunu açmayı deneyin, bunun için aşağıdaki komutu kullanabilirsiniz.
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall'u yeniden başlatalım.
service firewalld reload
Şimdi ip adresinize tarayıcınızdan ulaşabilirsiniz.
Nginx, RTMP modülü ile kurulmuş durumdadır.
Şimdi sıra geldi canlı yayın için kullanıcağımız kanalı tanımlamaya. Aşağıdaki ifadeyi /etc/nginx/nginx.conf
dosyasını açıp, en alt kısmına ekliyoruz.
nano /etc/nginx/nginx.conf
rtmp {
server {
listen 1935;
application mytv {
live on;
}
}
}
Ekledikten sonra Nginx'te söz dizimi hatası olup olmadığını aşağıdaki komutla kontrol edebilirsiniz.
[[email protected] ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Hata yok ise Nginx'i yeniden başlatabilirsiniz.
service nginx restart
Nginx'i yeniden başlattıktan sonra sıra geldi canlı yayını sunucuya göndermeye. Bunun için Flash Media Encodera veya canlı yayın gönderimi yapabileceğiniz bir programa ihtiyacımız var.
Flash Media Encoder'da aşağıdaki alanları doldurmamız gerekiyor.
FMS URL: rtmp://192.168.10.145:1935/mytv
BACKUP URL:
Stream: canli1
Stream kısmına istediğiniz adı yazabilirsiniz ben canli1
yaptım.
Bu kısımları doldurduktan sonra connect demeniz gerekiyor.
Connect dediğinizde sol altta Connected
ifadesini görüyorsanız canlı yayını yapacağınız bilgisayar ile sunucu arasında RTMP bağlantısı kurulmuş demektir.
Bağlantı kurulamadı ise firewall'dan rtmp için kullandığımız portu açıyoruz. 1935
genelde kullanılan RTMP portudur. Bende bunu kullandım. Siz sunucuda kullanmadığınız bir portu da kullanabilirsiniz.
firewall-cmd --permanent --zone=public --add-port=1935/tcp
service firewalld reload
Artık RTMP desteği olan bir player bulup canlı yayını istediğiniz bir web sayfasında paylaşabilirsiniz.
Bu arada hem Nginx hemde nginx-rtmp-module açık kaynak kodludur. Herhangi bir bedel ödemen dilediğiniz gibi kullanabilirsiniz.
Sorularınız için yorum kısmını kullanabilirsiniz.
Başka bir makalede görüşmek üzere.
Kaynak:
Nginx-rtmp Modülü https://github.com/arut/nginx-rtmp-module ↩
Nginx http://nginx.org/ ↩