Hướng dẫn cài đặt Nginx-RTMP trên centos 7

RTMP (Real Time Messaging Protocol) là giao thức không công khai do Adobe phát triển và giữ bản quyền, được thiết kế cho ứng dụng thời gian thực, cho phép ứng dụng sử dùng video và âm thanh với tốc độ nhanh, hạn chế bị giật hình hoặc méo tiếng.

Sau đâu tôi sẽ hướng dẫn các bạn về cách cài đặt RTMP với nginx

I.Chuẩn bị 

Cần có 1 vps .Link thuê vps https://maxserver.com/

Cài đặt các kho cần thiết , link tham khảo Click here

Mở port 80

#  firewall-cmd --permanent --zone=public --add-port=80/tcp
#  firewall-cmd --reload

II.Tiến hành

1.Cài đặt một số công cụ cần thiết  

# yum install unzip -y
# yum -y install gcc gcc-c++ make zlib-devel pcre-devel openssl-devel git

Tạo một thư mục chứ các file download về

# mkdir /download
# cd /download/

2.Cài đặt Nginx và Nginx-RTMP

Ta download các code nginx và nginx-RTMP về

# wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
# wget http://nginx.org/download/nginx-1.9.8.tar.gz

Ta giải nén chúng ra 

# tar -xvf nginx-1.9.8.tar.gz
# unzip master.zip

Truy cập vào thư mục nginx vừa giải nén được

# cd nginx-1.9.8

Chạy lênh sau để thêm module Nginx-RTMP

# ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master

Cài đặt bằng lệnh sau 

#  make
#  make install

Sau khi cài đặt xong khi bạn chạy lệnh # service nginx restar nó sẽ xuất hiện lỗi như sau

[root@maxserver206 nginx-1.9.8]# service nginx restart
Redirecting to /bin/systemctl restart  nginx.service
Failed to restart nginx.service: Unit nginx.service failed to load: No such file or directory.

Để sửa lỗi này chúng ta phải cấu hình Nginx init script

Thêm nginx ’user’

# useradd -r nginx

Tạo 1 file nginx trong init.d 

# nano /etc/init.d/nginx

Chép nội dung sau vào 

#!/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:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid
 
# 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/local/nginx/sbin/nginx"
prog=$(basename $nginx)
 
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
 
lockfile=/var/lock/subsys/nginx
 
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

 

Phân quyền thực thi cho tập tin nginx

# chmod +x /etc/init.d/nginx

Ta chạy lại lệnh 

# service nginx restart

[root@vietduc206 nginx-1.9.8]# service nginx restart
Reloading systemd:                                         [  OK  ]
Restarting nginx (via systemctl):                          [  OK  ]

Để nginx khởi động cùng hệ thống

# chkconfig nginx on

3.Cài đặt FFmpeg

Nux Dextop là một kho lưu trữ RPM của bên thứ ba

Là bước đầu tiên, nhập khóa GPG chính thức của kho Nux Dextop:

#  rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro

Cài đặt kho  Nux Dextop trên centos 7 với lệnh rpm như sau : 

#  rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm

Theo tác giả, Nux Dextop được biết là gây xung đột với các hợp đồng mua RPM của bên thứ ba khác như Repoforge và ATrpms . Vì vậy, nếu bạn kích hoạt bất cứ Repos bên thứ ba nào khác hơn EPEL ,thì nên tắt kho Nux Dextop theo mạc định 

#  nano /etc/yum.repos.d/nux-dextop.repo

Tìm dòng 

enabled = 1

Thay số 1 thành số 0

enabled = 0

Sau đó, bất cứ khi nào bạn muốn cài đặt một gói phần mềm từ Nux Dextop repo, cho phép một cách rõ ràng repo như sau.

# yum --enablerepo=nux-dextop install <tên package>

Chạy lệnh sau để cài đặt ffmpeg

#  yum --enablerepo=nux-dextop install ffmpeg


4.Cấu hình Nginx-RTMP và FFmpeg

Mở file cấu hình của ngix 

# nano /usr/local/nginx/conf/nginx.conf

Thêm nội dung sau vào

}
rtmp {
    server {
            listen 1935;
            chunk_size 4096;

            application live {
                    live on;
                    record off;
                    exec ffmpeg -i rtmp://localhost/live/$name -threads 1 -c:v libx264 -profile:v baseline -b:v 350K -s 640x360 -f flv -c:a aac -ac 1 -strict -2 -b:a 56k rtmp://localhost/live360p/$name;
            }
            application live360p {
                    live on;
                    record off;
        }
    }
}

Khởi động lại dịch vụ nginx

# service nginx restart