ฉันมีการติดตั้ง nginx ที่ใช้งานได้กับโมดูล rtmp ที่ทำงานได้อย่างมีเสน่ห์ในการสร้างสตรีมสดด้วย dash และ hsl ไม่มีปัญหา
เมื่อฉันพยายามเปิดใช้การแปลงรหัส ffmpeg สำหรับการสตรีมแบบปรับได้ มันสร้างเวอร์ชัน hls ได้ดี ส่วนวิดีโอเป็น m3pu8 สำหรับวิดีโอแต่ละเวอร์ชัน และ m3u8 หลักซึ่งเป็นเวอร์ชันที่ฉันเรียกใช้จากโปรแกรมเล่นเว็บ
แต่ในเวอร์ชัน dash ฉันได้รับ chunks รายการ mpd สำหรับแต่ละเวอร์ชัน แต่ไม่มีรายการหลัก
ฉันพลาดอะไรไปรึเปล่า? ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.
nginx.conf:
เหตุการณ์ {
worker_connections 1024;
}
rtmp {
เซิร์ฟเวอร์ {
ฟัง 2478;
แอปพลิเคชันสด {
มีชีวิตต่อ;
exec ffmpeg -i rtmp://stream.server.net/live/$name -threads 1
-c:v libx264 -profile:v พื้นฐาน -b:v 768K -s 640x360 -f flv -c:a aac -ac 1 -เข้มงวด -2 -b:a 96k
rtmp://stream.server.net/liveout/$name_360
-c:v libx264 -profile:v พื้นฐาน -b:v 1024K -s 852x480 -f flv -c:a aac -ac 1 -เข้มงวด -2 -b:a 128k rtmp://stream.server.net/liveout/ $name_480;
}
แอปพลิเคชั่นถ่ายทอดสด {
มีชีวิตต่อ;
เปิด;
hls_path /home/stream/hls/;
hls_fragment 4s;
hls_playlist_length 60s;
รีบ;
dash_path /home/stream/dash;
dash_fragment 10 วินาที;
dash_playlist_length 30 วินาที;
dash_nested ปิด;
hls_variant _360 BANDWIDTH=448000;
hls_variant _480 BANDWIDTH=1152000;
}
}
}
http {
เซิร์ฟเวอร์ {
server_name stream.server.net;
รูท /โฮม/สตรีม/;
ตำแหน่ง /hls {
# ให้บริการชิ้นส่วน HLS
ประเภท {
แอปพลิเคชัน/vnd.apple.mpegurl m3u8;
วิดีโอ/mp2t ts;
}
รูท /โฮม/สตรีม/;
add_header Cache-Control ไม่มีแคช;
# การตั้งค่า CORS
add_header 'Access-Control-Allow-Origin' '*' เสมอ;
add_header 'Access-Control-Expose-Headers' 'ความยาวเนื้อหา';
# อนุญาตคำขอเที่ยวบินล่วงหน้าของ CORS
ถ้า ($request_method = 'ตัวเลือก') {
add_header 'การควบคุมการเข้าถึง - อนุญาต - ต้นทาง' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'ประเภทเนื้อหา' 'ข้อความ/ชุดอักขระธรรมดา=UTF-8';
add_header 'ความยาวเนื้อหา' 0;
กลับ 204;
}
}
ตำแหน่ง / เส้นประ {
รูท /โฮม/สตรีม/;
# ให้บริการชิ้นส่วน DASH
ประเภท {
แอปพลิเคชัน/ขีด+xml mpd;
วิดีโอ/mp4 mp4;
}
add_header Cache-Control ไม่มีแคช;
# การตั้งค่า CORS
add_header 'Access-Control-Allow-Origin' '*' เสมอ;
add_header 'Access-Control-Expose-Headers' 'ความยาวเนื้อหา';
# อนุญาตคำขอเที่ยวบินล่วงหน้าของ CORS
ถ้า ($request_method = 'ตัวเลือก') {
add_header 'การควบคุมการเข้าถึง - อนุญาต - ต้นทาง' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'ประเภทเนื้อหา' 'ข้อความ/ชุดอักขระธรรมดา=UTF-8';
add_header 'ความยาวเนื้อหา' 0;
กลับ 204;
}
}
สถานที่ / สถิติ {
rtmp_stat ทั้งหมด;
# ใช้สไตล์ชีตนี้เพื่อดู XML เป็นหน้าเว็บ
#ในเบราว์เซอร์
rtmp_stat_stylesheet stat.xsl;
}
ตำแหน่ง /stat.xsl {
# สไตล์ชีต XML เพื่อดูสถิติ RTMP
# คัดลอก stat.xsl ทุกที่ที่คุณต้องการ
# และใส่เส้นทางไดเร็กทอรีแบบเต็มที่นี่
รูท /โฮม/สตรีม/;
}
ฟัง 443 ssl; # จัดการโดย Certbot
ssl_certificate /etc/letsencrypt/live/stream.server.net/fullchain.pem; # จัดการโดย Certbot
ssl_certificate_key /etc/letsencrypt/live/stream.server.net/privkey.pem; # จัดการโดย Certbot
รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot
}
ประเภท {
ข้อความ/html html;
แอปพลิเคชัน/ขีด+xml mpd;
}
เซิร์ฟเวอร์ {
ถ้า ($host = stream.server.net) {
ส่งคืน 301 https://$host$request_uri;
} # จัดการโดย Certbot
ฟัง 80;
server_name stream.server.net;
กลับ 404; # จัดการโดย Certbot
}}