NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
19/05/2023
Lượt xem

Hướng dẫn thiết lập Video Streaming Server bằng Nginx-RTMP trên Ubuntu 20.04

19/05/2023
19 phút đọc
Lượt xem

Đánh giá

5/5 - (116 bình chọn)

Giao thức RTMP (Real-Time Messaging Protocol) là nguyên tắc cơ bản của hầu hết các video streaming trên mạng hiện nay. Bạn cũng sẽ tìm hiểu cách lưu trữ các stream HLS và DASH để hỗ trợ các nền tảng. Tìm hiểu cách thiết lập Video Streaming Server bằng Nginx-RTMP trên Ubuntu 20.04 để thực hiện việc tổ chức các video RTMP stream độc lập có thể liên kết và xem trong các ứng dụng khác nhau qua bài viết dưới đây.

Yêu cầu để thiết lập Video Streaming Server bằng Nginx-RTMP trên Ubuntu 20.04

  • Một máy chủ Ubuntu 20.04 với user non-root có quyền sudo.
  • Nginx đã được cài đặt từ trước.

Nếu bạn chưa cài đặt Nginx trên Ubuntu 20.04 thì có thể tìm hiểu thêm qua bài viết để biết cách cài đặt đúng cách mà không gặp lỗi.

Bước 1: Cài đặt và cấu hình Nginx-RTMP

Hầu hết các công cụ streaming hiện đại đều hỗ trợ giao thức RTMP, giao thức này xác định các tham số cơ bản của luồng video trên internet. Máy chủ web Nginx bao gồm một module cho phép bạn cung cấp luồng RTMP với cấu hình tối thiểu từ một URL chuyên dụng, giống như cung cấp quyền truy cập HTTP vào các trang web theo mặc định. Module Nginx RTMP không được thiết lập tự động trong Nginx, nhưng trên Ubuntu 20.04 và hầu hết các bản Linux khác, bạn có thể cài đặt dưới dạng package bổ sung.

Bắt đầu bằng cách chạy các lệnh sau với tư cách là user non-root để cập nhật danh sách package và cài đặt module Nginx:

sudo apt update
sudo apt install libnginx-mod-rtmp

Việc cài đặt module sẽ không kích hoạt streaming. Bạn sẽ cần thêm một cấu hình vào file config Nginx để xác định vị trí và cách thức luồng stream sẽ hoạt động.

Sử dụng nano hoặc trình soạn thảo văn bản yêu thích để mở file cấu hình chính của Nginx /etc/nginx/nginx.conf và thêm lệnh cấu hình này vào cuối file:

sudo nano /etc/nginx/nginx.conf
. . .
rtmp {
        server {
                listen 1935;
                chunk_size 4096;
                allow publish 127.0.0.1;
                deny publish all;

                application live {
                        live on;
                        record off;
                }
        }
}

Trong đó:

  • listen 1935: Thiết lập RTMP lắng nghe các kết nối trên cổng 1935.
  • chunk_size 4096: Thiết lập RTMP sẽ gửi dữ liệu ở dạng 4KB block.
  • allow publish 127.0.0.1deny publish all: Chỉ cho phép xuất bản video từ cùng một máy chủ để tránh bất kỳ người dùng nào khác có thể push stream của riêng họ.
  • application live: Xác định một block ứng dụng sẽ khả dụng tại đường dẫn URL là /live.
  • live on: Bật chế độ trực tiếp để nhiều người dùng có thể kết nối đồng thời với stream của bạn.
  • record off: Tắt chức năng ghi của Nginx-RTMP, do đó tất cả các luồng không được lưu riêng vào đĩa theo mặc định.

Lưu và đóng file. Nếu bạn đang sử dụng nano, hãy nhấn Ctrl + X, sau đó khi được nhắc hãy nhấn YEnter.

Theo mặc định thì RTMP sẽ lắng nghe trên port 1935, có nghĩa là bạn cần mở cổng đó trong firewall của mình. Nếu đã cấu hình ufw như một phần của thiết lập máy chủ ban đầu, hãy chạy lệnh sau:

sudo ufw allow 1935/tcp

Bây giờ bạn có thể reload Nginx:

sudo systemctl reload nginx.service

