gpt4 book ai didi

nginx - FFmpeg -> JSMpeg Websocket 反复关闭

转载 作者:行者123 更新时间:2023-12-04 23:25:39 24 4
gpt4 key购买 nike

我正在尝试创建一个相当简单的流媒体服务器/站点。这是当前的流程:

  • OBS 流到 RTMP URL
  • Nginx 接受 RTMP 流并使用 exec-push让 FFmpeg 拾取流并对其进行转码
  • FFmpeg 对流进行转码并将其输出到 JSMpeg 应用程序,该应用程序在网页上显示流。

  • 当我有我的 exec_push声明如下,除了浏览器显示 Possible garbage data. Skipping. 外,一​​切似乎都运行良好在它接收的每一帧上:
    exec_push /usr/bin/ffmpeg -re -i rtmp://127.0.0.1:1935/$app/$name -f mpeg1video  http://localhost:8080/supersecret;

    这种行为是可以理解的,因为 JSMpeg 必须接收 MPEG-TS 数据,而不是 MPEG1 数据。它看到 MPEG1 帧并认为它们是垃圾。

    所以通过一些在线研究,我发现了这个:
    exec_push /usr/bin/ffmpeg -re -i rtmp://127.0.0.1:1935/$app/$name -c:v copy -c:a copy -f mpegts http://localhost:8080/supersecret;

    据推测,这应该将我的 RTMP 流转码为 MPEG-TS 格式,该格式应该与 JSMpeg 兼容。

    但是,使用第二个版本的命令,我的 FFmpeg -> JSMpeg 流一直在连接和断开连接,连接和断开连接等等。在终端中观察到此行为:
    Stream Connected: ::1:40208
    close
    Stream Connected: ::1:40212
    close
    Stream Connected: ::1:40216
    close
    Stream Connected: ::1:40220
    close
    Stream Connected: ::1:40224
    close
    ...

    什么会导致这个?我很确定问题出在我的 exec_push 中。命令。 OBS 是完美的内容,它告诉我流正在发送到服务器,如果我执行 push ,我可以很好地对 Ustream 进行测试推送,这告诉我 Nginx 至少在处理流时取得了一定程度的成功。

    免责声明:我不知道我在说什么。我对 FFmpeg 和 JSMpeg/Node 的了解都来自我在网上找到的代码片段。

    最佳答案

    答案归功于@Mulvya。

    在第二个 exec_push命令,-c:v copy -c:a copy不应该在那里。 通过使用它,不会进行任何转码——它只是一个流传递。

    删除 -c:v copy -c:a copy从命令并重新启动 Nginx 会产生一个成功的流。

    关于nginx - FFmpeg -> JSMpeg Websocket 反复关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49247726/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com