Cài đặt Nginx RTMP Streaming Và Cấu hình Nginx-RTMP, FFmpeg và HLS

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:

cai-dat-nginx-rtmp-streaming

– 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: onet (đ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:

Để lại một trả lời

Địa chỉ email của bạn sẽ không được công bố.