Lưu ý: Nếu bạn muốn sử dụng Nginx-RTMP để xây dựng hệ thống streaming trực tiếp, bạn có thể cài đặt và cấu hình Nginx-RTMP trên một VPS để có một môi trường hoạt động độc lập và đủ tài nguyên để xử lý các yêu cầu phát trực tiếp từ nguồn đầu vào cũng như phục vụ cho người dùng.

Trong đó, VPS Việt Nam tại Vietnix là giải pháp lý tưởng để tăng cường khả năng xử lý dữ liệu, nâng cao tốc độ phát video và cải thiện trải nghiệm người dùng. Bạn có thể chọn gói cấu hình phù hợp với nhu cầu của mình và tiết kiệm chi phí một cách hiệu quả, từ VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp, VPS NVMe, VPS GPU. Bất kể nhu cầu của bạn là gì, VPS Vietnix đều có thể đáp ứng được. Hãy truy cập trang web Vietnix để biết thêm chi tiết về các gói cấu hình và giá cả.

Bước 2: Gửi video đến server RTMP

Có nhiều cách để gửi video đến máy chủ RTMP. Đầu tiên là sử dụng ffmpeg, một tiện ích video – âm thanh phổ biến giúp phát file video trực tiếp trên máy chủ. Nếu bạn chưa có sẵn video thì có thể tải xuống một video bằng cách sử dụng youtube-dl để quay video từ các nền tảng phát trực tuyến như YouTube.

Để sử dụng youtube-dl, bạn cũng cần có bản cài đặt Python với phiên bản mới nhất:

sudo apt install python3-pip

Tiếp theo, sử dụng pip để cài đặt youtube-dl:

sudo pip install youtube-dl

Bây giờ bạn có thể dùng youtube-dl để download video từ Youtube. Ví dụ như tải một video từ kênh của Vietnix:

youtube-dl https://www.youtube.com/watch?v=fOqr3InU6P8&t

Bạn sẽ thấy một số output khi youtube-dl kết hợp các luồng video và âm thanh đang tải xuống lại thành một file duy nhất:

Output
[youtube] fOqr3InU6P8&t: Downloading webpage
WARNING: Requested formats are incompatible for merge and will be merged into mkv.
[download] vietnix dich vu hosting vps toc do cao uy tin hang dau viet nam-fOqr3InU6P8&t.f137.mp4
[download] 100% of 32.82MiB in 08:40
[download] vietnix dich vu hosting vps toc do cao uy tin hang dau viet nam-fOqr3InU6P8&t.f251.webm
[download] 100% of 1.94MiB in 00:38
[ffmpeg] Merging formats into "vietnix dich vu hosting vps toc do cao uy tin hang dau viet nam-fOqr3InU6P8&t.mkv"
Deleting original file vietnix dich vu hosting vps toc do cao uy tin hang dau viet nam-fOqr3InU6P8&t.f137.mp4 (pass -k to keep)
Deleting original file vietnix dich vu hosting vps toc do cao uy tin hang dau viet nam-fOqr3InU6P8&t.f251.webm (pass -k to keep)

Bây giờ, bạn sẽ có một file video trong thư mục hiện tại với tiêu đề như vietnix dich vu hosting vps toc do cao uy tin hang dau viet nam-fOqr3InU6P8&t.mkv. Để phát trực tuyến, bạn sẽ cần cài đặt ffmpeg:

sudo apt install ffmpeg

Và sử dụng ffmpeg để gửi đến máy chủ RTMP của bạn:

ffmpeg -repository -i "vietnix dich vu hosting vps toc do cao uy tin hang dau viet nam-fOqr3InU6P8&t.mkv" -c:v copy -c:a aac -ar 44100 -ac 1 -f flv rtmp://localhost/live/stream

Lệnh ffmpeg này đang chuẩn bị video cho việc streaming. Ngoài ra, bạn có thể tìm hiểu các tùy chọn khác như sau:

  • -re: Output sẽ được đọc ở tốc độ khung hình gốc của nó.
  • -i: “vietnix dich vu hosting vps toc do cao uy tin hang dau viet nam-fOqr3InU6P8&t.mkv“: Chỉ định đường dẫn đến file input.
  • -c:v được đặt thành copy: Bạn đang sao chép nguyên bản định dạng video đã nhận được từ YouTube.
  • -c:a có các tham số khác, cụ thể là aac -ar 44100 -ac 1. Bạn cần lấy định dạng lại âm thanh cho phù hợp với RTMP. aac là một codec âm thanh được hỗ trợ rộng rãi, 44100 hz là tần số phổ biến và -ac 1 chỉ định phiên bản đầu tiên của thông số AAC.
  • -f flv gói video trong conitainer định dạng flv để tương thích tối đa với RTMP.

