首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置NGINX rtmp服务器,以便同时发布rtmp流和hls?

如何配置NGINX rtmp服务器,以便同时发布rtmp流和hls?
EN

Stack Overflow用户
提问于 2021-12-04 21:27:16
回答 1查看 606关注 0票数 1

我现在有一个运行的ffmpeg bash脚本,它从一个实时的摄像机提要中提取一个RTSP提要,然后将它作为RTM`发布到我的Nginx服务器上。

对服务器的要求是,使用可以订阅Nginx服务器发布的RTMP提要或HLS流。

我发现的问题是RTMP流会在一段时间后结冰,尽管HLS流继续工作。

我想知道这是否是因为它是一个单独的进程,而不是由Nginx本身通过它的exec命令执行的进程。

而且,我没有在这台服务器上进行调优,所以我不知道我需要更改一些配置。

这是我的两个剧本。

代码语言:javascript
复制
#!/bin/bash

sleep 1

    VID_SOURCE="rtsp://camerastream.com/MediaInput/h264/stream_"
    VIDEO_OPTS="-vcodec libx264 -video_size 1280x720 -b:v 2048k"
    AUDIO_OPTS="-c:a copy"
    VID_OUTPUT="rtmp://localserver:1935/live/livestream"
    
    ffmpeg -rtsp_transport tcp -r 15 -i $VID_SOURCE $VIDEO_OPTS $AUDIO_OPTS -f flv $VID_OUTPUT

然后我的Nginx配置

代码语言:javascript
复制
vents {}

rtmp { 
    server { 
        listen 1935; 

        application live { 
            live on; 
            interleave on;

            # Turn on HLS
            hls on;
            hls_path /tmp/hls;
            hls_playlist_length 15s;

        }
    } 
} 
 
http {
    default_type application/octet-stream;
 
   server {
        listen 8080;

        location /hls {

            # 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 /tmp/;

        }
    }
}

目标是拥有一台订阅者可以观看rtmp提要或HLS提要的服务器。

EN

回答 1

Stack Overflow用户

发布于 2022-01-17 04:28:12

你可以播放RTMP和HLS流。我认为问题不在于协议,而在于你相机上的内容或时间戳。

代码语言:javascript
复制
The problem I'm finding is that the RTMP stream freezes after a while,
although the HLS stream continues to works.

你可以试试:

  1. 使用较小的比特率,如-b:v 500k
  2. 也可以转码音频流,或者禁用音频。
  3. 尝试另一个媒体服务器,以启用空管 -传递时间戳.
  4. 尝试另一个RTMP播放器,比如VLC或ffplay。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70229608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档