从交通摄像头到 Web 应用程序:流式传输架构概述

建立实时视频流管道并非易事。它需要多个组件协调工作,以无缝捕获、处理和传输视频数据。在本文中,我将向您介绍我所构建的架构,该架构用于将交通摄像头源转换为 RTSP 流,使用人工智能对其进行分析,并通过 WebRTC 将其传输到 Web 应用程序。虽然我不会深入探讨专有细节,但我会与大家分享我在使用过程中遇到的工具、技术和挑战。

问题:实时视频流和分析

目标是创建一个系统,以便:

  • 捕捉交通摄像头的实时视频流。
  • 将视频转换为 RTSP 流进行处理。
  • 使用人工智能模型分析视频,以获得实时洞察。
  • 将视频传输到 Web 应用程序,以供实时查看。

这就需要一个强大的架构,能够以最小的延迟处理视频摄取、转换、分析和交付。

从交通摄像头到 Web 应用程序:流式传输架构概述
流程序列图

架构

以下是架构的高级概览:

  • 交通摄像头源:实时视频源。
  • FFmpeg:用于处理视频并将其转换为 RTSP 流。
  • MediaMTX:充当 RTSP 服务器和 WebRTC 网关。
  • 人工智能模型:分析视频流以获得洞察力。
  • Web 应用:通过 WebRTC 显示实时视频流。

让我们分解每个组件。

1. 捕捉交通摄像头的图像

交通摄像头一般以 H.264 或 H.265 等格式输出视频,通常通过 RTSP 或 HTTP 等协议进行流式传输。然而,要找到与我的具体要求相匹配的免费视频源具有挑战性。经过一番搜索,我偶然发现了一个使用 MJPG 格式的交通摄像头视频源。虽然这不是我的首选,但我知道 FFmpeg 可以处理转换,所以这并不是一个大问题。

视频流 URL 示例:

http://64.191.148.57/mjpg/video.mjpg

如果你的摄像机原生不支持 RTSP,FFmpeg 就是你的救星。它能让你捕捉视频并将其转换为 RTSP 流,使其与你的流媒体管道兼容。

2. 使用 FFmpeg 处理视频

FFmpeg是一款功能强大的视频处理工具。我用它来:

  • 将视频转码为适合流媒体的格式。
  • 将视频打包成RTSP流。

FFmpeg 命令示例

ffmpeg -re -i <http://64.191.148.57/mjpg/video.mjpg> -c:v libx264 -preset ultrafast -tune zerolatency -g 30 -r 30 -f rtsp -rtsp_transport tcp rtsp://localhost:8554/[PATH_FOR_VIDEO_ON_MEDIA_MTX]

该命令的作用

此 FFmpeg 命令:

  • 将 MJPEG 视频流作为输入。
  • 使用 libx264 编解码器将其转换为 H.264 格式。
  • 通过 ultrafast 预设和 zerolatency 调整优化编码,以实现低延迟。
  • 通过 TCP 将视频输出为 RTSP 流。
  • 将视频流发布到指定的 RTSP URL。

3. 使用 MediaMTX 进行流式传输

MediaMTX是一款轻量级服务器,支持 RTSP、RTMP 和 WebRTC。我用它来:

  • 充当转换后的视频流的RTSP服务器。
  • 将 RTSP 流转换为 WebRTC 以进行基于浏览器的流式传输。

MediaMTX 配置:下面使用 MediaMTX 配置文件:

authMethod: jwt
authJWTClaimKey: mediamtx_permissions
authJWTJWKS: https://example.com/api/auth/fetch-public-key
logLevel: debug
logDestinations:
- stdout
api: true
apiAddress: ':9997'
rtsp: true
protocols:
- udp
- multicast
- tcp
encryption: 'no'
rtspAddress: ':8554'
paths:
all:
source: publisher
webrtc: true
webrtcAddress: ':8889'
webrtcAllowOrigin: '*'
webrtcHandshakeTimeout: 100s

主要特点

1. JWT 身份验证

  • 使用 JWT 进行安全访问控制。
  • 使用从 JWKS 端点获取的公钥验证令牌。
  • 权限在声明中定义mediamtx_permissions

2. 记录

  • 用于故障排除的调试级别日志。
  • 日志输出到控制台(stdout)。

3. API

  • 在端口9997上启用 MediaMTX API以进行编程控制。

4. RTSP 流媒体

  • 支持通过 UDP、多播和 TCP 的 RTSP。
  • 端口 8554上有可用的流。

5. WebRTC流媒体

  • 启用 WebRTC 实现低延迟浏览器流式传输。
  • 端口 8889上有可用的流。
  • 允许来自任何来源的连接()且握手超时时间为 100 秒。

这个配置只是冰山一角!比如还有 JWT 身份验证、RTSP 与 WebRTC 的设置以及安全最佳实践。

4. 使用人工智能分析视频

RTSP 流被输入到 AI 模型中进行实时分析。该模型处理每一帧以检测物体、计数车辆或识别异常。

5. 使用 WebRTC 将视频传送到 Web 应用程序

为了将视频流式传输到 Web 应用程序,我使用了 WebRTC,它是低延迟、点对点通信的理想选择。MediaMTX 通过充当 WebRTC 网关使此过程变得简单。

WebRTC 设置

  1. MediaMTX 在 公开了一个 WebRTC 端点http://localhost:8889/stream/webrtc
  2. 您可以使用 WebRTC 库连接到此端点。像 PeerJS 或 SimpleWebRTC 这样的库。

挑战和潜在解决方案

1. 延迟

实现低延迟对于实时流式传输至关重要。以下是我解决此问题的方法:

  • FFmpeg 优化:使用ultrafast预设来最大限度地减少编码延迟。
  • MediaMTX 配置:微调 MediaMTX 设置,实现低延迟流式传输。

2. 可扩展性

最初,我的重点是让单个流正常工作。现在,我正在探索扩展系统以处理多个流的方法。主要考虑因素包括:

  • 多个 FFmpeg 实例:运行多个 FFmpeg 进程来处理并发流并测试 MediaMTX 在可支持的流数量方面的限制。
  • 负载平衡:根据压力测试的结果,可能使用负载平衡器在多个 MediaMTX 实例之间分配流量。
  • AI 可扩展性:虽然不是当前的优先事项,但扩展 AI 分析组件以有效处理多个流在未来将至关重要。

3. 可靠性

可靠性尚未成为主要关注点。提高可靠性的关键步骤包括:

  • 监控系统:实施监控解决方案来跟踪流媒体管道的健康状况。
  • 自动恢复:添加逻辑以自动重新启动失败的组件(例如,FFmpeg 或 MediaMTX)并在发生中断时重试连接。

工具和资源

以下是我认为非常有价值的工具和文档:

结论

构建实时视频流管道是一项复杂但有益的任务。通过利用 FFmpeg、MediaMTX 和 WebRTC 等工具,我能够创建一个以最小延迟捕获、处理、分析和交付实时视频的系统。无论您使用的是交通摄像头还是任何其他视频源,此架构都为实时流式传输应用程序提供了坚实的基础。

作者:SAMUEL OLAMIDE

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/55819.html

(0)

相关推荐

发表回复

登录后才能评论