首页 > 解决方案 > .net 框架中 RTSP IP 摄像机的后台播放并输出到 http 流

问题描述

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

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

我尝试了另一种解决方案,例如从 RTSP 中提取缩略图,但该图像需要 2 秒才能为我的应用程序做好准备。

更新 1

我设法通过命令行界面使用ffmpeg.exe并传递参数来获得单帧:

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

然后在我开始这个过程之后,我将流读入输出,它是我的图像二进制文件,使用:

process.StandardOutput.BaseStream.CopyTo(输出);

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

标签: c#asp.net-mvcvideo-streamingrtspip-camera

解决方案


好吧,我想我知道如何去做我需要做的事情了。首先,记下对 ffmpeg 没有问题的命令 args:

-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 小时并且它永远不会失败。

我希望它可以帮助所有遇到这个问题的人。


推荐阅读