nginx HLS 流不工作
nginx HLS stream not working
我在我的 linux 服务器上安装了带 RTMP 模块的 nginx,我希望它从 Open Broadcaster Software 接收 RTMP 流,将其转换为 HLS 并在我的私人网站上播放 HTML5 玩家。通过 RTMP 接收流有效,但 HLS 流似乎无效。我当前的配置是这样的:
worker_processes 1;
events {
worker_connections 1024;
}
http {
#include mime.types;
#default_type application/octet-stream;
sendfile off;
#keepalive_timeout 65;
server {
listen 8080;
#server_name localhost;
#location / {
# root html;
# index index.html index.htm;
#}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
# root html;
#}
#*********************************************************************************************************************************
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
}
root /mnt/;
add_header Cache-Control no-cache;
# To avoid issues with cross-domain HTTP requests (e.g. during development)
#add_header Access-Control-Allow-Origin *;
}
#*********************************************************************************************************************************
}
}
rtmp {
server {
listen 1935;
chunk_size 4096;
application stream {
live on;
#record off;
hls on;
hls_path /mnt/hls;
#hls_fragment 6s;
}
}
}
为了接收 RTMP 流,我使用 rtmp://ip/stream/streamname
它工作正常,为了接收 HLS,我尝试使用 http://ip:8080/hls/streamname.m3u8
如果我在浏览器中键入它,它会给我 .m3u8 文件,但没有当我尝试在 HTML5 播放器中播放该文件时,它似乎在网页上运行。我正在通过这些页面进行测试:https://videojs.github.io/videojs-contrib-hls/ and https://demo.theoplayer.com/test-hls-mpeg-dash-stream
任何人都可以帮助我理解我做错了什么吗?
如果您分享在这些页面上测试 HLS 流时遇到的控制台或网络错误类型,将会有所帮助。
它可能会为您提供一些解决问题的见解。例如,您可能会通过从不同的域访问您的流来获取访问控制允许来源错误。尝试在 nginx.conf 中取消注释这一行并重新加载。
#add_header Access-Control-Allow-Origin *;
我的 hls 位置块中也有对 "video/mp2t ts;" 的引用。
location /hls/ {
# Serve HLS fragments
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
add_header 'Access-Control-Allow-Origin' '*';
}
干杯。
伊恩
下一行:#hls_fragment6s;
添加代码:deny_play_all;
如果rtmp 流可以播放,显然您不能播放hls 或dash 文件。我不知道为什么。它对我有用。
nginx-1.21.1
location /hls/ {
# Serve HLS fragments
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
**root /tmp;** -> **alias /tmp;**
add_header Cache-Control no-cache;
add_header 'Access-Control-Allow-Origin' '*';
}
我在我的 linux 服务器上安装了带 RTMP 模块的 nginx,我希望它从 Open Broadcaster Software 接收 RTMP 流,将其转换为 HLS 并在我的私人网站上播放 HTML5 玩家。通过 RTMP 接收流有效,但 HLS 流似乎无效。我当前的配置是这样的:
worker_processes 1;
events {
worker_connections 1024;
}
http {
#include mime.types;
#default_type application/octet-stream;
sendfile off;
#keepalive_timeout 65;
server {
listen 8080;
#server_name localhost;
#location / {
# root html;
# index index.html index.htm;
#}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
# root html;
#}
#*********************************************************************************************************************************
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
}
root /mnt/;
add_header Cache-Control no-cache;
# To avoid issues with cross-domain HTTP requests (e.g. during development)
#add_header Access-Control-Allow-Origin *;
}
#*********************************************************************************************************************************
}
}
rtmp {
server {
listen 1935;
chunk_size 4096;
application stream {
live on;
#record off;
hls on;
hls_path /mnt/hls;
#hls_fragment 6s;
}
}
}
为了接收 RTMP 流,我使用 rtmp://ip/stream/streamname
它工作正常,为了接收 HLS,我尝试使用 http://ip:8080/hls/streamname.m3u8
如果我在浏览器中键入它,它会给我 .m3u8 文件,但没有当我尝试在 HTML5 播放器中播放该文件时,它似乎在网页上运行。我正在通过这些页面进行测试:https://videojs.github.io/videojs-contrib-hls/ and https://demo.theoplayer.com/test-hls-mpeg-dash-stream
任何人都可以帮助我理解我做错了什么吗?
如果您分享在这些页面上测试 HLS 流时遇到的控制台或网络错误类型,将会有所帮助。
它可能会为您提供一些解决问题的见解。例如,您可能会通过从不同的域访问您的流来获取访问控制允许来源错误。尝试在 nginx.conf 中取消注释这一行并重新加载。
#add_header Access-Control-Allow-Origin *;
我的 hls 位置块中也有对 "video/mp2t ts;" 的引用。
location /hls/ {
# Serve HLS fragments
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
add_header 'Access-Control-Allow-Origin' '*';
}
干杯。 伊恩
下一行:#hls_fragment6s; 添加代码:deny_play_all;
如果rtmp 流可以播放,显然您不能播放hls 或dash 文件。我不知道为什么。它对我有用。
nginx-1.21.1
location /hls/ {
# Serve HLS fragments
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
**root /tmp;** -> **alias /tmp;**
add_header Cache-Control no-cache;
add_header 'Access-Control-Allow-Origin' '*';
}