Video được gửi tới rtmp://localhost/live/stream vì bạn đã xác định cấu hình live ở Bước 1 và stream là URL được chọn cho video này.

Trong khi ffmpeg đang truyền phát video, công cụ này sẽ cho output với các thông số:

Output
frame=  127 fps= 25 q=-1.0 size=     405kB time=00:00:05.00 bitrate= 662.2kbits/s speed=frame=  140 fps= 25 q=-1.0 size=     628kB time=00:00:05.52 bitrate= 931.0kbits/s speed=frame=  153 fps= 25 q=-1.0 size=     866kB time=00:00:06.04 bitrate=1173.1kbits/s speed=

Đây là output ffmpeg ở dạng tiêu chuẩn.. Sử dụng video mẫu này, bạn sẽ nhận được fps= 25.
Trong khi ffmpeg đang chạy, bạn có thể kết nối với luồng RTMP từ trình phát video. Nếu đã cài đặt VLC, mpv hoặc một trình phát đa phương tiện khác, bạn sẽ có thể xem stream bằng cách mở URL rtmp://your_domain/live/stream trong trình phát đa phương tiện. Stream sẽ chấm dứt sau khi ffmpeg phát xong video. Nếu muốn tiếp tục lặp lại, bạn có thể thêm -stream_loop -1 vào đầu lệnh ffmpeg.

Lưu ý: Bạn cũng có thể phát trực tiếp Facebook Live bằng ffmpeg mà không cần sử dụng Nginx-RTMP bằng cách thay thế rtmp://localhost/live/stream trong lệnh ffmpeg bằng rtmps://live-api-s .facebook.com:443/rtmp/your-facebook-stream-key.

Trên đây là cách truyền phát các nguồn video static từ dòng lệnh, bạn sẽ tìm hiểu cách truyền phát video từ các dynamic bằng OBS trên máy tính để bàn.

Bước 3: Truyền phát video đến server qua OBS (Tùy chọn)

Phát trực tuyến qua ffmpeg thuận tiện khi bạn có một video đã chuẩn bị sẵn mà bạn muốn phát lại, nhưng phát trực tiếp có thể linh hoạt hơn nhiều. Phần mềm phổ biến nhất để phát trực tiếp là OBS (Open Broadcaster Software) – một phần mềm miễn phí với mã nguồn mở và tính năng mạnh mẽ. OBS là ứng dụng dành cho máy tính để bàn và sẽ kết nối với máy chủ thông qua máy tính của bạn.
Sau khi cài đặt OBS, bạn sẽ cấu hình tùy chỉnh cửa sổ màn hình và nguồn âm thanh muốn thêm vào stream, sau đó thêm thông tin xác thực cho dịch vụ phát trực tuyến. Theo mặc định, bạn có thể streaming bằng cách phát trực tuyến toàn bộ màn hình của mình. Để đặt thông tin đăng nhập dịch vụ streaming, hãy mở menu cài đặt của OBS, điều hướng đến tùy chọn Stream và nhập:

Streaming Service: Custom
Server: rtmp://your_domain/live
Play Path/Stream Key: obs_stream

obs_stream là đường dẫn tùy chọn – trong trường hợp này, video của bạn sẽ có tại rtmp://your_domain/live/obs_stream. Bạn không cần bật xác thực nhưng cần thêm một mục bổ sung vào danh sách whitelist IP đã cấu hình ở Bước 1.
Quay lại với server, mở file /etc/nginx/nginx.conf và thêm một mục bổ sung là allow publish để nhập địa chỉ IP local của bạn:

sudo nano /etc/nginx/nginx.conf
. . .
                allow publish 127.0.0.1;
                allow publish your_local_ip_address;
                deny publish all;
. . .

Lưu và đóng file, sau đó reload Nginx:

sudo systemctl reload nginx.service

