【问题标题】:wrap h.264 stream in mp.4 container and stream it with nodejs将 h.264 流包装在 mp.4 容器中并使用 nodejs 流式传输
【发布时间】:2017-08-24 03:20:13
【问题描述】:

我有一个来自远程网络摄像头的 h.264 数据流。如果我将它保存到一个文件中,我可以在 VLC 中播放它(这意味着数据完好无损)。

最终目标是将此流转换为虚拟网络摄像头。环顾四周后,我发现 manyCam 作为一种可能的解决方案 - 因此我想以 MP4 格式在本地 IP 上提供 h.264 数据。

两个问题:

首先,我正在尝试使用 ffmpeg 将 h.264 与 mp4 容器包装起来(使用 fluent-ffmpeg npm 库,将 ffmpeg API 暴露给 Nodejs)。

当我处理静态文件(不是流)时,一切正常。例如`

var ffmpeg = rquire('fluent-ffmpeg')
var readH264 = fs.createReadStream('./vid.h264')
var proc = ffmpeg(readH264).clone().toFormat('mp4').output('./vid.mp4').run()

`

但是当我尝试提供流时 - 它会引发错误“ffmpeg exited with code 1: could not write header for output file..” `

var wrtieMp4 = fs.createWriteStream('./vid.mp4')
var proc = ffmpeg(readH264).clone().toFormat('mp4').output(wrtieMp4).run()`

我怎样才能将它添加到标题..?

第二,我对传输层(rtp,rtsp等)有点困惑。创建 mp4 流之后 - 使用 MIME 类型的视频/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)

`

【问题讨论】:

    标签: node.js video ffmpeg stream rtp


    【解决方案1】:

    您不能为此目的使用 MP4。 MP4 必须在流关闭后将标头写入文件的开头。您会收到“无法写入标头”错误,因为 ffmpeg 知道它将无法倒带流并稍后写入标头。不,您也不能使用 rtsp。浏览器只能做http。使用为此目的设计的格式,如 DASH。

    【讨论】:

    • 谢谢!您建议使用什么容器 insted..?
    • Dash 需要 mpd 文件 - 我如何从我的原始 h.264 数据生成一个?
    • staxk overflow 不是传统的留言板。它的问题-> 答案。不是对话。如果您有新问题,请发布新帖子。
    • 好的,我发布了以下问题 (stackoverflow.com/questions/43180020/…)。非常感谢您的帮助
    猜你喜欢
    • 2013-09-22
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2020-05-26
    • 2023-03-31
    • 2011-05-20
    • 2014-05-10
    相关资源
    最近更新 更多