本文档说明如何在 pipIrr-web-wechat 模块中调用 pipIrr-web-remote 模块的 video/some 接口,实现微信端视频监控功能。
两个服务通过HTTP接口进行通信,微信模块作为客户端调用远程控制模块的视频监控REST API。
在 application-self.yml 中添加远程服务配置:
remote:
service:
base-url: ${pipIrr.remote.baseUrl:http://localhost:8081/remote}
根据部署环境设置相应的环境变量:
# 开发环境
pipIrr.remote.baseUrl=http://localhost:8081/remote
# 生产环境
pipIrr.remote.baseUrl=http://remote-service-host:8081/remote
接口地址: GET /wx/remote/video/some
请求参数:
- pageCurr: 当前页码(默认1)
- pageSize: 每页大小(可选)
响应示例:json { "success": true, "msg": "查询成功", "content": { "obj": [ { "id": 123456, "name": "摄像机1", "videoUrl4Simple": "rtmp://...", "videoUrl4Standard": "rtmp://...", "videoUrl4Security": "rtmp://...", "videoUrl4PcLive": "http://..." } ], "pageCurr": 1, "pageSize": 4, "itemTotal": 10 } }
@RestController
@RequestMapping("wechat/video")
public class WechatVideoController {
@Autowired
private RemoteService remoteService;
@GetMapping("cameras")
public BaseResponse<Object> getCameras(
@RequestParam(defaultValue = "1") Integer pageCurr,
@RequestParam(required = false) Integer pageSize) {
// 构建查询参数
StringBuilder queryParams = new StringBuilder();
queryParams.append("pageCurr=").append(pageCurr);
if (pageSize != null) {
queryParams.append("&pageSize=").append(pageSize);
}
// 调用远程视频接口
return remoteService.getVideoSome(queryParams.toString());
}
}
// 微信小程序调用示例
wx.request({
url: 'https://your-domain.com/wx/remote/video/some?pageCurr=1&pageSize=10',
method: 'GET',
success: function(res) {
if (res.data.success) {
const cameras = res.data.content.obj;
// 处理摄像机数据
cameras.forEach(camera => {
console.log('摄像机:', camera.name);
console.log('直播地址:', camera.videoUrl4PcLive);
});
} else {
wx.showToast({
title: res.data.msg,
icon: 'error'
});
}
}
});
HTTP 404: 远程服务接口不存在HTTP 500: 远程服务内部错误HTTP 503: 远程服务不可用Connection Timeout: 连接超时Read Timeout: 读取超时logging:
level:
com.dy.pipIrrWechat.remote: DEBUG
RemoteService 中添加新的方法RemoteCtrl 中添加对应的控制器方法可以考虑对查询类接口添加缓存,提高响应速度:
@Cacheable(value = "controllerAlarmState", key = "#queryParams")
public BaseResponse<Object> getControllerAlarmState(String queryParams) {
// 实现代码
}
对于不需要立即返回结果的操作,可以考虑异步调用:
@Async
public CompletableFuture<BaseResponse<Object>> openValveAsync(String requestBody) {
return CompletableFuture.completedFuture(callRemoteApi("/valve/open", requestBody, "POST"));
}
通过以上配置和代码,微信模块可以成功调用远程控制模块的 video/some 接口,实现视频监控数据的获取功能。这种架构设计保持了模块间的解耦,同时提供了简洁高效的视频数据访问能力。