Bây giờ bạn có thể đóng menu cài đặt của OBS và nhấp vào Start Streaming từ giao diện chính. Hãy thử xem stream trong trình phát đa phương tiện như trước đây. Tiếp theo, bạn có thể thêm một vài tính năng khác để giúp server có thể tạo ra nhiều video stream hơn.

Bước 4: Thêm khả năng giám sát (Bước tùy chọn)

Việc cấu hình Nginx để truyền phát video bằng module Nginx-RTMP đã xong, bước tiếp theo thông thường là bật trang thống kê RTMP. Thay vì thêm ngày càng nhiều chi tiết cấu hình vào file nginx.conf, Nginx cho phép bạn thêm cấu hình trên mỗi trang vào các file riêng lẻ trong thư mục con có tên là sites-available/. Trong trường hợp này, bạn sẽ tạo rtmp:

sudo nano /etc/nginx/sites-available/rtmp

Thêm nội dung dưới đây:

server {
    listen 8080;
    server_name  localhost;

    # rtmp stat
    location /stat {
        rtmp_stat all;
        rtmp_stat_stylesheet stat.xsl;
    }
    location /stat.xsl {
        root /var/www/html/rtmp;
    }

    # rtmp control
    location /control {
        rtmp_control all;
    }
}

Lưu và đóng file. File stat.xsl từ cấu hình này được sử dụng để tạo kiểu và hiển thị trang thống kê RTMP trong trình duyệt của bạn. File này được cung cấp bởi thư viện libnginx-mod-rtmp mà bạn đã cài đặt từ trước nhưng được nén theo mặc định. Vì vậy bạn sẽ cần giải nén và đặt vào thư mục /var/www/html/rtmp để phù hợp với cấu hình trên.

Tạo thư mục /var/www/html/rtmp, sau đó giải nén file stat.xsl.gz bằng các lệnh sau:

sudo mkdir /var/www/html/rtmp
sudo gunzip -c /usr/share/doc/libnginx-mod-rtmp/examples/stat.xsl.gz > /var/www/html/rtmp/stat.xsl

Cuối cùng, để truy cập trang thống kê đã thêm, bạn cần mở một port khác trong tường lửa của mình. Cụ thể, lệnh listen đã được cấu hình với cổng 8080, vì vậy bạn sẽ cần thêm rule để có thể truy cập Nginx trên cổng đó. Tuy nhiên, tốt nhất là chỉ cho phép địa chỉ IP của riêng bạn để tránh người khác có thể truy cập vào. Chạy lệnh sau:

sudo ufw allow from your_ip_address to any port http-alt

Tiếp theo, bạn sẽ cần kích hoạt cấu hình mới này. Quy ước của Nginx là tạo các symbolic link từ các file trong thư mục sites-available/ đến một thư mục khác có tên là sites-enable/ khi bật hoặc tắt chúng. Cần phải sử dụng các đường dẫn một cách đầy đủ để tạo liên kết:

sudo ln -s /etc/nginx/sites-available/rtmp /etc/nginx/sites-enabled/rtmp

Bây giờ bạn có thể tải lại Nginx:

sudo systemctl reload nginx.service

Truy cập http://your_domain:8080/stat trong trình duyệt để xem trang thống kê RTMP. Sau đó làm mới trang trong khi streaming video để có thể xem số liệu thống kê về các thông số. Trong phần cuối cùng, bạn sẽ tìm hiểu cách thực hiện stream trong trình duyệt mà không cần sử dụng nền tảng phát trực tuyến của bên thứ ba hoặc ứng dụng trình phát đa phương tiện.

Bước 5: Tạo stream với công nghệ hiện đại cho trình duyệt (Bước tùy chọn)

Ở bước cuối cùng, bạn có thể thêm một số thành phần hỗ trợ để người dùng có thể phát trực tiếp video từ server bằng trình duyệt web. Có hai giao thức có thể được sử dụng để tạo luồng video dựa trên HTTP là HLS của Apple và MPEG DASH.

Module Nginx-RTMP hỗ trợ cả hai tiêu chuẩn. Để thêm HLS và DASH cho server, bạn cần sửa đổi rtmp trong file nginx.conf của mình. Mở /etc/nginx/nginx.conf bằng nano hoặc trình chỉnh sửa ưa thích , sau đó thêm các lệnh để file cấu hình có dạng như dưới đây:

