我正在尝试将视频和音频数据流式传输到 两个独立的命名管道 在 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
是管道并将它们视为文件。据我了解,指定
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/