Ffmpeg Nginx RTMP拉至HLS流媒体
我已经按照此指南设置RTMP到HLS流媒体- RTMP流媒体工作正常,但由于某些原因,我无法让HLS链接到现有的RTMP服务器。我正在使用OBS流到RTMP,它被设置为x264,据我所知,音频的默认编解码器是AAC,所以我不确定为什么它不接收它 当前Nginx.confFfmpeg Nginx RTMP拉至HLS流媒体,ffmpeg,http-live-streaming,rtmp,obs,Ffmpeg,Http Live Streaming,Rtmp,Obs,我已经按照此指南设置RTMP到HLS流媒体- RTMP流媒体工作正常,但由于某些原因,我无法让HLS链接到现有的RTMP服务器。我正在使用OBS流到RTMP,它被设置为x264,据我所知,音频的默认编解码器是AAC,所以我不确定为什么它不接收它 当前Nginx.conf worker_processes auto; events { worker_connections 1024; } # RTMP configuration rtmp { server {
worker_processes auto;
events {
worker_connections 1024;
}
# RTMP configuration
rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4000;
# Define the Application
application show {
live on;
pull rtmp://localhost:1935/stream/test;
# Turn on HLS
hls on;
hls_path /mnt/hls/;
hls_fragment 3;
hls_playlist_length 60;
# disable consuming the stream from nginx as rtmp
deny play all;
}
# RTMP video on demand for mp4 files
application vod {
play /mnt/mp4s;
}
# RTMP stream using OBS
application stream {
live on;
}
}
}
http {
sendfile off;
tcp_nopush on;
aio on;
directio 512;
default_type application/octet-stream;
server {
listen 8080;
location / {
# Disable cache
add_header 'Cache-Control' 'no-cache';
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
types {
application/dash+xml mpd;
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /mnt/;
}
}
}
我已经尝试将配置中的rtmp链接更改为内部和外部IP,因为它可以访问。我测试了从网络上的另一台计算机上观看rtmp,以确认其功能正常。我想避免使用ffmpeg进行转码,因为服务器没有那种功能。所以我把它整理好了。基本上,我所要寻找的就是在不需要转码的情况下将RTMP发送到HLS。如果其他人看到了这一点并需要它,那么它非常简单,但是,您确实需要ffmpeg来实现它。实际上,您告诉ffmpeg将流传递给HLS,因为OBS已经采用了正确的视频/音频格式,所以它将毫无问题地接受它。我使用的命令是
ffmpeg -re -i rtmp://localhost:1935/stream/test -codec copy -f flv /mnt/hls/stream.m3u8
这样做对我的CPU几乎没有影响,这正是我所需要的。使用“推”而不是“拉”,并将流发送到hls应用程序
见此: