RTMP (Giao thức nhắn tin thời gian thực) là một giao thức hiệu suất cao để truyền dữ liệu, âm thanh và video qua internet giữa các công nghệ nền tảng dựa trên flash. Ban đầu được Macromedia phát triển và hiện thuộc sở hữu của Adobe.
Nginx RTMP là một trình phát phương tiện dựa trên nginx với phát trực tiếp RTMP, HLS và MPEG-DASH. Mô-đun Nginx RTMP có nhiều tính năng, bao gồm hỗ trợ H264/AAC, hỗ trợ gọi lại HTTP, mô-đun điều khiển HTTP để ghi âm thanh/video, v.v.
Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách cài đặt và cấu hình máy chủ web Nginx với mô-đun RTMP. Chúng tôi sẽ sử dụng máy chủ CentOS 7 mới nhất và hướng dẫn này sẽ bao gồm cấu hình mô-đun nginx và rtmp cũng như tạo luồng trực tiếp RTMP và video theo yêu cầu.
Cài đặt 'Công cụ phát triển' của CentOS.
Thêm kho lưu trữ EPEL.
Cài đặt các gói phụ thuộc của Nginx.
Chờ tất cả các gói được cài đặt.
Đi đến thư mục '/usr/local/src'.
Tải xuống Nginx 1.14.0 và giải nén.
Tải xuống gói pcre và giải nén nó.
Tải xuống gói zlib và giải nén nó.
Tải xuống gói OpenSSL và giải nén nó.
Tiếp theo, sao chép Mô-đun Nginx RTMP mã nguồn sử dụng lệnh git.
Và xóa tất cả các tệp tar.gz và .zip đã nén.
Sau đây là các chi tiết thư mục mà chúng tôi có.
Và chúng tôi đã sẵn sàng để biên dịch và cài đặt.
Cấu hình nginx 1.14.0 bằng các các thông số bên dưới.
Biên dịch và cài đặt Nginx với mô-đun RTMP bằng cách chạy các lệnh sau.
Khi cài đặt hoàn tất, chúng ta cần tạo một thư mục mô-đun symlink mới, tạo một người dùng và nhóm nginx mới và tạo một thư mục bộ đệm nginx mới.
Tạo mô-đun symlink nginx vào thư mục cấu hình '/etc/nginx'.
Tạo một người dùng và nhóm hệ thống 'nginx' mới.
Bây giờ hãy tạo một thư mục bộ đệm Nginx mới '/var/cache/nginx' và thay đổi chủ sở hữu của thư mục thành người dùng và nhóm 'nginx'.
Kiểm tra cấu hình nginx và phiên bản nginx đã cài đặt.
Và sau đây là kết quả.
Máy chủ web Nginx đã được cài đặt trên CentOS 7 với Mô-đun RTMP được bật.
Đi tới thư mục '/lib/systemd/system' và tạo tệp 'nginx.service' mới bằng vim.
dán cấu hình bên dưới.
Lưu và thoát.
Bây giờ hãy tải lại hệ thống systemd.
Khởi động dịch vụ nginx và cho phép nó khởi chạy mọi lúc khi khởi động hệ thống.
Máy chủ web Nginx đang hoạt động như một dịch vụ trên hệ thống CentOS 7.
Đi tới thư mục cấu hình '/etc/nginx' và sao lưu tệp 'nginx.conf' gốc.
Bây giờ hãy tạo cấu hình tùy chỉnh 'nginx.conf'.
Dán cấu hình Nginx RTMP bên dưới.
Lưu và thoát.
Tiếp theo, chúng ta cần tạo một thư mục mới cho cấu hình HLS và chúng ta đã xác định thư mục gốc web nằm trong thư mục '/mnt'.
Tạo thư mục 'hls' trong thư mục '/mnt' và thay đổi chủ sở hữu của thư mục thành người dùng và nhóm nginx.
Kiểm tra cấu hình và khởi động lại dịch vụ nginx.
Đi tới thư mục cấu hình '/etc/nginx' và chỉnh sửa tệp 'nginx.conf'.
Dán các cấu hình bên dưới vào trong ngoặc 'rtmp { ... }'.
Lưu và thoát.
Bây giờ hãy tạo một thư mục mới 'mp4s' để lưu trữ tất cả các video vod và đổi chủ sở hữu thành nhóm người dùng nginx.
Kiểm tra cấu hình nginx và đảm bảo không có lỗi, sau đó khởi động lại dịch vụ nginx.
Cấu hình Nginx cho luồng trực tiếp RTMP và luồng vod đã hoàn tất.
Nhấp vào menu 'Tệp', chọn tùy chọn 'Mở mạng'.
Bây giờ hãy nhập URL RTMP cho luồng vod của chúng tôi.
rtmp://192.168.1.10:1935/vod/file.mp4
Nhấp vào nút 'Mở'.
Sau đây là kết quả của luồng video.
Chúng tôi sẽ chỉ phát trực tiếp cửa sổ thiết bị đầu cuối bằng phần mềm phát sóng mở và thử xem luồng trực tiếp RTMP bằng trình phát VLC.
Sau đây là cấu hình của tôi cho obs software.
Mở ứng dụng VLC trên máy tính của bạn.
Nhấp vào menu 'File', chọn tùy chọn 'Open Network'.
Bây giờ hãy nhập URL RTMP cho luồng trực tiếp của chúng tôi.
rtmp://192.168.1.10:1935/stream/
Nhấp vào nút 'Open'.
Và sau đây là kết quả của luồng trực tiếp sử dụng open broadcaster thông qua mô-đun nginx rtmp.
Quá trình cài đặt máy chủ web Nginx với mô-đun RTMP trên CentOS 7 đã hoàn tất thành công.
Nginx RTMP là một trình phát phương tiện dựa trên nginx với phát trực tiếp RTMP, HLS và MPEG-DASH. Mô-đun Nginx RTMP có nhiều tính năng, bao gồm hỗ trợ H264/AAC, hỗ trợ gọi lại HTTP, mô-đun điều khiển HTTP để ghi âm thanh/video, v.v.
Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách cài đặt và cấu hình máy chủ web Nginx với mô-đun RTMP. Chúng tôi sẽ sử dụng máy chủ CentOS 7 mới nhất và hướng dẫn này sẽ bao gồm cấu hình mô-đun nginx và rtmp cũng như tạo luồng trực tiếp RTMP và video theo yêu cầu.
Điều kiện tiên quyết
- Máy chủ CentOS 7
- Quyền root
Chúng ta sẽ làm gì?
- Cài đặt các phụ thuộc
- Tải xuống Nginx với gói bổ sung và mô-đun RTMP
- Biên dịch Nginx và cài đặt từ nguồn
- Cấu hình Nginx dưới dạng dịch vụ
- Cấu hình mô-đun Nginx RTMP
- Thiết lập luồng trực tiếp RTMP đầu tiên
- Kiểm tra
Bước 1 - Cài đặt các phụ thuộc
Trong hướng dẫn này, chúng ta sẽ xây dựng máy chủ web Nginx từ nguồn. Chúng ta cần cài đặt tất cả các gói phụ thuộc cần thiết, bao gồm các công cụ phát triển, kho lưu trữ EPEL và các gói khác.Cài đặt 'Công cụ phát triển' của CentOS.
Mã:
sudo yum -y groupinstall 'Công cụ phát triển'
Mã:
sudo yum -y install epel-release
Mã:
sudo yum install -y wget git unzip perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel pcre-devel GeoIP GeoIP-devel
Bước 2 - Tải xuống Nginx với Gói bổ sung và Mô-đun RTMP
Trong bước này, chúng tôi sẽ tải xuống mã nguồn nginx với các phụ thuộc bổ sung bao gồm pcre, zlib và OpenSSL.Đi đến thư mục '/usr/local/src'.
Mã:
cd /usr/local/src
Mã:
wget https://nginx.org/download/nginx-1.14.0.tar.gz
tar -xzvf nginx-1.14.0.tar.gz
Mã:
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.zip
giải nén pcre-8.42.zip
Mã:
wget https://www.zlib.net/zlib-1.2.11.tar.gz
tar -xzvf zlib-1.2.11.tar.gz
Mã:
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
tar -xzvf openssl-1.1.0h.tar.gz
Mã:
git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git
Mã:
rm -f *.tar.gz *.zip
Mã:
ls -lah
Và chúng tôi đã sẵn sàng để biên dịch và cài đặt.
Bước 3 - Biên dịch Nginx và Cài đặt từ Nguồn
Đi tới thư mục 'nginx-1.14.0'.
Mã:
cd nginx-1.14.0/
Mã:
./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=nginx \
--group=nginx \
--build=CentOS \
--builddir=nginx-1.14.0 \
--with-select_module \
--with-poll_module \
--with-threads \
--with-file-aio \
--với-http_ssl_module \
--với-http_v2_module \
--với-http_realip_module \
--với-http_addition_module \
--với-http_xslt_module=động \
--với-http_image_filter_module=động \
--với-http_geoip_module=động \
--với-http_sub_module \
--với-http_dav_module \
--với-http_flv_module \
--với-http_mp4_module \
--với-http_gunzip_module \
--với-http_gzip_static_module \
--với-http_auth_request_module \
--với-http_random_index_module \
--với-http_secure_link_module \
--với-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--with-mail=dynamic \
--with-mail_ssl_module \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream_geoip_module=dynamic \
--with-stream_ssl_preread_module \
--with-compat \
--with-pcre=../pcre-8.42 \
--with-pcre-jit \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.0h \
--with-openssl-opt=no-nextprotoneg \
--add-module=../nginx-rtmp-module \
--with-debug
Biên dịch và cài đặt Nginx với mô-đun RTMP bằng cách chạy các lệnh sau.
Mã:
sudo make
sudo make install
Tạo mô-đun symlink nginx vào thư mục cấu hình '/etc/nginx'.
Mã:
sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules
Mã:
sudo useradd -r -d /var/cache/nginx/ -s /sbin/nologin -U nginx
Mã:
mkdir -p /var/cache/nginx/
chown -R nginx:nginx /var/cache/nginx/
Mã:
nginx -t
nginx -V
Máy chủ web Nginx đã được cài đặt trên CentOS 7 với Mô-đun RTMP được bật.
Bước 4 - Cấu hình Nginx dưới dạng Dịch vụ
Trong hướng dẫn này, chúng ta sẽ chạy nginx dưới dạng dịch vụ và chúng ta cần tạo một tệp dịch vụ nginx mới vào thư mục dịch vụ systemd.Đi tới thư mục '/lib/systemd/system' và tạo tệp 'nginx.service' mới bằng vim.
Mã:
cd /lib/systemd/system/
vim nginx.service
Mã:
[Unit]Mô tả=nginx - máy chủ web hiệu suất caoTài liệu=https://nginx.org/en/docs/After=network-online.target remote-fs.target nss-lookup.targetWants=network-online.target[Service]Type=forkingPIDFile=/var/run/nginx.pidExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.confExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.confExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s TERM $MAINPID[Install]WantedBy=multi-user.target
Bây giờ hãy tải lại hệ thống systemd.
Mã:
systemctl daemon-reload
Mã:
systemctl start nginx
systemctl enable nginx
Bước 5 - Cấu hình Mô-đun Nginx RTMP
Trong bước này, chúng ta sẽ tạo cấu hình Nginx tùy chỉnh mới cho mô-đun RTMP.Đi tới thư mục cấu hình '/etc/nginx' và sao lưu tệp 'nginx.conf' gốc.
Mã:
cd /etc/nginx/
mv nginx.conf nginx.conf.asli
Mã:
vim nginx.conf
Mã:
worker_processes auto;events { worker_connections 1024;}# Cấu hình RTMPrtmp { server { listen 1935; # Nghe trên cổng RTMP chuẩn chunk_size 4000;# Xác định Ứng dụng application show { live on; # Bật HLS hls on; hls_path /mnt/hls/; hls_fragment 3; hls_playlist_length 60; # vô hiệu hóa việc sử dụng luồng từ nginx dưới dạng rtmp deny play all; } }}http { sendfile off; tcp_nopush on; aio on; directio 512; default_type application/octet-stream; server { listen 8080; location / { # Vô hiệu hóa cache add_header 'Cache-Control' 'no-cache'; # Thiết lập CORS add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Expose-Headers' 'Content-Length'; # cho phép các yêu cầu kiểm tra trước CORS nếu ($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/dash+xml mpd; application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /mnt/; } }}
Tiếp theo, chúng ta cần tạo một thư mục mới cho cấu hình HLS và chúng ta đã xác định thư mục gốc web nằm trong thư mục '/mnt'.
Tạo thư mục 'hls' trong thư mục '/mnt' và thay đổi chủ sở hữu của thư mục thành người dùng và nhóm nginx.
Mã:
mkdir -p /mnt/hls
chown -R nginx:nginx /mnt/hls
Mã:
nginx -t
systemctl restart nginx
Bước 6 - Thiết lập luồng phát trực tiếp RTMP đầu tiên
Trong hướng dẫn này, chúng ta sẽ tạo luồng video RTMP mới theo yêu cầu bằng cách sử dụng các video mp4 trên máy chủ và tạo luồng RTMP trực tiếp mới sẽ được phát từ máy tính cục bộ bằng phần mềm OBS.Đi tới thư mục cấu hình '/etc/nginx' và chỉnh sửa tệp 'nginx.conf'.
Mã:
cd /etc/nginx/
vim nginx.conf
Mã:
# Video RTMP theo yêu cầu cho tệp mp4 ứng dụng vod { phát /mnt/mp4s; } # Luồng RTMP sử dụng ứng dụng OBS luồng { trực tiếp trên; }
Bây giờ hãy tạo một thư mục mới 'mp4s' để lưu trữ tất cả các video vod và đổi chủ sở hữu thành nhóm người dùng nginx.
Mã:
mkdir -p /mnt/mp4s
chown -R nginx:nginx /mnt/mp4s
Mã:
nginx -t
systemctl restart nginx
Bước 7 - Kiểm tra
Kiểm tra luồng trực tiếp RTMP và luồng vod bằng trình phát VLC.Luồng video theo yêu cầu
Mở ứng dụng VLC trên máy tính.Nhấp vào menu 'Tệp', chọn tùy chọn 'Mở mạng'.
Bây giờ hãy nhập URL RTMP cho luồng vod của chúng tôi.
rtmp://192.168.1.10:1935/vod/file.mp4
Nhấp vào nút 'Mở'.
Sau đây là kết quả của luồng video.
Phát trực tiếp bằng OBS (Phần mềm phát sóng mở)
Trong hướng dẫn này, chúng tôi sẽ kiểm tra luồng trực tiếp RTMP bằng phần mềm obs và trình phát vlc.Chúng tôi sẽ chỉ phát trực tiếp cửa sổ thiết bị đầu cuối bằng phần mềm phát sóng mở và thử xem luồng trực tiếp RTMP bằng trình phát VLC.
Sau đây là cấu hình của tôi cho obs software.
Mở ứng dụng VLC trên máy tính của bạn.
Nhấp vào menu 'File', chọn tùy chọn 'Open Network'.
Bây giờ hãy nhập URL RTMP cho luồng trực tiếp của chúng tôi.
rtmp://192.168.1.10:1935/stream/
Nhấp vào nút 'Open'.
Và sau đây là kết quả của luồng trực tiếp sử dụng open broadcaster thông qua mô-đun nginx rtmp.
Quá trình cài đặt máy chủ web Nginx với mô-đun RTMP trên CentOS 7 đã hoàn tất thành công.