部标(JT/T1078)流媒体对接说明

1.前言

最近在配合客户开发流媒体相关的服务的时候,整理了一些对接过程资料,这里做个分享与记录。流媒体的对接主要牵扯到4个方面:

(1)平台端:业务端系统,包含前端呈现界面。

(2)JT/T808网关:部标设备接入网关,这个是非常重要的,是设备与平台进行数据交换的桥梁,流媒体相关的指令操作也必须依赖它完成。

(3)部标视频机:符合JT/T808协议的车载视频机器。

(4)流媒体服务:符合JT/T1078协议的流媒体服务,用来接收部标视频机的音视频流,并进行转发。

2.交互流程

2.1.实时音视频点播与控制流程

2.2.双向语音对讲流程

2.3.历史音视频回放流程

3.实时音视频点播与控制指令详解

3.1.平台下发拉流指令

命令采用0x9101消息

命令组包示例:

7e91010016138110121350fef70e3132342e3232332e36302e3233341b590000010001097e

示例解释:

7e 
9101 --拉流的命令ID
0016 --消息体属性
138110121350 --设备ID,不足12位前面补0,如果是2019的协议,不足20位前面补0
fef7 --消息流水号
0e --流媒体地址IP地址长度,14个字节
3132342e3232332e36302e323334  --IP 地址(124.223.60.234)
1b59 --流媒体地址TCP端口(7001)
0000 --流媒体地址UDP端口(0)
01 --视频通道号,即:设备上的摄像头的通道号,看哪个摄像头对哪个摄像头进行拉流
00 --拉流的数据类型(0:音视频;1:视频;2:双向对讲;3:监听;4:中心广播;5:透传,视频点播用音视频或者视频,但是一般都用音视频,对讲用2
01 --码流类型(0:主码流;1:子码流),设备上报的码流类型,一般默认用子码流,流畅度会高些,但是清晰度会稍微差点
09 --校验码
7e

3.2.设备应答拉流指令

设备对拉流指令采用的是通用应答:0x0001消息进行应答

3.3.组成拉流地址

平台收到设备指令应答后,后台组成拉流地址,返回给前端,组包示例如下:

XML 复制代码
"flv": "http://apollo.aovx.com:8088/00000000018026966027/1.live.flv",
"https_flv": "https://apollo.aovx.com:18443/00000000018026966027/1.live.flv",
"ws_flv": "ws://apollo.aovx.com:8088/00000000018026966027/1.live.flv",
"wss_flv": "wss://apollo.aovx.com:18443/00000000018026966027/1.live.flv",
"fmp4": "http://apollo.aovx.com:8088/00000000018026966027/1.live.mp4",
"https_fmp4": "https://apollo.aovx.com:18443/00000000018026966027/1.live.mp4",
"ws_fmp4": "ws://apollo.aovx.com:8088/00000000018026966027/1.live.mp4",
"wss_fmp4": "wss://apollo.aovx.com:18443/00000000018026966027/1.live.mp4",
"hls": "http://apollo.aovx.com:8088/00000000018026966027/1/hls.m3u8",
"https_hls": "https://apollo.aovx.com:18443/00000000018026966027/1/hls.m3u8",
"ws_hls": "ws://apollo.aovx.com:8088/00000000018026966027/1/hls.m3u8",
"wss_hls": "wss://apollo.aovx.com:18443/00000000018026966027/1/hls.m3u8",
"ts": "http://apollo.aovx.com:8088/00000000018026966027/1.live.ts",
"https_ts": "https://apollo.aovx.com:18443/00000000018026966027/1.live.ts",
"ws_ts": "ws://apollo.aovx.com:8088/00000000018026966027/1.live.ts",
"rtmp": "rtmp://apollo.aovx.com:8935/00000000018026966027/1",
"rtsp": "rtsp://apollo.aovx.com:8554/00000000018026966027/1",
"rtsps": "rtsps://apollo.aovx.com:8332/00000000018026966027/1",

其中:apollo.aovx.com是服务器的IP或者域名,后面是每种拉流方式对应的端口

00000000018026966027:对应的是设备的ID,为了兼容JT/T808-2019的协议,所以返回默认20位(前面补0即可)

1.live.flv:其中1指的是通道号,.live.flv流媒体的后缀,不同的拉流方式可能不一样。

前端通过这个地址拉流即可。

3.4.流控制命令

流控制命令采用的是0x9102命令

流控制命令组包示例:

7e91020004138110121350c52e01000001af7e

示例解释:

XML 复制代码
7e
9102 --流控制的命令ID
0004 --消息体属性
138110121350 --设备ID,不足12位前面补0,如果是2019的协议,不足20位前面补0
c52e --消息流水号
01 --视频通道号,即:设备上的摄像头的通道号
00 --控制指令(0:关闭音视频传输指令;1:切换码流;2:暂停该通道所有流的发送;3:回复暂停前流的发送;4:关闭双向对讲)
00 --关闭音视频类型(0:关闭该通道有关的音视频数据;1:只关闭该通道有关的音频;2:只关闭该通道的视频)
01 --切换码流类型(0:新申请码流为主码流;1:新申请码流为子码流)
af --校验码
7e

3.5.设备应答流控制命令

设备流控制命令采用的是通用应答:0x0001消息进行应答

4.双向语音对讲指令详解

4.1.平台下发语音对讲指令

命令采用0x9101消息,语实时拉流一致主要区别是数据类型采用2双向对讲

命令组包示例:

7e9101001601802696602709fc0e3132342e3232332e36302e3233341b590000010201527e

示例解释:

XML 复制代码
7e
9101 --对讲的命令ID
0016 --消息体属性
018026966027 --设备ID,不足12位前面补0,如果是2019的协议,不足20位前面补0
09fc --消息流水号
0e --流媒体地址IP地址长度,14个字节
3132342e3232332e36302e323334 --IP 地址(124.223.60.234)
1b59 --流媒体地址TCP端口(7001)
0000 --流媒体地址UDP端口(0)
01 --对讲通道号
02 --数据类型
01 --码流类型(0:主码流;1:子码流),设备上报的码流类型,一般默认用子码流,流畅度会高些,但是清晰度会稍微差点
52 --校验码
7e

4.2.设备应答对讲指令

设备对拉流指令采用的是通用应答:0x0001消息进行应答

4.3.组成推流与拉流地址

平台收到设备指令应答后,后台组成拉流地址,返回给前端,组包示例如下:

XML 复制代码
"flv": "http://apollo.aovx.com:8088/00000000018026966027/1.live.flv",
"https_flv": "https://apollo.aovx.com:18443/00000000018026966027/1.live.flv",
"ws_flv": "ws://apollo.aovx.com:8088/00000000018026966027/1.live.flv",
"wss_flv": "wss://apollo.aovx.com:18443/00000000018026966027/1.live.flv",
"fmp4": "http://apollo.aovx.com:8088/00000000018026966027/1.live.mp4",
"https_fmp4": "https://apollo.aovx.com:18443/00000000018026966027/1.live.mp4",
"ws_fmp4": "ws://apollo.aovx.com:8088/00000000018026966027/1.live.mp4",
"wss_fmp4": "wss://apollo.aovx.com:18443/00000000018026966027/1.live.mp4",
"hls": "http://apollo.aovx.com:8088/00000000018026966027/1/hls.m3u8",
"https_hls": "https://apollo.aovx.com:18443/00000000018026966027/1/hls.m3u8",
"ws_hls": "ws://apollo.aovx.com:8088/00000000018026966027/1/hls.m3u8",
"wss_hls": "wss://apollo.aovx.com:18443/00000000018026966027/1/hls.m3u8",
"ts": "http://apollo.aovx.com:8088/00000000018026966027/1.live.ts",
"https_ts": "https://apollo.aovx.com:18443/00000000018026966027/1.live.ts",
"ws_ts": "ws://apollo.aovx.com:8088/00000000018026966027/1.live.ts",
"rtmp": "rtmp://apollo.aovx.com:8935/00000000018026966027/1",
"rtsp": "rtsp://apollo.aovx.com:8554/00000000018026966027/1",
"rtsps": "rtsps://apollo.aovx.com:8332/00000000018026966027/1",
"ws_tts": "ws://apollo.aovx.com:7002/00000000018026966027/1?type=0&pt=pcm&vendorType=0",
"wss_tts": "wss://apollo.aovx.com:4443/00000000018026966027/1?type=0&pt=pcm&vendorType=0"

平台端对音频采集通过ws_tts或者wss_tts进行推流,并通过拉流地址进行音频拉流。

4.4.对讲控制命令

对讲控制命令采用的是0x9102命令,当控制指令为4的时候关闭双向对讲

流控制命令组包示例:

7e91020004138110121350c52e01040001ab7e

示例解释:

XML 复制代码
7e
9102 --流控制的命令ID
0004 --消息体属性
138110121350 --设备ID,不足12位前面补0,如果是2019的协议,不足20位前面补0
c52e --消息流水号
01 --视频通道号,即:设备上的摄像头的通道号
04 --控制指令(0:关闭音视频传输指令;1:切换码流;2:暂停该通道所有流的发送;3:回复暂停前流的发送;4:关闭双向对讲)
00 --关闭音视频类型(0:关闭该通道有关的音视频数据;1:只关闭该通道有关的音频;2:只关闭该通道的视频)
01 --切换码流类型(0:新申请码流为主码流;1:新申请码流为子码流)
ab --校验码
7e

4.5.设备应答对讲控制命令

设备对讲控制命令采用的是通用应答:0x0001消息进行应答

5.历史音视频回放指令详解

5.1.获取视频回放列表

视频回放列表获取采用的是:0x9205命令

指令示例:

7E920500140139070096834F900224092300000024092323595900000000000000577E

示例解释:

XML 复制代码
7E
9205 --查询设备视频列表的命令ID
0014 --消息体属性
013907009683 --设备ID,不足12位前面补0,如果是2019的协议,不足20位前面补0
4F90 --消息流水号
02 --视频通道号,即:设备上的摄像头的通道号
240923000000 --查询时间段的开始时间(yyMMddHHmmss)
240923235959 --查询时间段的结束时间(yyMMddHHmmss)
00000000 --报警标志
00  --音视频类型(0:音视频,1:音频,2:视频,3:视频或音视频)
00  --码流类型(0:主码流或子码流;1:主码流;2:子码流)
00  --存储器类型(0:主存储器或者灾备存储器,1:主存储器;2:灾备存储器)
57  --校验码
7E

5.2.设备应答视频列指令

设备对获取视频列表的应答采用的是:0x1205消息进行应答

应答示例:

7E1205000601868057086104B39F1600000000167E

示例解释:

XML 复制代码
7E 
1205 --设备应答视频列表的命令ID
211E --消息体属性(发生了分包)
013907009683 --设备ID,不足12位前面补0,如果是2019的协议,不足20位前面补0
003B --当前消息流水号
0005 --总包数
0001 --当前包序号
97F8 --应答流水号
0000002A --视频资源总数

01 --通道号
240923091728 --开始时间
240923091938 --结束时间
0000000000000000 --报警标志
00 --音视频资源类型(0:音视频;1:音频;2:视频)
01 --码流类型(1:主码流;2:子码流)
01 --1:主存储器;2:灾备存储器
0C7F425E --文件大小,单位BYTE

01
240923091937
240923092128
0000000000000000
00
01
01
0C7FEC45
0124092309212724092309231900000000000000000001010C7FA9B90124092309231724092309250900000000000000000001010C7FA0210124092309250824092309270000000000000000000001010C7FF0300124092309265924092309285000000000000000000001010C7FF9600124092309284924092309304000000000000000000001010C7FD7EB0124092309

5.3.历史视频点播

历史视频点播采用的是:0x9201命令

指令示例:

7e9201002513811012135011190e3132342e3232332e36302e3233341b5900000100000000002404301356182404301439236d7e

示例解释:

XML 复制代码
7e
9201 --进行历史视频回放命令ID
0025 --消息体属性
138110121350 --设备ID,不足12位前面补0,如果是2019的协议,不足20位前面补0
1119 --消息流水号
0e --流媒体地址IP地址长度,14个字节
3132342e3232332e36302e323334  --IP 地址(124.223.60.234)
1b59 --流媒体地址TCP端口(7001)
0000 --流媒体地址UDP端口(0)
01 --视频通道号,即:设备上的摄像头的通道号,看哪个摄像头对哪个摄像头进行拉流
00 --音视频类型(0:音视频,1:音频,2:视频,3:视频或音视频)
00 --码流类型(0:主码流或子码流;1:主码流;2:子码流)
00 --存储器类型(0:主存储器或者灾备存储器,1:主存储器;2:灾备存储器)
00 --回放类型(0:正常回放;1:快进回放;2:快退回放;3:关键帧播放;4:单帧上传)
00 --快进或者快退倍数;0:无效;1:1倍;2:2倍;3:4倍;4:8倍;5:16倍
240430135618 --对应的历史视频列表中某个录像文件的开始时间(yyMMddHHmmss)
240430143923 --对应的历史视频列表中某个录像文件的结束时间(yyMMddHHmmss)
6d --校验码
7e

5.4.设备应答拉流指令

设备对拉流指令采用的是通用应答:0x0001消息进行应答

5.5.组成拉流地址

平台收到设备指令应答后,后台组成拉流地址,返回给前端,组包示例如下,与实时视频一致:

        "flv": "http://apollo.aovx.com:8088/00000000018026966027/1.live.flv",
        "https_flv": "https://apollo.aovx.com:18443/00000000018026966027/1.live.flv",
        "ws_flv": "ws://apollo.aovx.com:8088/00000000018026966027/1.live.flv",
        "wss_flv": "wss://apollo.aovx.com:18443/00000000018026966027/1.live.flv",
        "fmp4": "http://apollo.aovx.com:8088/00000000018026966027/1.live.mp4",
        "https_fmp4": "https://apollo.aovx.com:18443/00000000018026966027/1.live.mp4",
        "ws_fmp4": "ws://apollo.aovx.com:8088/00000000018026966027/1.live.mp4",
        "wss_fmp4": "wss://apollo.aovx.com:18443/00000000018026966027/1.live.mp4",
        "hls": "http://apollo.aovx.com:8088/00000000018026966027/1/hls.m3u8",
        "https_hls": "https://apollo.aovx.com:18443/00000000018026966027/1/hls.m3u8",
        "ws_hls": "ws://apollo.aovx.com:8088/00000000018026966027/1/hls.m3u8",
        "wss_hls": "wss://apollo.aovx.com:18443/00000000018026966027/1/hls.m3u8",
        "ts": "http://apollo.aovx.com:8088/00000000018026966027/1.live.ts",
        "https_ts": "https://apollo.aovx.com:18443/00000000018026966027/1.live.ts",
        "ws_ts": "ws://apollo.aovx.com:8088/00000000018026966027/1.live.ts",
        "rtmp": "rtmp://apollo.aovx.com:8935/00000000018026966027/1",
        "rtsp": "rtsp://apollo.aovx.com:8554/00000000018026966027/1",
        "rtsps": "rtsps://apollo.aovx.com:8332/00000000018026966027/1",

5.6.历史视频回放拉流控制

历史视频回放拉流控制采用的是:0x9202命令

指令示例:

7e92020009138110121350f7b90102002404180000003f7e

示例解释:

7e
9202 --进行历史视频回放控制命令ID
0009 --消息体属性
138110121350 --设备ID,不足12位前面补0,如果是2019的协议,不足20位前面补0
f7b9 --消息流水号
01 --视频通道号
02 --回放控制类型(0:开始回放;1:暂停回放;2:结束回放;3:快进回放;4:关键帧快退回放;5:拖动回放;6:关键帧播放)
00 --如果是快进或者快退(快进或者快退倍数;0:无效;1:1倍;2:2倍;3:4倍;4:8倍;5:16倍)
240418000000 --如果是拖动回放,则是拖动到的时间(yyMMddHHmmss)
3f --校验码
7e

5.7.设备应答控制指令

设备对视频回放控制采用的是通用应答:0x0001消息进行应答

6.结语

对接过程中有很多的坑,特别是双向对讲,如果采集音频并通过流媒体抓发给设备,还有设备使用的那种编码格式,如何兼容海思头等等,如有兴趣的朋友可以一起交流沟通。

相关推荐
Crazy Struggle21 小时前
.NET 全功能流媒体管理控制接口平台
.net·开源项目·流媒体
海思开发板总店4 天前
零基础玩转IPC之——如何实现远程实时查看监控视频(P2P)
h.265·p2p·h.264·流媒体·监控开发
aqi0013 天前
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
android·ffmpeg·音视频·直播·流媒体
aqi0016 天前
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
android·ffmpeg·音视频·直播·流媒体
yunmoon0123 天前
一款零依赖、跨平台的流媒体协议处理工具,支持 RTSP、WebRTC、RTMP 等视频流协议的处理
webrtc·流媒体
aqi0023 天前
FFmpeg开发笔记(五十七)使用Media3的Transformer加工视频文件
android·ffmpeg·音视频·直播·流媒体
aqi001 个月前
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
android·ffmpeg·音视频·直播·流媒体
aqi001 个月前
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
android·ffmpeg·音视频·直播·流媒体
aqi001 个月前
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
ffmpeg·音视频·直播·流媒体