当前位置: 首页 > 知识库问答 >
问题:

Nginx RTMP/HLS-流到ffmpeg并输出HLS

端木志诚
2023-03-14

在这一点上,我的解决方案是工作的,但只能作为RTMP,我可以使用URL完美地观看我的流:

rtmp://X.X.X.X:1935/show/name

但问题是我的LG智能电视使用WebOS不支持RTMP,我真的很想在那里播放我的流。我现在能看到的唯一解决方案是使用HLS。使用HLS也很好,但我需要在打开电视中的HLS流之前执行我的ffmpeg命令,否则它将不会创建在电视上显示流所需的文件。

http 
{
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/vnd.apple.mpegurl m3u8;
        video/mp2t ts;
    }

    root /mnt/;
    }
}

}
rtmp {
server {
    listen 1935;

    chunk_size 4000;
    buflen 5s;

    application show {
        live on;

    exec_pull ffmpeg -re -i http://stream-coming.com/$name.ts -c:v libx264 -preset faster -pix_fmt yuv420p -c:a aac -f flv rtmp://localhost/show/$name;

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

共有1个答案

南门宇
2023-03-14

尝试如下所示:

rtmp {
    server {
        listen 1935;

        application show {
            live on;

            exec_push ffmpeg -re -i rtmp://stream-coming.com:1935/$name.ts
            -c:v libx264 -preset faster -pix_fmt yuv420p -c:a aac -f flv rtmp://localhost:1935/hls/$name;
            exec_kill_signal term;
        }

        application hls {

            # Turn on HLS
            live on;
            hls on;
            hls_path /mnt/hls/;
            hls_fragment 3;
            hls_playlist_length 12;
            # disable consuming the stream from nginx as rtmp
            allow publish 127.0.0.1;
            deny play all;
        }
    }
}
 类似资料:
  • 我正在构建一个web应用程序,涉及服务各种视频内容。Web友好的音频和视频编解码器处理没有任何问题,但我在设计与HTML5视频播放器如mkv容器或H265不兼容的视频文件交付时遇到了麻烦。 我的技术可行吗?因为只有在关键帧之后才可能进行分段,所以预置分段持续时间会有什么问题吗?ffmpeg是否可以绕过这个问题? 我对视频处理和生成的知识充其量只是微不足道。我将非常感谢一些指点。

  • 我遵循了这篇关于将RTMP设置为HLS流的指南-https://docs.peer5.com/guides/setting-up-hls-live-streaming-server-using-nginx/ 我已经尝试将该配置中的rtmp链路更改为内部IP和外部IP,因为它可以被访问。我测试了从网络上的另一台计算机观看rtmp,以确认它是正常的。我想避免使用ffmpeg代码转换,因为服务器没有这种

  • 我正在寻找一个命令ffmpeg,它保存活的输入(rtmp或hls)到hls m3u8与mp4段文件。我知道这是可能的,即有infohttps://bitmovin.com/hls-news-wwdc-2016/,但我尝试的每个命令都生成ts文件。有人知道解决办法吗?

  • 目标:使用OBS接收来自PC的流,使用Nginx RTMP模块接收流,并输出给观众,以便他们可以在PC和移动上观看实时流。为此,Nginx必须用HLS输出实时流。 我的合作伙伴已经设置了以下Nginx文件,但没有任何结果(它是在stackoverflow-->answer的回答之后完成的) 这是OBS流配置的捕获: PC可以很好地查看流,但移动不能。 感谢任何人的任何投入。

  • 我正尝试在iOS应用程序中使用ffmpeg将本地。mp4视频转换为HLS。我已经使用pods集成了ffmpeg包装器,并生成了所有分段的。ts文件和m3u8文件,但是一些。ts文件段没有在。m3u8播放列表文件中列出,如下所示。它总是列出最后5个视频片段。 我使用以下代码生成HLS。 还有其他方法可以做到这一点吗?