Tôi làm việc cho một tổ chức nhỏ của chính phủ muốn cung cấp luồng trực tiếp các cuộc họp hội đồng quản trị cho công chúng. Chúng tôi sử dụng OBS để thực hiện mã hóa và nó chưa bao giờ gây ra bất kỳ sự cố nào cho chúng tôi, nhưng gần đây chúng tôi nhận được rất nhiều lời phàn nàn rằng luồng trực tiếp của chúng tôi bị mất kết nối hoặc đơn giản là không bao giờ tải trên phần cuối trang web của chúng tôi.
Chúng tôi đang sử dụng máy chủ phát trực tuyến NGINX RTMP/HLS được xây dựng hơn 5 năm trước để cung cấp luồng này và gần đây tôi đã cập nhật nó lên phiên bản mới nhất của Ubuntu Server và để luôn cập nhật nhất có thể, tôi thậm chí đã cài đặt lại NGINX và đã cập nhật một số thứ ở đây và ở đó, nhưng nhìn chung vẫn giữ nguyên cấu hình cũ của chúng tôi. Tuy nhiên, bây giờ tôi đang thử nghiệm điều đó, tôi nhận thấy hiệu suất rắc rối có thể do trình duyệt gây ra, nhưng tôi muốn hỏi ở đây trước để chắc chắn rằng máy chủ của chúng tôi đang tuân thủ các quy tắc.
Nginx.conf của chúng ta như sau:
load_module "mô-đun/ngx_rtmp_module.so";
dữ liệu www của người dùng;
worker_processes tự động;
sự kiện {
công_nhân kết_nối 1024 ;
}
http {
bao gồm /etc/nginx/mime.types;
ứng dụng default_type/octet-stream;
gửi tệp trên;
keepalive_timeout 65;
#Nếu bạn muốn bật gzip, hãy bỏ ghi chú bên dưới:
#gzip trên;
#gzip_disable "msie6";
người phục vụ{
nghe 80;
máy chủ_tên máy chủ cục bộ;
add_header Access-Control-Allow-Origin *;
chỉ số #rtmp
vị trí/chỉ số{
rtmp_stat tất cả;
rtmp_stat_stylesheet stat.xsl;
}
vị trí /stat.xsl {
#Điều này di chuyển stat.xsl đến một vị trí khác
gốc /usr/src/nginx-rtmp-mô-đun;
}
vị trí/kiểm soát {
rtmp_control tất cả;
}
error_page 500 502 503 504 /50x.html;
vị trí = /50x.html {
html gốc;
}
#client (VLC, v.v.) có thể truy cập HLS tại đây.
vị trí /hls {
gốc/tmp;
add_header 'Kiểm soát bộ đệm' 'không có bộ đệm';
add_header 'Kiểm soát truy cập-Cho phép-Xuất xứ' '*' luôn luôn;
add_header 'Kiểm soát truy cập-Tiếp xúc với tiêu đề' 'Độ dài nội dung';
nếu ($request_method = 'TÙY CHỌN'){
add_header 'Kiểm soát truy cập-Cho phép-Xuất xứ' '*';
add_header 'Kiểm soát truy cập-Tuổi tối đa' 1728000;
add_header 'Loại nội dung' 'văn bản/bộ ký tự đơn giản=UTF-8';
add_header 'Độ dài nội dung' 0;
trả lại 204;
}
}
các loại {
ứng dụng/dấu gạch ngang+xml mpd;
ứng dụng/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
}
}
rtmp {
người phục vụ{
nghe 8081 ;
chunk_size 8192;
ping 30s;
thông báo_phương thức nhận;
cho phép chơi tất cả;
#cho phép xuất bản tất cả;
ứng dụng trực tiếp {
# Chúng tôi sẽ chia luồng thành các tốc độ bit khác nhau tại đây để phát trực tuyến thích ứng.
sống dựa vào;
exec ffmpeg -i rtmp://localhost:8081/live/$name -async 1 -vsync -1 -c:v libx264 -c:a libfdk_aac -b:v 256k -b:a 32k -vf "scale=480: trunc(ow/a/2)*2" -tune zerolatency -preset veryfast -crf 23 -f flv rtmp://localhost:8081/hls/$name_low -c:v libx264 -c:a libfdk_aac -b:v 768k -b:a 96k -vf "scale=720:trunc(ow/a/2)*2" -tune zerolatency -preset veryfast -crf 23 -f flv rtmp://localhost:8081/hls/$name_mid -c: v libx264 -c:a libfdk_aac -b:v 1024k -b:a 128k -vf "scale=960:trunc(ow/a/2)*2" -tune zerolatency -preset veryfast -crf 23 -f flv rtmp:/ /localhost:8081/hls/$name_high -c:v libx264 -c:a libfdk_aac -b:v 1920k -b:a 128k -vf "scale=1280:trunc(ow/a/2)*2" -tune zerolatency -preset veryfast -crf 23 -f flv rtmp://localhost:8081/hls/$name_hd720 -c copy -f flv rtmp://localhost:8081/hls/$name_src;
}
#Bạn nên gửi luồng x.264/aac RTMP qua ffmpeg tới ứng dụng này
ứng dụng hls {
cho phép chơi tất cả;
#cho phép xuất bản tất cả;
sống dựa vào;
hl trên;
hls_path /tmp/hls;
hls_playlist_length 60s;
hls_đoạn 1 giây;
hls_variant _low BANDWIDTH=288000,RESOLUTION=426x240;
hls_variant _mid BANDWIDTH=448000,RESOLUTION=640x360;
hls_variant _high BANDWIDTH=1152000,RESOLUTION=854x480;
hls_variant _hd720 BANDWIDTH=2048000,RESOLUTION=1280x720;
hls_variant _src BANDWIDTH=4096000,RESOLUTION=1920x1080;
}
}
}
Như đã đề cập, chúng tôi sử dụng Video.js để cung cấp luồng cho người dùng trên trang web của chúng tôi.Cấu hình về điều đó có thể nằm ngoài phạm vi của bảng này, nhưng để có thông tin đầy đủ, luồng này phát mà không gặp sự cố trên Firefox và Chrome (cả trên máy tính để bàn) cũng như Trình duyệt Brave (di động), nhưng không muốn hoạt động trên Trình duyệt Brave (trên máy tính để bàn) hoặc Chrome (trên Di động)
Có bất kỳ điều gì về nginx.conf này có thể gây ra loại chức năng đó (hoặc thiếu chức năng đó không?) hoặc điều đó hoàn toàn có trên phần web này?