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.
Contents
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:
Khó hiểu quá ad hướng dẫn bằng video được ko? 😀
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 ạ?
hay, tks!