node.js实现ffmpeg动态切换输入源推流(不关闭进程)

本文探讨了在Node.js中使用ffmpeg进行推流时如何动态改变输入源的问题。由于ffmpeg进程只能接受一个输入源,作者尝试了关闭并重启进程、使用管道和TCP socket作为中介,最终通过在客户端创建新的ffmpeg实例来控制传输速度和格式,实现输入源的动态切换。在遇到ffmpeg结束时的错误提示时,作者选择忽略并通过kill()结束ffmpeg进程。
摘要由CSDN通过智能技术生成

node.js自己已经封装了ffmpeg了,但是依然没有解决动态改变输入源的方法,因为ffmpeg同一个进程只接受一个输入源,这个输入源可以是文件路径,也可以是一个可读的流数据。起初的想法是用开启一个进程的方法

const spawn = require('child_process').spawn

我们来操作命令去不断结束上一次操作然后重新操作指令,但是我们推流到服务器的话,发现服务器要重新接受数据,而且如果操作频繁的话,对于关闭开启的子进程比较麻烦,在用进程命令调用ffmpeg时,因为,ffmpeg也是一个进程,所以一旦执行命令,就说额外开启了两个进程,关闭进程很麻烦。

const Ffmpegs = require('fluent-ffmpeg')

后来发现node.js本身是有封装的对ffmpeg。用法如下

	playsure = new Ffmpegs()
    playsure.input('E://KuGou//08.mp3')
    playsure.inputOption('-re')
    playsure.outputOptions([
      '-rtsp_transport',
          'tcp',
          '-f',
          'rtsp'
   ])
    playsure.output('rtsp://47.103.130.92:554')
    playsure.run()
    playsure.on('end', () => {
   
      console.log('结束end')
    })

进行向特定服务器推流。我们指定了一帧一帧的推,且是tcp方式推送rtsp流。
这样也实现了推流的效果,但是当你重新指定输入源的时候是不允许的,需要先结束之前的ffmpeg在指定ffmpeg输入源,这样还是要先断开一次连接,服务器那边还要重新接受数据才行。
后来想到用管道来传输,想的只用改变输入端的数据,将管道的输出端放到ffmpeg的输入端,只要不关闭管道,因该就可以实现输入源的切换,进行了多方搜索,发现在node.js中只能有

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值