[英]ffmpeg output pipeing to named windows pipe
这个问题与我之前的问题有关: 将原始帧转换为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]
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
似乎可以通过在ffmpeg命令中添加-y
选项并为管道指定缓冲区大小来解决问题。
我的ffmpeg命令(请参阅airgistal的评论为什么我也删除了-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(pipename_from,
PipeDirection.In,
1,
PipeTransmissionMode.Byte,
System.IO.Pipes.PipeOptions.WriteThrough,
10000, 10000);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.