我有来自远程网络摄像头的h.264数据流。如果我将它保存到文件中,我可以在VLC中播放它(意味着数据完好无损)。
最终目标是将此流转换为虚拟网络摄像头。环顾四周后,我发现很多可能的解决方案 - 因此我想在MP4格式的本地IP上提供h.264数据。
两个问题:
第一次,我正在尝试使用ffmpeg将h.264与mp4容器包装在一起(使用fluent-ffmpeg npm库将ffmpeg API公开给Nodejs。)
当我处理静态文件(不是流)时,一切都运行良好。 e.g.`
var ffmpeg = rquire('fluent-ffmpeg')
var readH264 = fs.createReadStream('./vid.h264')
var proc = ffmpeg(readH264).clone().toFormat('mp4').output('./vid.mp4').run()
`
但是当我尝试提供一个流时 - 它会抛出一个错误“ffmpeg退出代码1:无法为输出文件写标题..” `
var wrtieMp4 = fs.createWriteStream('./vid.mp4')
var proc = ffmpeg(readH264).clone().toFormat('mp4').output(wrtieMp4).run()`
如何添加标题..?
第二次,我对传输层(rtp,rtsp等)感到有点困惑。创建mp4流后 - 用MIME类型video / mp4提供流是不是足够了?它似乎与静态文件一起使用。 `
let read = fs.createReadStream('./vid.mp4')
let server = http.createServer(function (req, res) {
res.writeHead(200, {'Content-type': "video/mp4"})
read.pipe(res)
}).listen(9000)
`
答案 0 :(得分:2)
您不能将MP4用于此目的。关闭流后,MP4必须在文件开头写入标题。你得到"不能写标题"错误,因为ffmpeg知道它将无法回滚流并稍后写入标头。不,你不能使用rtsp eaither。浏览器只能做http。使用专为此目的设计的DASH格式。