ffmpeg 输出管道到命名 Windows 管道

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

这个问题与我之前的问题相关:将原始帧转换为 webm 直播流

我想将视频传输到 ffmpeg 并通过另一个管道读回它,但我无法将

ffmpeg.exe
的输出传输到 Windows 上的命名管道。

我在 C# 中对管道的定义:

NamedPipeServerStream p_to_ffmpeg;
NamedPipeServerStream p_from_ffmpeg;
p_to_ffmpeg = new NamedPipeServerStream("to_ffmpeg", PipeDirection.Out, 1, PipeTransmissionMode.Byte);
p_from_ffmpeg = new NamedPipeServerStream("from_ffmpeg", PipeDirection.In, 1, PipeTransmissionMode.Byte);

然后我在一个单独的进程中启动

ffmpeg.exe
,并使用以下选项:
-f rawvideo -vcodec rawvideo -video_size 656x492 -r 10 -pix_fmt rgb24 -i \\.\pipe\to_ffmpeg  -c:v libvpx  -pass 1 -f webm \\.\pipe\from_ffmpeg

ffmpeg.exe 拒绝写入管道并出现以下错误:

File '\\.\pipe\from_ffmpeg' already exists. Overwrite ? [y/N]

当我用文件名替换“输出管道”时,它的作用就像魅力:

-f rawvideo -vcodec rawvideo -video_size 656x492 -r 10 -pix_fmt rgb24 -i \\.\pipe\to_ffmpeg  -c:v libvpx  -pass 1 -f webm output.webm

如何让 ffmpeg 写入 Windows 中的命名管道?

编辑:当我使用 ffmpeg 的

-y
选项强制写入管道时,出现以下错误:
Could not write header for output file #0 (incorrect codec parameters ?): Error number -32 occurred

c# windows ffmpeg pipe named-pipes
1个回答
7
投票

似乎可以通过在 ffmpeg 命令中添加

-y
(覆盖)选项并指定管道的缓冲区大小来解决该问题。

我的 ffmpeg 命令(请参阅 aergistal 的评论,为什么我也删除了

-pass 1
标志):
-y -f rawvideo -vcodec rawvideo -video_size 656x492 -r 10 -pix_fmt rgb24 -i \\.\pipe\to_ffmpeg -c:v libvpx -f webm \\.\pipe\from_ffmpeg

并定义命名管道如下:

p_from_ffmpeg = new NamedPipeServerStream('from_ffmpeg', 
    PipeDirection.In, 
    1, 
    PipeTransmissionMode.Byte, 
    System.IO.Pipes.PipeOptions.WriteThrough, 
    10000, 10000);
© www.soinside.com 2019 - 2024. All rights reserved.