无法使用FFMPEG重新流式传输到MP4 HTML5视频

时间:2014-02-15 22:08:49

标签: html5 node.js ffmpeg

我一直在努力让FFMPEG的直播工作时间长达数小时,因此在这里举起白旗并寻求帮助。

我的情况是我有一个IP安全摄像头,我可以通过RTSP(h.264)成功连接并将视频保存为文件段,它们可以通过像VLC这样的独立应用程序或通过node.js播放。发送'video / mp4'&的网络服务器应用程序保持活动标题并将之前由FFMPEG保存的mp4文件流式传输到HTML5视频客户端。

但是,我想采用相同的RTSP流并将其重新流式传输到HTML5客户端。我知道HTML5客户端位和FFMPEG重新转换为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进行实时重新流式传输的任何想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

好奇你有没有解决它?我做的基本上是相同的事情,除了它是屏幕演员....我已经切换到使用完美播放的webm格式...但是视频将“滞后”多了几秒钟......对我不好,但可能适合你