Hướng dẫn cài đặt Nginx RTMP Streaming

Ngày này nhu cầu sử dụng các dịch vụ streamming trực tuyến như Twitch.tv hoặc Ustream là rất lớn, để truyền tải video tới người xem. Nhưng đôi khi bạn muốn kiểm soát kênh stream của mình hoặc muốn người khác có thể phát trực tuyến với bạn. Hướng dẫn sau sẽ trình bày các vấn đề cơ bản về việc thiết lập máy chủ RTMP cho giải pháp streamming.

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

– Cài đặt các gói thư viện cần thiết để biên dịch Nginx và Nginx-RTMP từ source

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

– Thư mục chứa source code mặc định là /usr/local/src

cd /usr/local/src

– Tải về mã nguồn Nginx và Nginx-RTMP

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

– Giải nén mã nguồn vừa tải về

tar zxf nginx-1.10.1.tar.gz
unzip master

– Chuyển vào thư mục chứa mã nguồn Nginx và tiến hành biên dịch

cd nginx-1.10.1

– Tạo Makefile để Nginx sẽ được biên dịch với module Nginx-RTMP

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

– Tiến hành biên dịch và cài đặt

make
make install

– Tạo Nginx init scripts

wget https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/# -O /etc/init.d/nginx
chmod +x /etc/init.d/nginx

– Khởi động Nginx

service nginx start

2. Cài đặt FFmpeg

– Tạo file repo /etc/yum.repos.d/dag.repo

vi /etc/yum.repos.d/dag.repo

– Thêm nội dung sau vào file sau đó lưu lại

[dag]

name=DAG RPM Repository

baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag

gpgcheck=1

enabled=1

– Để sử dụng DAG repository với công cụ yum, cần phải thêm DAG’s GPG key. Sử dụng lệnh sau để thêm GPG key cho DAG.

rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt

– Cài đặt FFmpeg

yum install ffmpeg ffmpeg-devel ffmpeg-libpostproc

3. Cấu hình Nginx-RTMP, FFmpeg và HLS

– Tạo các thư mục để chứa dữ liệu streaming và recording.

mkdir /home/HLS

mkdir /home/HLS/live              # Chứa dữ liệu HLS streaming cho desktop

mkdir /home/HLS/mobile            # Chứa dữ liệu HLS streaming cho mobile

mkdir /home/video_recordings      # Chứa video ghi hình

– Mở port trên firewall cho Nginx và RTMP

+ Mở file cấu hình iptables

vi /etc/sysconfig/iptables

+ Thêm nội dung sau vào file:

-A INPUT M state --state NEW m TCP P dport 80 J ACCEPT

-A INPUT M state --state NEW m TCP P dport 1935 J ACCEPT

+ Lưu lại. Dùng lệnh sau để nạp lại rule

service iptables save

3.1 Cấu hình Streaming Video

– Mở file cấu hình Nginx

vi /usr/local/nginx/conf/nginx.conf

– Thêm vào nội dung sau:

rtmp {

server {

listen 1935;                            # Port để Nginx chấp nhận kết nối RTMP

chunk_size 4096;                        # Kích thước chunk tối đa để ghép kênh stream

allow play all;

# Tạo một luồng HLS streaming là “live” dành cho desktop

application live {

allow play all;                         # Cho phép khách xem video

live on;                                # Bật luồng streaming “live”

record all;                             # Bật ghi hình video và audio streaming

record_path /home/video_recordings;     # Thư mục chứa các file ghi hình flv

record_unique on;   # Khi bật chế độ này sẽ thêm thời gian vào tên các file ghi hình

hls on;                                 # Bật HLS

hls_nested on;                          # Bật chế độ nested. Ở chế độ này một thư mục con sẽ được tạo ra cho mỗi luồng stream. Các HLS playlist và fragment sẽ được tạo ra trong thư mục con đó

hls_path /home/HLS/live;                # Thiết lập thư mục chứa HLS playlist và fragment

hls_fragment 10s                        # Thiết lập chiều dài HLS fragment

}

# Tạo một luồng HLS streaming là "mobile" dành cho mobile 

application mobile {

allow play all;                        # Cho phép chơi video

live on;                               # Bật chế độ live

hls on;                                # Bật chế độ HLS

hls_nested on;                      

hls_path /home/HLS/mobile;

hls_fragment 10s;

}

# Cho phép xem lại các video live streams đã được ghi hình bằng URL: rtmp:// 61.14.232.64:1935/vod/filename.flv

application vod {

play /home/video_recordings;

}

}

}

server {

listen 80;

server_name 61.14.232.64;

# Tạo một đường dẫn http cho HLS Streaming Video theo URL: "http:// 61.14.232.64/live/123host/index.m3u8"  

location /live {

types {

application/vnd.apple.mpegurl m3u8;

}

alias /home/HLS/live;

add_header Cache-Control no-cache;

}

location /mobile {

types {

application/vnd.apple.mpegurl m3u8;

}

alias /home/HLS/mobile;

add_header Cache-Control no-cache;

}   

location /stats {

stub_status;

}

location / {

root   html;

index  index.html index.htm;

}   

}

}

3.2 Cấu hình Encoding Video

– Mở file cấu hình nginx

vi /etc/nginx/nginx.conf

– Sử dụng module FFmpeg để encoding các live stream video về định dạng .flv và lưu ở thư mục /home/video_recordings. Ta có thể tùy chỉnh các thông số như bitrate video, bitrate audio và độ phân giải.

Định dạng như sau: rtmp://ip-server:port/application-name/stream-name

  • -i: địa chỉ ứng dụng streaming.
  • -b: v bitrate video
  • -c: v bộ mã hóa hình ảnh
  • -s: độ phân giải
  • -f: định dạng xuất
  • -bufsize: kích thước bộ đệm

– Thêm vào nội dung sau:

exec ffmpeg -i rtmp://61.14.232.64:1935/$app/$name -acodec copy -c:v libx264 -preset veryfast -profile:v baseline -vsync cfr -s 480x360 -b:v 400k maxrate 400k -bufsize 400k -threads 0 -r 30 -f flv rtmp://61.14.232.64:1935/mobile/$;

– Cuối cùng khởi động lại Nginx

service nginx restart

Kiểm tra xem nginx và module rtmp chạy chưa

netstat -nltp

4. Dùng OpenBroadcaster để publish live video

– Tải về OpenBroadcaster tại địa chỉ https://obsproject.com/.

– Sau khi tải về và tiến hành cài đặt. Mở OpenBroadcaster lên giao diện như sau:

– Chọn Setting để cài đặt. Chọn tab Broadcast Settings:

– Điền thông tin vào như trong ảnh:

            + URL: rtpm://61.14.232.64/live

            + Stream Key: 123host (điền gì cũng được)

– Quay lại màn hính chính ứng dụng trong khung Scenes tiến hàng tạo một màn hình bằng chuột phải lên đó chọn Add Screne và đặt tên cho nó:

– Tiếp theo trong khung Sources, chuột phải lên đó và chọn Add để thêm nguồn quay:

            + Quay của sổ

            + Quay màn hình

            + …

– Sau đó nhấn Start Streaming để bắt đầu stream:

Rate This Article

3 Comments

  1. jack

    Khó hiểu quá ad hướng dẫn bằng video được ko? 😀

  2. Phong

    mình có thể hỏi ad 1 xíu không ?
    có cách nào để url lúc stream là rtmp://domain:1935/app/key không ạ?

Leave A Comment?