sudo nano /etc/nginx/nginx.conf
. . .
rtmp {
        server {
. . .
                application live {
                    	live on;
                    	record off;
                        hls on;
                        hls_path /var/www/html/stream/hls;
                        hls_fragment 3;
                        hls_playlist_length 60;

                        dash on;
                        dash_path /var/www/html/stream/dash;
                }
        }
}
. . .

Lưu và đóng file. Tiếp theo, thêm phần này vào cuối file sites-available/rtmp của bạn:

sudo nano /etc/nginx/sites-available/rtmp
. . .
server {
    listen 8088;

    location / {
        add_header Access-Control-Allow-Origin *;
        root /var/www/html/stream;
    }
}

types {
    application/dash+xml mpd;
}

Lưu ý: Tiêu đề Access-Control-Allow-Origin * có nhiệm vụ bật tính năng CORS (Cross-Origin Resource Sharing) vốn bị tắt theo mặc định. Tính năng này giúp trao đổi thông tin với các trình duyệt web truy cập dữ liệu từ server để thông báo rằng nó có thể tải tài nguyên từ các port hoặc domain khác. CORS là cần thiết để tương thích tối đa với các ứng dụng khách HLS và DASH, đồng thời chuyển đổi cấu hình chung khi triển khai web khác.

Lưu và đóng file. Lưu ý rằng bạn đang sử dụng port 8088 để tránh xung đột với bất kỳ dịch vụ nào đang chạy trên cổng 80 hoặc 443. Mở cổng này trong firewall:

sudo ufw allow 8088/tcp

Cuối cùng, hãy tạo một thư mục stream trong thư mục gốc của web để khớp với block cấu hình, đây là nơi Nginx có thể tạo các file cần thiết cho HLS và DASH:

sudo mkdir /var/www/html/stream

Reload Nginx một lần nữa:

sudo systemctl reload nginx

Bây giờ, bạn sẽ có một stream HLS tại http://your_domain:8088/hls/stream.m3u8 và một stream DASH có sẵn tại http://your_domain:8088/dash/stream.mpd. Các endpoint này sẽ các siêu dữ liệu cần thiết trên nguồn cấp dữ liệu video RTMP của bạn để hỗ trợ các API.

Với hơn 10 năm kinh nghiệm trong việc cung cấp giải pháp VPS cho khách hàng cá nhân và doanh nghiệp, Vietnix đã trở thành đối tác đáng tin cậy của nhiều đơn vị lớn như GTV, UB Group, iVIVU, Vietnamworks, SEOSONA, và SAGO Media. Với hơn 100.000 dịch vụ được kích hoạt và nhiều cống hiến khác, Vietnix đã vinh dự được trao tặng giải thưởng Thương hiệu Việt Nam xuất sắc 2022, đánh dấu sự khẳng định của khách hàng và các tổ chức về chất lượng dịch vụ.

Không chỉ vậy, Vietnix còn được đánh giá cao bởi khách hàng với tỷ lệ giới thiệu dịch vụ sau khi sử dụng lên đến 97%. Điều này cho thấy Vietnix đang cung cấp những dịch vụ tốt và đáp ứng được nhu cầu của khách hàng. Năm 2022, Vietnix đã được vinh danh với giải thưởng “Thương hiệu Việt Nam xuất sắc”, là sự thể hiện cho sự nỗ lực và thành công của công ty trong việc cung cấp các giải pháp VPS chất lượng tốt nhất trên thị trường.

Mọi vấn đề thắc mắc cần tư vấn, quý khách vui lòng liên hệ:

  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
  • Hotline: 1800 1093
  • Email: sales@vietnix.com.vn

Lời kết

Các tùy chọn cấu hình mà bạn đã sử dụng trong bài viết này đều được ghi lại trong trang Nginx RTMP Wiki. Các module Nginx thường chia sẻ cú pháp chung và có các tùy chọn cấu hình đa dạng, vì vậy bạn có tham khảo để thay đổi các cài đặt của mình. Gần như tất cả video stream trên internet đều được triển khai trên RTMP, HLS và DASH bằng cách sử dụng phương pháp được cung cấp trong bài viết này. Cảm ơn các bạn đã theo dõi, hãy để lại bình luận nếu có bất kỳ thắc mắc nào nhé.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG