首页 > 解决方案 > 在实时 ffmpeg 进程中交换输入流

问题描述

我对ffmpeg很陌生,所以如果这不可能或答案很明显,我深表歉意。我有一个 ffmpeg 进程,我正在将流(音频和视频)录制到 .webm 文件。

这是我服务器上的 webrtc 客户端,我想根据活动发言人的身份切换 ffmpeg 将哪个流作为输入。

只要我不尝试使用参数混淆流(视频和音频),它就可以正常工作:

 '-loglevel',
  'debug',
  '-protocol_whitelist',
  'pipe,udp,rtp',
  '-fflags',
  '+genpts',
  '-f',
  'sdp',
  '-i',
  'pipe:0',
  '-map',
  '0:v:0',
  '-c:v',
  'copy',
  '-map',
  '0:a:0',
  '-strict',
  '-2',
  '-c:a',
  'copy',
  '-flags',
  '+global_header',
  './recordings/ffmpegrecording.webm'

我用节点启动ffmpeg进程:

this._process = child_process.spawn('ffmpeg', this._commandArgs);

然后我将流传输到 ffmpeg 进程:

sdpStream.pipe(this._process.stdin);

有什么方法可以替换输入流而不杀死 ffmpeg 进程或以其他方式弄乱它(破坏元数据或其他不良后果)?

任何指向正确方向的指针将不胜感激!

非常感谢 :)

标签: javascriptnode.jsffmpegpipewebrtc

解决方案


推荐阅读