【问题标题】:Redirect FFMPEG's output to multiple named pipes on Windows将 FFMPEG 的输出重定向到 Windows 上的多个命名管道
【发布时间】:2016-09-29 15:18:18
【问题描述】:

我正在尝试将视频和音频数据流式传输到 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 之道。 :-)
  • 我已经将它与单个输入和输出管道一起使用,没有问题...不需要使用pipe:,我确实使用-y 参数来强制覆盖。我确定它也适用于多个管道......也许你使用的是旧的 FFmpeg 版本?

标签: windows ffmpeg named-pipes interprocess


【解决方案1】:

根据我的经验,使用 FFmpeg 管道到多个输出从未奏效。建立管道涉及阻塞类型的数据传输。馈送器 FFmpeg 期望被馈送的程序在发送其他数据块之前“吃掉”数据块。如果有两个馈送,FFmpeg 不知道哪个馈送程序具有优先级,并且当有疑问时,FFmpeg 什么也不做,因此 FFmpeg 永远挂起,等待两个管道另一侧的某些事情发生。

【讨论】:

    猜你喜欢
    • 2015-11-16
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    相关资源
    最近更新 更多