跳到主要内容
版本:4.0

播放网络摄像头示例 (RTSP → FLV/HLS)

本示例演示媒体服务 从 RTSP 网络摄像头拉流,再转为 FLV/HLS 供浏览器播放。流程与 JT/T 1076 终端实时播放类似,但 无需终端网关,打开接口通过 rtspSrc 指定摄像头地址。

项目说明
示例页面live-example-4-rtsp
示例代码live-example-4-rtsp.zip
依赖库axios、mpegts.js、hls.js、stomp-websocket
打开模式同步或异步均可(示例支持切换)

相关文档:简介 · 多源接入 · 打开实时音视频 · RtspSource

适合场景

  • 接入 IP 摄像头、NVR RTSP 输出,而非车载 1076 终端
  • 媒体服务能 网络访问 摄像头 RTSP 地址
  • 希望与车载流 同一套播放 APIlive/open + 播放器)

与车载终端示例的差异

车载终端(example-2)RTSP 摄像头(本示例)
码流来源终端经网关推 1078媒体服务拉 RTSP
终端网关 / MQ必需通常不需要
simNo真实终端识别号应用自定义(如 rtsp-1
关键参数channeldataTypertspSrc
打开接口同上 POST /strm/live/open同上

整体流程

rtsp-src-live.png

1. (部署)媒体服务可访问摄像头 RTSP URL
2. POST /login
3. STOMP 订阅(异步模式时)
4. POST /strm/live/open + rtspSrc
5. 媒体服务拉流 → 转 FLV/HLS → ready 通知
6. 播放器加载 playUrl → keep_alive → close

异步模式步骤与 example-2-live 一致;同步模式可参考 example-1-live(省略 WebSocket)。

准备工作

  1. RTSP 地址 可被 GT-Streaming 服务器访问(内网/公网、防火墙放通)
  2. 为每路摄像头分配 simNo:符合 终端识别号字符集,且与系统内其它设备不冲突(如 rtsp-1cam-gate-01
  3. 若摄像头需鉴权,提供用户名/密码(见下文 rtspSrc

打开接口:核心参数

与车载打开相比,请求体 更简单——主要传 simNoprotoasyncrtspSrc

axios.post(apiUrlPrefix() + 'strm/live/open', {
simNo: 'rtsp-1', // 应用自定义,用于区分设备
proto: proto(), // 0: FLV, 1: HLS
async: async(), // false: 同步, true: 异步
rtspSrc: {
url: 'rtsp://192.168.1.100:554/stream1',
user: 'admin', // 可选;也可写在 url 中(不推荐)
password: 'secret' // 可选
}
}, {
headers: { 'X-Auth-Token': token }
});

rtspSrc 说明

字段必要说明
urlRTSP 地址,须媒体服务可达
user / password设备鉴权;若 url 已含 user:pass@,则忽略

不必传 channeldataType 等车载字段(除非业务需要)。

应答与后续

应答结构与车载 live/open 相同:reqIdplayUrlreadymediaTyp。之后:

  • 异步:等 act=readyready=true 后播放
  • 保活:POST /strm/keep_alive
  • 停止:POST /strm/close

播放器创建同 example-2-live / example-3-live-hls(按 proto 选 FLV 或 HLS)。

检查清单

  • 媒体服务到摄像头 RTSP 端口网络通
  • simNo 唯一且符合字符集
  • 鉴权信息正确(账号错误或 URL 格式错误会导致 open 失败/超时)
  • 异步模式已订阅 STOMP

常见错误

现象处理
-5 超时摄像头不可达、RTSP 路径错误或鉴权失败
能 open 无画面摄像头编码不支持;查服务端日志
与车载 simNo 冲突更换自定义 simNo

下一步

目标文档
车载实时异步example-2-live
HLS 播放example-3-live-hls
simNo 规则sim-no-charset