测试平台信息
IP:220.167.54.108
端口号:8085
账号:admin
密码:123456
实时广播开播的指令交互
apk与终端交互逻辑
App不下发指令给终端;
App没法获取终端命令执行结果;
App执行结果不是上报服务器,而是通过服务器将指令传递给终端;
指令编解码工具是从 TAS 项目直接复制过来的,注释掉会报错的代码,所以基本相同。
接口文件
/**
* BroadRealTimeDialog.java 实时广播页面
* 开播/停播实现逻辑,186行
**/
public void startBroad()
/**
*
* 200~215行,停播逻辑
* 218~247行,开播逻辑,开播前先去服务器请求 EBMID 才能去服务器开播
**/
WebPlatformSession.getInstance().writeToServer(stopBroadByte); // 发送停播指令 215行
WebPlatformSession.getInstance().writeToServer(startBroadByte); // 发送开播指令 242行
// 应急(日常)广播开播(停播)指令(0x04)
public static byte[] getStartBroadBytes(String ebmid, String addressCode, byte ebm_class, byte ebm_level, byte volume, boolean broadSwitch)
/**
* InstructionsAnalysisUtil.java 指令解码工具
* InstructionsEnclosedUtil.java 指令编码工具
* 广西项目中没怎么用,就收个心跳
**/
IP话筒通话协议
应用场景
主要应用于服务器平台和终端之间的交互通信,基于IP/TCP传输协议。
数据结构设计
消息体的数据结构参考《ip话筒通信协议----商讨版2.0》
在代码中使用 byte 数组存放指令,构造消息体
终端心跳、一般应答
实现逻辑
客户端发送心跳,服务端回复,客户端收到回复再做其他业务逻辑
接口文件
App与服务器连接逻辑在 ClientConnectManager.java 类里
心跳实现使用socket框架
数据包格式
数据包的格式构造
指令数据包:fe fd 01 00 00 00 00 01 01 01 00 df 00 00 00 00 00 00 00 00 00 00 57 01 00 01 00 00 00 00 00 00 00 00 00 00 57 01 01 00 66 00 00 00 00 00 00 00 00 00 00 00 00 20 19 06 25 00 01 04 03 01 01 01 01 01 32 5f 3f 5d a7 5f 3f 5d a7 01 02 00 40 72 74 73 70 3a 2f 2f 77 6f 77 7a 61 65 63 32 64 65 6d 6f 2e 73 74 72 65 61 6d 6c 6f 63 6b 2e 6e 65 74 2f 76 6f 64 2f 6d 70 34 3a 42 69 67 42 75 63 6b 42 75 6e 6e 79 5f 31 31 35 6b 2e 6d 6f 76 00 4a 5f 3f 5d a7 00 00 00 00 00 00 d4 51 83 10 fd 6e 54 a2 e6 26 8e 70 f2 ae ff a0 fb 3c fb 00 e9 23 0f 16 e8 0f 9b 2b 27 61 0d 52 3a b8 c9 52 c5 4c 8d 48 6b 8c b8 b7 ab e0 80 5c de d1 1a f1 60 3e 72 ce 0b 38 75 20 53 77 19 e1 9b c4 79 e7
数据包解析
根据IP传输协议对指令数据包进行解析,根据项目要求会稍有改动
消息头
- fe fd:包头标记
- 01 00:协议版本号
- 00 00 00 01:会话标识
- 01:数据包类型,01 代表开始播发 0x01
- 01:签名标识
- 00 df:df十六进制换算成十进制是223
消息体 - 00 00 00 00 00 00 00 00 00 00 57 01:数据源对象编码
- 00 01:数据目标对象数量
- 00 00 00 00 00 00 00 00 00 00 57 01:数据目标对象编码序列
- 01:业务数据类型
- 00 66:业务数据长度
- 业务数据 - 开始播发
- 00 00 00 00 00 00 00 00 00 00 00 00 20 19 06 25 00 01:应急广播消息编码,广东18位,广西15位,具体看平台用多少位
- 04:广播类型-应急广播
- 03:事件级别-较大
- 01 01 01 01 01:事件类型,默认“11111”
- 32:音量,十六进制转换为十进制是 50 音量
- 5f 3f 58 67:开始时间,将指定格式的时间时间转换为 byte 数组,yyyy-MM-dd HH:mm:ss
- 5f 3f 58 67:结束时间,将指定格式的时间时间转换为 byte 数组,yyyy-MM-dd HH:mm:ss
辅助数据内容 - 01:辅助数据数量
- 02:辅助数据类型-音频
- 00 40:辅助数据长度,十进制64,数组接下来的64位就是广播内容
音频rtmp地址字符串的 byte 数组 - 72 74 73 70 3a 2f 2f 77 6f 77 7a 61 65 63 32 64 65 6d 6f 2e 73 74 72 65 61 6d 6c 6f 63 6b 2e 6e 65 74 2f 76 6f 64 2f 6d 70 34 3a 42 69 67 42 75 63 6b 42 75 6e 6e 79 5f 31 31 35 6b 2e 6d 6f 76
byte 数组演示用的rtmp地址
"rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov" .getBytes()
视频也是 rtmp 地址,文本/图片id,也是将字符串转为byte数组
验签数据
00 4a 5f 3f 5d:此处开始往后就是验签数据