ソケットから h264 データを読み取り、それを h264dec.exe ( openh264 デコーダー) に渡し、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
、ストリームからの読み取り中にデコーダーが例外をスローします。
このように機能させることさえ可能ですか?引数をパイプで置き換えますか?