集成架构与系统/模块职责
本文说明 GT-Streaming 在企业系统中的位置,以及企业应用、媒体服务、终端网关、消息队列与车载终端之间的协作关系。阅读本文后,就知道:某个操作该由哪一侧实现、数据沿哪条路径流转。
总体架构

┌─────────────┐ HTTP / WebSocket API ┌──────────────────┐
│ 企业应用 │ ◄──────────────────────────► │ GT-Streaming │
│ (客户端) │ FLV / HLS / RTSP │ 媒体服务 │
└─────────────┘ ◄──────────────────────────── └────────┬─────────┘
│
RabbitMQ │
(消息队列) │
▼
┌─────────────┐ JT/T 808 / 1078 等 ┌──────────────────┐
│ 车载终端 │ ◄──────────────────────────► │ 企业终端网关 │
└─────────────┘ └──────────────────┘
总体交互方式: 企业应用只与 GT-Streaming 媒体服务 的 API 交互;媒体服务通过 消息队列 驱动 终端网关 向终端下发指令;终端将码流直接推送到媒体服务,再由媒体服务转码后输出给客户端。
各系统/模块职责
企业应用 / 客户端
- 调用媒体服务 API:登录、打开/控制/关闭媒体请求、查询录像与附件等
- 使用返回的
playUrl创建播放器(FLV / HLS / RTSP) - 周期性调用保活接口(
POST /strm/keep_alive),或在 WebSocket API /strm-js中由库自动处理
GT-Streaming 媒体服务
- 鉴权与会话(token)管理
- 创建与管理媒体请求(
reqId),维护请求生命周期 - 经 MQ 向网关下发终端媒体指令(如 9101 实时音视频、9201 远程回放、9206 文件上传、9208 报警附件上传等)
- 接收终端推送的 1078 码流,在进程内完成转码与协议转换
- 向客户端输出 FLV、HLS、RTSP 等媒体流
- 主动安全附件的接收、存储与查询;服务端转储;809 相关流媒体能力等
消息队列(RabbitMQ)
媒体服务与网关/企业后端之间的 异步协作通道。GT-Streaming 4 起,MQ 是标准集成方式之一。
| 队列(默认名) | 发布者 | 订阅者 | 用途 |
|---|---|---|---|
term-cmd | 媒体服务 | 终端网关 | 下发媒体相关终端指令 |
cmd-state-chg | 终端网关 | 媒体服务 | 终端对指令的应答与状态变更 |
av-upload | 媒体服务 | 企业应用 | 远程录像上传进度通知 |
fetch-alm-att | 企业应用 | 媒体服务 | 请求提取主动安全报警附件 |
fetch-alm-att-completed | 媒体服务 | 企业应用 | 附件提取任务结束通知 |
队列名可配置。完整说明见 消息队列集成接口概览。
企业终端网关
- 维持与车载终端的长连接(JT/T 808 等)
- 订阅
term-cmd队列,将媒体服务下发的指令转发给对应终端 - 接收终端应答,向
cmd-state-chg队列发布状态变更通知 - 监测主动安全报警等业务事件(附件提取场景下,由企业应用决策是否向
fetch-alm-att发请求)
终端必须先经网关在线,媒体服务才能成功打开实时或回放。打开失败且提示终端不在线时,应先在网关或演示站确认终端状态。
车载视频终端
- 接收网关转发的媒体指令
- 向 媒体服务(而非企业应用)推送音视频 1078 码流
- 存储远程录像、响应回放与文件上传指令
- 在主动安全场景下,按 9208 等指令向媒体服务上传报警附件
典型数据流:实时音视频播放
以企业应用在浏览器中播放一路实时视频为例:
1. [企业应用] POST /login → 获得 token
2. [企业应用] POST /strm/live/open → 媒体服务创建请求
3. [媒体服务] 发布 term-cmd 消息 → 请求网关下发 9101
4. [终端网关] 转发 9101 至终端 → 终端收到指令
5. [终端] 向媒体服务推 1078 码流
6. [终端网关] 发布 cmd-state-chg(终端应答/推流状态)
7. [媒体服务] 转码,生成 playUrl;通知客户端(或同步返回 ready)
8. [企业应用] 播放器加载 playUrl → 用户看到画面
9. [企业应用] 周期 POST /strm/keep_alive → 维持请求
10.[企业应用] 关闭播放器 + 关闭媒体请求 → 释放资源
异步模式下,步骤 7 可能通过 STOMP/WebSocket 推送「流已准备好」通知;WebSocket API 则在同一连接上接收。详见 音视频请求的生命周期。
典型数据流:主动安全报警附件
此场景 企业应用与网关均需参与,媒体服务负责存储与查询:
1. [终端网关] 检测到主动安全报警
2. [企业应用] 按业务规则决定是否提取附件
3. [企业应用] 向 fetch-alm-att 队列发布提取请求(或调用 HTTP/MQ 相关接口)
4. [媒体服务] 经 term-cmd 下发 9208,接收终端上传的附件并存储
5. [媒体服务] 向 fetch-alm-att-completed 发布任务结束通知
6. [企业应用] 调用查询接口,通过返回 URL 下载附件
流程步骤亦见 客户端编程基本流程 · 主动安全附件。
消息队列何时必需?
| 场景 | 企业应用 | 终端网关 + MQ |
|---|---|---|
| 实时播放 / 远程回放 | 调用媒体 API 即可 | 必需 — 网关收指令、转发终端、上报状态 |
| 终端录像上传 | 调用查询与上传 API | 必需 |
| 主动安全附件提取 | 发 MQ 请求或调 API | 必需 — 网关监测报警;媒体服务经 MQ 协作 |
| 纯 RTSP 网络摄像头 | 调用打开 API | 视部署而定,无 JT/T 终端时网关可不参与 |
结论: 凡涉及 JT/T 1076 车载终端 的媒体能力,终端网关与 MQ 都是集成中的必要环节;仅企业应用对接媒体 API 无法独立完成播放。
HTTP API 与 WebSocket API
| 维度 | HTTP API | WebSocket API(v4,推荐) |
|---|---|---|
| 调用方式 | REST + 独立 STOMP WebSocket 收通知 | 单 WebSocket 连接调用 API 并收通知 |
| token 与连接 | 需分别管理 HTTP token 与 STOMP 连接 | strm-js 的 StrmWsApi 统一处理 |
| 适用 | legacy 系统、极简同步播放 | 新应用、多路并发、长连接场景 |
| 客户端库 | 自行组合 axios + stomp + 播放器 | strm-js |
示例对比见 应用指南概览 · 集成示例索引。
集成前置条件
在开始应用开发前,请确认:
| 检查项 | 说明 |
|---|---|
| 媒体服务已部署并可访问 | 见 部署概要 |
| 终端网关已运行且接入 MQ | 与媒体服务使用同一 RabbitMQ |
| 终端已在网关侧在线 | 可在演示站或自有监控系统确认 |
| 网络与端口 | 终端能推流到媒体服务;客户端能访问 API 与播放地址 |
| 鉴权方式已确定 | 本地用户表或外部 token 验证,见 会话与 token |
关键概念(集成视角)
| 概念 | 含义 |
|---|---|
| 终端识别号 | 终端在平台中的唯一标识(协议中的「终端手机号」) |
| 通道号 | 逻辑音视频通道,通常 1–4;打开实时/回放时需指定 |
| reqId | 一次媒体请求的唯一 ID,保活、控制、关闭时使用 |
| playUrl | 客户端播放器加载的地址(FLV / HLS / RTSP) |
| token | 会话令牌,除登录外每次 API 调用需在请求头携带 |
| dataType | 实时打开类型:音视频、仅视频、监听、对讲等 |
更完整的状态机与共享打开规则见 音视频请求的生命周期。
下一步
- 快速体验:在线演示 + 应用指南概览
- 跑通首路播放:实时播放示例 (同步 HTTP API)
- 网关侧对接:消息队列集成接口概览
- 错误排查:错误码 + 音视频请求的生命周期