.net 框架中 RTSP 网络摄像机的后台播放和输出到 http 流

Background playback for RTSP IP Camera in .net framework and output to http stream

我目前正在研究允许客户端实时回放 IP 摄像机的最佳方法,其中我的服务器是使用 RTSP 抓取流的源,因此同时我需要能够将实时回放输出到HTML5 标准播放器 "the video tag" 无论何时,我都需要能够快速获取快照。

我尝试使用 WebRequest 获取快照,但问题是相机准备快照需要大约 1 秒。

我尝试了这里的另一个解决方案 但是该图像需要 2 秒才能为我的应用程序做好准备。

更新 1

我通过命令行界面使用 ffmpeg.exe 并传递了 args:

"-i rtsp://UN:PW@IP:554/live -vframes 1 -f singlejpeg -"

然后在我开始该过程后,我使用以下方法将流读入输出,这是我的图像二进制文件:

process.StandardOutput.BaseStream.CopyTo(output);

现在我唯一剩下的问题是我想继续读取 rtsp 并以例如“每秒 2 帧”的速率获取二进制文件。有任何可行的代码想法吗?

好吧,我想我想出了如何做我需要做的事情。 首先,记下可以正常使用 ffmpeg 的命令参数:

-rtsp_transport tcp -i rtsp://UN:PW@IP:554/live -err_detect ignore_err -r 10 -f image2pipe -

接下来,您已经这样设置了您的流程:

using (var process = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                RedirectStandardInput = true,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                UseShellExecute = false,
                CreateNoWindow = true,
                Arguments = arguments,
                FileName = fFMpegExePath
            },
            EnableRaisingEvents = true
        })
        {
            // code body
        }

现在您需要 process.Start() 然后开始收听 process.StandardOutput.BaseStream 作为 FileStream 和逐字节处理读取。 请注意,我设置了一个低帧率 -r 10 因为如果根本不设置,流将无缘无故挂起,但在这种情况下我测试了任务超过 2 小时并且它永远不会失败。

希望对遇到此问题的各位有所帮助。