Я пишу код, который считывает данные h264 из сокета, передает его на h264dec.exe (openh264 decoder), а затем обрабатывает данные YUV в декодере YUV-RGB. Моя проблема в том, что openh264dec работает как «h264dec video.h264 out.yuv».Подставить аргумент с трубками
И я действительно не знаю, как обращаться с аргументами в коде, чтобы служить им в качестве потоков. Для целей обучения я пытался h264dec video.h264 \\.\pipe\h264input
, но он не работает, код, как показано ниже:
NamedPipeServerStream pipeServ = new NamedPipeServerStream(Utility.DecoderOutputPipeName, PipeDirection.InOut);
Openh264.Openh264 openh264 = new Openh264.Openh264();
openh264.Start();
pipeServ.WaitForConnection();
Openh264.YUVDecoder decoder = new Openh264.YUVDecoder(pipeServ, 640, 480);
decoder.NewFrame += Decoder_NewFrame;
decoder.Start();
Процесс:
public Openh264()
{
string args;
//args = @" \\.\pipe\" + Utility.DecoderInputPipeName;
args = @"C:\test\vid.h264";
args += @" \\.\pipe\" + Utility.DecoderOutputPipeName;
openh264 = new Process();
openh264.StartInfo.CreateNoWindow = true;
openh264.StartInfo.UseShellExecute = false;
openh264.StartInfo.FileName = "h264dec.exe";
openh264.StartInfo.Arguments = args;
}
YUV декодер принимает в качестве объекта входного потока, ширина и высота. Программа зависает на WaitForConnection()
и без этой функции декодер YUV
выдает исключение при чтении из потока.
Возможно ли это сделать так? Заменить аргументы с помощью труб?