【问题标题】:can't re-stream using FFMPEG to MP4 HTML5 video无法使用 FFMPEG 重新流式传输到 MP4 HTML5 视频
【发布时间】:2014-03-15 06:52:08
【问题描述】:

数小时以来,我一直在努力让 FFMPEG 进行实时流式传输,因此举起白旗并在这里寻求帮助。

我的场景是我有一个 IP 安全摄像头,我可以通过 RTSP (h.264) 成功连接并将视频保存为文件段,它们可以通过 VLC 等独立应用程序或通过 node.js 正常播放发送“video/mp4”和 keep-alive 标头并将 FFMPEG 先前保存的 mp4 文件流式传输到 HTML5 视频客户端的 Web 服务器应用程序。

但是,我想获取相同的 RTSP 流并将其重新流式传输到 HTML5 客户端。我知道 HTML5 客户端位和 FFMPEG remuxing to MP4 与 MP4 录制/流式传输一样工作。

我尝试了以下方法:

1) 将输出设置为 HTTP 字符串。我不认为 FFMPEG 支持这一点,因为我收到“输入/输出错误”,并且 FFMPEG 文档谈到了另一个名为 FFSERVER 的应用程序,它在 Windows 上不受支持

ffmpeg -i rtsp://admin:12345@192.168.1.234:554 -vcodec copy -f mp4 -movflags frag_keyframe+empty_moov http://127.0.0.1:8888

2) 由于 ffmpeg 在 node.js 中作为 spawn 运行,我尝试使用与录制播放流相同的标头将 STDOUT 管道传输到节点 http 服务器。我可以在 VLC 中查看此流,这是一个好兆头,但我无法让 HTML 客户端识别流并且它显示为空白,或者偶尔显示流的静态图像。

var liveServer = http.createServer(liveStream); 
var liveStream = function (req, resp) {                                            // handle each client request by instantiating a new FFMPEG instance
    resp.writeHead(200, {"Content-Type": "video/mp4", "Connection": "keep-alive"});
        var xffmpeg = child_process.spawn("ffmpeg", [
            "-i", "rtsp://admin:12345@192.168.1.234:554" , "-vcodec", "copy", "-f", "mp4", "-movflags", "frag_keyframe+empty_moov", "-"   // output to stdout
            ],  {detached: false});

            xffmpeg.stdout.pipe(resp);

            xffmpeg.on("exit", function (code) {
                 console.log("Xffmpeg terminated with code " + code);
            });

            xffmpeg.on("error", function (e) {
                  console.log("Xsystem error: " + e);
            });

            xffmpeg.stdout.on("data",function(data) {
                  console.log('Xdata rcv ' + data);
            });

            xffmpeg.stderr.on("data", function (data) {
                  console.log("XFFMPEG -> " + data);
    }
}

我已经尝试过 IE11 和 Chrome HTML5 客户端。

我怀疑正在发送的流格式有些不正确,它会停止 HTML5 视频客户端,但不足以停止 VLC。令人恼火的是,上面的代码可以很好地播放已录制的 MP4 流。

任何想法如何通过 FFMPEG 进行实时重新流式传输?谢谢。

【问题讨论】:

    标签: html node.js ffmpeg


    【解决方案1】:

    只是好奇你解决了吗?除了屏幕投射之外,我基本上在做同样的事情......我已经切换到使用完美播放的 webm 格式......但是视频会“滞后”几秒钟......对我不好,但可能对你有用

    【讨论】:

    • 您好,感谢您的回复。不幸的是,我仍在寻找 webM 将无法工作,因为它需要转码(因为 IP 摄像机发送 H.264 可以轻松地重新混合到 MP4 流中,而几乎不需要 CPU 使用)。我已经弄清楚 HTML5 浏览器需要对流进行分块,否则它将等待视频完全加载(即使是空的 moov atom),所以我正在探索如何编写一个节点 http 服务器来分块响应.
    • 我得到了这个工作,在这里看到一个相关的问题:stackoverflow.com/questions/21921790/…
    猜你喜欢
    • 2015-07-09
    • 1970-01-01
    • 2016-02-26
    • 2023-03-31
    • 2013-01-07
    • 2015-04-27
    • 1970-01-01
    • 2018-07-14
    • 2020-01-03
    相关资源
    最近更新 更多