Stream — Trình Phát Cho Giao Thức Rtmp : //? Hướng Dẫn Streaming Media Với Nginx Và Nginx
Streaming Media với Nginx và nginx-rtmp moduleTable of contents3. VOD qua RTMP4. VOD qua HLS5. Cấu hình Live Streaming=============================================================================
Content
1. Về nginx-rtmp module
Nginx-rtmp là module mở rộng, mà kết hợp với Nginx để cho phép xây dựng máy chủ streaming media.
Đang xem: Giao thức rtmp
Một số tính năng mà nginx-rtmp hỗ trợ:
RTMP/HLS/MPEG-DASH live streaming
RTMP Video on demand FLV/MP4, phát từ local file hoặc qua HTTP
Stream relay support for distributed streaming: push & pull models
Ghi streams vào nhiều tệp FLV
Hỗ trợ H264/AAC
Transcode trực tuyến với FFmpeg
HTTP callbacks (publish/play/record/update etc)
Module điều khiển HTTP để recording audio/video and dropping clients
Kỹ thuật buffer tiên tiến để giữ cho bộ nhớ được cấp ở mức thấp nhất mà streaming vẫn nhanh.
Kết hợp được với các ứng dụng như Wirecast, FMS, Wowza, JWPlayer, FlowPlayer, StrobeMediaPlayback, ffmpeg, avconv, rtmpdump, flvstreamer, ..
Thống kê stream với định dạng XML/XSL
Linux/FreeBSD/MacOS/Windows
2. Cài đặt Nginx với module nginx-rtmp
Step1: Download & unpack latest stable nginx & nginx-rtmp version
cd /optsudo git clone git://sentory.vn/arut/nginx-rtmp-module.gitsudo wget http://nginx.org/download/nginx-1.14.1.tar.gzsudo tar xzf nginx-1.14.1.tar.gzmv nginx-1.14.1 nginxStep2: Build nginx với nginx-rtmp
sudo ./configure –prefix=/etc/nginx –pid-path=/var/run/nginx.pid –conf-path=/etc/nginx/nginx.conf –sbin-path=/usr/sbin/nginx –user=nginx –group=nginx –with-file-aio –with-http_ssl_module –add-module=nginx-rtmp-modulesudo makesudo make installStep3: Run Nginx với systemd
Create tệp /lib/systemd/system/nginx.service với nội dung sau:
Description=nginx – high performance web serverDocumentation=http://nginx.org/en/docs/After=network-online.target remote-fs.target nss-lookup.targetWants=network-online.target
3. VOD qua RTMP
Chúng ta sẽ cấu hình để cho phép các video player xem video qua giao thức RTMP.
3.1 Cấu hình Nginx
Step1: Tạo tệp tin cấu hình nginx với nội dung sau:
user nginx;worker_processes 1;pid /run/nginx.pid;user nginx;events { worker_connections 1024;}rtmp { server { listen 1935; chunk_size 4000; # video on demand for mp4 files application vod { play /var/mp4s; } }}http { access_log /var/log/nginx/access-streaming.log; error_log /var/log/nginx/error-streaming.log; server { listen 80; root /var/www/html; # RTMP statistics in XML location /stat { # Copy stat.xsl put to root directory rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } }}Thông tin cấu hình tệp cấu như sau:
Khối rtmp { }
listen port với 1935 (port default)
application với đường dẫn ảo là vod
Đường dẫn thư mục chứa các tệp video để phát là “/var/mp4s”.
Khi đó muốn sử dụng chúng ta truy cập kiểu như “rtmp://192.168.10.113:1935/vod/video-name.mp4”
Step2: Tạo thư mục chứa và copy tệp tin video
mkdir /var/mp4scd /var/mp4sChúng ta download hoặc copy một tin video vào thư mục /var/mp4s
3.2. Sử dụng Video Player để chạy video
Chúng ta có thể sử dụng một trình phát video có hỗ trợ giao thức rtmp để phát.
Xem thêm: ” Hippo Là Gì ? (Từ Điển Anh Nghĩa Của Từ Hippopotamus Trong Tiếng Việt
Ở đây, chúng ta có thể sử dụng VLC player
Mở player VLC → Nhấn Media → Chọn “Open Network Stream ..”. Sau đó vào thông tin đường dẫn tệp video vod với rtmp://192.168.10.113:1935/vod/vod.mp4
Cuối cùng nhấn Play để phát video.
4. VOD qua HLS
Chúng ta sẽ cấu hình để cho phép video player phát video qua giao thức HLS (Apple HTTP Live Streaming).
4.1 Cài đặt Ffmpeg
Sử dụng script Installing FFmpeg on Linux
Nếu chỉ sử dụng một thư viện có sẵn thì cài đặt đơn giản như sau trên CentOS
yum install ffmpeg ffmpeg-devel ffmpeg-libpostproc
Trong phần Giới thiệu FFmpeg, cũng đã giới thiệu và cách sử dụng cơ bản FFmpeg.
4.2 Convert tệp vod.mp4 sang HLS
Trước khi convert, chúng ta thực hiện copy/download tệp tin video lên server (ví dụ tệp tin là vod.mp4)
Sử dụng lệnh ffmpeg để convert vod.mp4 sang định dạng HLS (Apache HTTP Live Stream)
ffmpeg -i video.mp4 -profile:v baseline -level 3.0 -s 720×400 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls /tmp/index.m3u8
Trong đó:
vod.mp4 là tệp video đầu vào cần convert
index.m3u8 là tệp tin master đầu ra của HLS playlist
và một số tham số tùy chọn cho độ phân giải, thời gian phân đoạn, ..
4.3 Cấu hình nginx
Ở đây, Chúng ta sẽ cấu hình nginx làm web server, đồng thời cấu hình làm media server.
Xem thêm: Cách Nấu Mực Xào Chua Ngọt, Cách Làm Mực Xào Chua Ngọt Thơm Ngon
user nginx;worker_processes 1;error_log logs/rtmp_error.log debug;pid /var/run/nginx.pid;events { worker_connections 1024;}http { #serve the player for HLS server { listen 80; root /var/www/html; server_name localhost; location /hls { # CORS setup add_header “Access-Control-Allow-Origin” “*” always; add_header “Access-Control-Expose-Headers” “Content-Length”; # Allow CORS preflight requests if ($request_method = “OPTIONS”) { add_header “Access-Control-Allow-Origin” “*”; add_header “Access-Control-Max-Age” 1728000; add_header “Content-Type” “text/plain charset=UTF-8”; add_header “Content-Length” 0; return 204; } types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } add_header Cache-Control no-cache; alias /tmp; } }}Listen với port default 80
Playlist của stream là tệp tin m3u8, với các segment là tệp ts
Đường dẫn thư mục chứa các playlist là /tmp
4.4 Phát video trên web browser với videojs
Chúng ta có thể phát video trên web browser, mà sử dụng flash player như Flowplayer hay Jwplayer. Trong trường hợp này, tôi sẽ giới thiệu sử dụng videojs player cho phát video trên web browser.
Link về videojs: https://sentory.vn/videojs/http-streaming
Trên Nginx web server, chúng ta sẽ tạo tệp tin index.html với nội dung sau vào root directory: