我一直在努力让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进行实时重新流式传输的任何想法吗?感谢。
答案 0 :(得分:0)
好奇你有没有解决它?我做的基本上是相同的事情,除了它是屏幕演员....我已经切换到使用完美播放的webm格式...但是视频将“滞后”多了几秒钟......对我不好,但可能适合你