将 FFMPEG 的输出重定向到 Windows 上的多个命名管道

问题描述 投票:0回答:2

我正在尝试将视频和音频数据流式传输到 Windows 上的两个独立的命名管道

ffmpeg.exe -f dshow -i video="My camera name":audio="My microphone name" -map 0:1 -ac 1 -f f32le \\.\pipe\audioStream -map 0:0 -f mjpeg \\.\pipe\videoStream

问题是 FFMPEG 似乎不理解输出

\\.\pipe\audioStream
\\.\pipe\videoStream
是管道并将它们视为文件。

  1. 如果 FFMPEG 启动时已经创建了管道,则它想要覆盖它们并失败。
  2. 否则,它会抱怨路径不存在并失败。

据我了解,指定

pipe:
协议应该可以解决问题,但我不知道如何正确使用它,即使使用单个管道也是如此。我试过了:

  1. pipe:pipeName
  2. pipe:pipe\pipeName
  3. pipe:\\.\pipe\pipeName
  4. pipe://pipeName
  5. pipe://pipe\pipeName
  6. pipe://\\.\pipe\pipeName

我总是得到相同的结果:输出被写入控制台而不是管道。如果 FFMPEG 启动时管道已经存在,则没有任何东西连接到管道。

是否可以在 Windows 上将 FFMPEG 与命名管道一起使用?如果是,正确的方法是什么?

windows ffmpeg named-pipes interprocess
2个回答
0
投票

根据我的经验,使用 FFmpeg 管道传输到多个输出从来没有成功过。建立管道涉及阻塞类型的数据传输。馈送器 FFmpeg 期望馈送的程序在发送其他数据块之前“吃掉”数据块。如果有两个源,FFmpeg 不知道哪个源程序具有优先级,并且当有疑问时 FFmpeg 不执行任何操作,因此 FFmpeg 永远挂起,等待两个管道另一侧发生某些情况。


0
投票

有人可以帮助我在 Windows 中的 ffmpeg 上使用命名管道的正确方法吗? 例如:\.\pipe\Stream 总是显示“\.\pipe\Stream:没有这样的文件或目录” 所以请帮助我如何在 Windows 中创建 mkfifo 替代品

© www.soinside.com 2019 - 2024. All rights reserved.