FFmpeg Node.js实时网络流媒体

时间:2017-12-20 12:17:53

标签: node.js ffmpeg video-streaming hapijs

我正在尝试使用FFmpeg和hapi.js创建某种代理服务器以获取IP摄像机源并通过http传输它 最重要的是,无论是否被监视,都必须存在于http-server路由之外。所以我创建这样的提要

let ffmpeg = require('fluent-ffmpeg')

let ffproc = ffmpeg()
    .input('some_link')
    .format('flv')
    .videoCodec('copy')
    .noAudio()


  let feed = ffproc.pipe({end: true})

和http-server

const Hapi = require('hapi')

const server = new Hapi.Server({
  host: 'localhost',
  port: 3000
})

server.route({
  method: 'GET',
  path: '/live',
  handler: function (request, h) {
      return feed
  }
})

server.start((err) => {   
  console.log(`Server running at: ${server.info.uri}`)
})

我使用vlc或ffplay获取了我的Feed,但在我断开ffproc结束之后,我也无法在以后重新连接。 我已尝试克隆管道流,但它没有帮助,进程仍然存在,但ffplay显示错误'处理输入时找到的无效数据'而不是Feed。 koa服务器显示相同的行为,expressfastify我无法正常工作。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

澄清一下:您的问题是,在断开通过vlc或ffplay检查您的Feed后,您之后无法重新连接?

如果您需要在服务器路径之外连续运行流,那么您应该将Feed创建移动到完全独立的流程,并根据需要将服务器绑定到该流程输出。可能发生的情况是,当您断开Feed变量的范围正在发生变化,并且它曾经不再是全局可访问的,因此当您尝试重新连接时,服务器无法调用它。