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

标签 windows ffmpeg named-pipes interprocess

我正在尝试将视频和音频数据流式传输到 两个独立的命名管道 在 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是管道并将它们视为文件。
  • 如果 FFMPEG 启动时已经创建了管道,它想要覆盖它们并失败。
  • 否则,它会提示路径不存在并失败。

  • 据我了解,指定 pipe:协议(protocol)应该可以解决问题,但我无法弄清楚如何正确使用它,即使使用单个管道也是如此。我努力了:
  • pipe:pipeName
  • pipe:pipe\pipeName
  • pipe:\\.\pipe\pipeName
  • pipe://pipeName
  • pipe://pipe\pipeName
  • pipe://\\.\pipe\pipeName

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

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

    最佳答案

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

    关于windows - 将 FFMPEG 的输出重定向到 Windows 上的多个命名管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37548606/

    相关文章:

    c++ - 在 Windows 中使用 boost::program_options 从命令行参数读取 Unicode 字符

    windows - 是否有用于向任务栏图标添加徽章的 Windows API?

    windows - 适用于 IIS 7.5 的 IIS 元数据库资源管理器

    python - FFmpeg:是否可以逐 block 运行 PCM 音频数据的管道 I/O(过滤)?

    c++ - AVFrame 到 QImage 内存泄漏

    c# - 使用 NetNamedPipe 的 WCF 多个应用程序

    python - 使用 pipe() 和 fdopen() 将数据从 Python 脚本传递到 Windows 中的 C++ 应用程序

    java - 如何在 Java 中使用 FFMPEG?

    linux - 守护进程不会杀死正在从命名管道读取的 child

    c# - 如何在托管代码中创建 Windows 安全描述符?