C#处理标准输出(管道)的FFMPEG输出

时间:2018-01-30 08:16:34

标签: c# .net ffmpeg stream video-processing

我想从FFMPEG标准输出中提取当前图像并在C#表单上显示它。流源本身是h264原始数据,转换为图像并通过管道传输到标准输出。这是我的代码,但我不知道如何处理输出(可能是MemoryStream):

public Process ffproc = new Process();
private void xxxFFplay()
{
    ffproc.StartInfo.FileName = "ffmpeg.exe";
    ffproc.StartInfo.Arguments = "-y -i udp://127.0.0.1:8888/ -q:v 1 -huffman optimal -update 1 -f mjpeg -";

    ffproc.StartInfo.CreateNoWindow = true;
    ffproc.StartInfo.RedirectStandardOutput = true;
    ffproc.StartInfo.UseShellExecute = false;

    ffproc.EnableRaisingEvents = true;
    ffproc.OutputDataReceived += (o, e) => Debug.WriteLine(e.Data ?? "NULL", "ffplay");
    fproc.ErrorDataReceived += (o, e) => Debug.WriteLine(e.Data ?? "NULL", "ffplay");
    ffproc.Exited += (o, e) => Debug.WriteLine("Exited", "ffplay");
    ffproc.Start();

    worker = new BackgroundWorker();
    worker.DoWork += worker_DoWork;
    worker.WorkerReportsProgress = true;
    worker.ProgressChanged += worker_ProgressChanged;
    worker.RunWorkerAsync();
}

public void worker_DoWork(object sender, DoWorkEventArgs e)
{
    try
    {
        var internalWorker = sender as BackgroundWorker;
        Process p = e.Argument as Process;
        buffer = new MemoryStream();
        bufferWriter = new BinaryWriter(buffer);
        using (var reader = new BinaryReader(p.StandardOutput.BaseStream))
        {
            while (true)
            {
                bufferWriter.Write(1);
                var img = (Bitmap)Image.FromStream(buffer);
                pictureBox1.Image = img;
                //get the jpg image
            }
         }
     }
     catch (Exception ex)
     {
           // Log the error, continue processing the live stream
     }
 }

任何帮助将不胜感激!

0 个答案:

没有答案