Score:0

เซิร์ฟเวอร์สตรีมมิ่ง RTMP/HLS ทำงานบน NGINX ด้วย Video.JS เพื่อให้สตรีมสดพร้อมผลลัพธ์ที่หลากหลาย

ธง pg

ฉันทำงานให้กับหน่วยงานของรัฐขนาดเล็กที่ต้องการจัดให้มีการถ่ายทอดสดการประชุมคณะกรรมการสำหรับสาธารณะ เราใช้ OBS ในการเข้ารหัสและไม่เคยสร้างปัญหาใดๆ ให้กับเรา แต่เมื่อเร็วๆ นี้เรามีข้อร้องเรียนมากมายว่าสตรีมแบบสดของเราขาดการเชื่อมต่อหรือโหลดไม่ได้เลยบนเว็บเอนด์ของเรา

เราใช้เซิร์ฟเวอร์สตรีม NGINX RTMP/HLS ที่สร้างขึ้นเมื่อ 5 ปีที่แล้วเพื่อให้บริการสตรีมนี้ และเมื่อไม่นานมานี้ ฉันได้อัปเดตเป็นเซิร์ฟเวอร์ Ubuntu เวอร์ชันล่าสุดและเพื่อให้ทันสมัยที่สุดเท่าที่จะเป็นไปได้ ฉันยังติดตั้ง NGINX ใหม่และ อัปเดตบางสิ่งที่นี่และที่นั่น แต่โดยทั่วไปจะเก็บการกำหนดค่าเก่าของเราไว้ อย่างไรก็ตาม ตอนนี้ฉันได้ทำการทดสอบแล้ว ฉันสังเกตเห็นประสิทธิภาพที่มีปัญหาซึ่งอาจเป็นเบราว์เซอร์ แต่ฉันอยากจะถามที่นี่ก่อนเพื่อให้แน่ใจว่าเซิร์ฟเวอร์ของเราเล่นตามกฎ

nginx.conf ของเรามีดังนี้:

load_module "โมดูล/ngx_rtmp_module.so";

ผู้ใช้ www-data;

worker_processes อัตโนมัติ

เหตุการณ์ {
        worker_connections 1024;
}

http {
        รวม /etc/nginx/mime.types;
        แอปพลิเคชัน default_type/octet-stream;
        ส่งไฟล์บน;
        keepalive_timeout 65;

        # หากคุณต้องการเปิดใช้งาน gzip ให้ยกเลิกการแสดงความคิดเห็นต่อไปนี้:
        #gzip บน;
        #gzip_disable "msie6";

        เซิร์ฟเวอร์{
                ฟัง 80;
                server_name localhost;
                add_header Access-Control-Allow-Origin *;

                #rtmp สถานะ
                สถานที่ /สถิติ{
                        rtmp_stat ทั้งหมด;
                        rtmp_stat_stylesheet stat.xsl;
                }
                ตำแหน่ง /stat.xsl {
                        #สิ่งนี้จะย้าย stat.xsl ไปยังตำแหน่งอื่น
                        รูท /usr/src/nginx-rtmp-module;
                }
                ตำแหน่ง / ควบคุม {
                        rtmp_control ทั้งหมด;
                }

                error_page 500 502 503 504 /50x.html;

                ตำแหน่ง = /50x.html {
                        รูท html;
                }

                #client (VLC และอื่นๆ) สามารถเข้าถึง HLS ได้ที่นี่
                ตำแหน่ง /hls {
                        ราก /tmp;
                        add_header 'การควบคุมแคช' 'ไม่มีแคช';
                        add_header 'Access-Control-Allow-Origin' '*' เสมอ;
                        add_header 'Access-Control-Expose-Headers' 'ความยาวเนื้อหา';

                        ถ้า ($request_method = 'ตัวเลือก'){
                                add_header 'การควบคุมการเข้าถึง - อนุญาต - ต้นทาง' '*';
                                add_header 'Access-Control-Max-Age' 1728000;
                                add_header 'ประเภทเนื้อหา' 'ข้อความ/ชุดอักขระธรรมดา=UTF-8';
                                add_header 'ความยาวเนื้อหา' 0;
                                กลับ 204;
                        }
                }
                ประเภท {
                        แอปพลิเคชัน/ขีด+xml mpd;
                        แอปพลิเคชัน/vnd.apple.mpegurl m3u8;
                        วิดีโอ/mp2t ts;
                }

        }
}

rtmp {
        เซิร์ฟเวอร์{
                ฟัง 8081;
                chunk_size 8192;
                ปิง 30;
                alert_method รับ;
                อนุญาตให้เล่นทั้งหมด
                #อนุญาตให้เผยแพร่ทั้งหมด;

                แอปพลิเคชันสด {
                # เราจะแบ่งการสตรีมเป็นบิตเรตที่แตกต่างกันที่นี่สำหรับการสตรีมแบบปรับได้
                มีชีวิตต่อ;
                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 เร็วมาก -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 เร็วมาก -crf 23 -f flv rtmp://localhost:8081/hls/$name_hd720 -c copy -f flv rtmp://localhost:8081/hls/$name_src;
                }

                #คุณควรส่งสตรีม x.264/aac RTMP ผ่าน ffmpeg ไปยังแอปพลิเคชันนี้
                แอปพลิเคชัน hls {
                        อนุญาตให้เล่นทั้งหมด
                        #อนุญาตให้เผยแพร่ทั้งหมด;
                        มีชีวิตต่อ;
                        เปิด;
                        hls_path /tmp/hls;
                        hls_playlist_length 60s;
                        hls_fragment 1s;

                        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;
                }
        }
}

ตามที่กล่าวไว้ เราใช้ Video.js เพื่อให้บริการสตรีมแก่ผู้ใช้ของเราบนเว็บไซต์ของเราการกำหนดค่าเกี่ยวกับสิ่งนั้นอาจอยู่นอกเหนือขอบเขตของบอร์ดนี้ แต่เพื่อประโยชน์ของข้อมูลที่ครบถ้วน สตรีมนี้เล่นได้บน Firefox และ Chrome (ทั้งบนเดสก์ท็อป) และ Brave Browser (มือถือ) โดยไม่มีปัญหา แต่ไม่ต้องการ ทำงานบน Brave Browser (บนเดสก์ท็อป) หรือ Chrome (บนมือถือ)

มีอะไรเกี่ยวกับ nginx.conf นี้ที่อาจก่อให้เกิดการทำงานประเภทนั้น (หรือขาดไป?) หรือว่าจะสมบูรณ์ในส่วนของเว็บนี้หรือไม่?

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา