连接通道
### 用于连接各检测通道的接口基于WebSocket协议,通道身份以通道ID(暂支持1-8)识别。使用时按以下方式构造WebSocket URL:
## ws://{serverIp}:2442/channel/{id}
#### 示例:如需要连接ID为1的通道,假设服务器部署在本地,则URL为:
#### ws://127.0.0.1:2442/channel/1
#### 使用以上URL即可连接WebSocket服务端的画面广播服务。
连接上通道后按以下方式解析图像数据:
|名称|长度|说明|
|-|-|-|
|长度|4byte|图像数据长度|
|格式|1byte|版本:</br>0:JPEG</br>1:JPEG,带容器ID|
|类型|1byte|图像类型:</br>0:正常;</br>1:异常或缺陷|
|容器ID|100bytes|容器ID字符串|
|数据|实际数据长度|图像数据|
以下是封装图像数据的Python代码示例:
```Python
def newImgMsg(img,format,type,container):
containerBytes = container.encode('utf-8')
lenBytes=len(img).to_bytes(4,byteorder='little')
fmtByte=format.to_bytes(1,byteorder='little')
typeByte=type.to_bytes(1,byteorder='little')
return lenBytes + fmtByte + typeByte + containerBytes + img
```
以下是解析图像数据的C#代码示例:
```C#
private void Socket_MessageReceived(MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args){
try {
using (var reader = args.GetDataReader()) {
var len = reader.ReadUInt32();
var fmt = reader.ReadByte();
var type = reader.ReadByte()
var containerBytes = reader.ReadBuffer(CONTAINER_ID_LENGTH).ToArray();
var container = Encoding.UTF8.GetString(containerBytes).Trim('\0');
var data = reader.ReadBuffer(len).ToArray();
// Create a new instance of DdsImage
DdsImage image = new DdsImage(deviceId, Module.ModuleId, Channel, container, data, fmt, type);
}
}
catch (Exception ex){
Logger.E("Error occur when receiving image.");
Logger.Log(ex);
}
}
```
##
### 测试
用于检测画面广播的WebSocket服务还提供了一个用于测试的接口,可用来验证服务是否正在运行。
可以用以下URL连接服务:
**ws://localhost:2442/echo**
连接成功后,向服务发发送任意内容时,服务端将原封不动向客户端返回该内容。