30/12/2016 · nginx rtmp livestream canli yayin

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: