编辑 | blame | 历史 | 原始文档

微信模块调用远程视频模块集成说明

概述

本文档说明如何在 pipIrr-web-wechat 模块中调用 pipIrr-web-remote 模块的 video/some 接口,实现微信端视频监控功能。

架构说明

  • pipIrr-web-wechat: 微信小程序服务(端口:/wx)
  • pipIrr-web-remote: 远程控制服务(端口:/remote)

两个服务通过HTTP接口进行通信,微信模块作为客户端调用远程控制模块的视频监控REST API。

配置说明

1. 配置文件

application-self.yml 中添加远程服务配置:

remote:
  service:
    base-url: ${pipIrr.remote.baseUrl:http://localhost:8081/remote}

2. 环境变量配置

根据部署环境设置相应的环境变量:

# 开发环境
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 } }

使用示例

Java代码示例

@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: 读取超时

错误处理策略

  1. 连接失败重试: OkHttpClient配置了连接失败自动重试
  2. 超时处理: 配置合理的连接、读取、写入超时时间
  3. 异常日志: 详细记录调用异常信息,便于问题排查
  4. 降级处理: 在远程服务不可用时,可以考虑本地缓存或降级方案

监控和日志

日志配置

logging:
  level:
    com.dy.pipIrrWechat.remote: DEBUG

关键日志

  • 远程接口调用记录
  • 请求和响应内容(调试模式)
  • 异常详细信息
  • 性能监控(响应时间)

部署注意事项

  1. 网络连通性: 确保微信服务能够访问远程控制服务
  2. 端口配置: 检查防火墙和安全组设置
  3. 负载均衡: 如果远程服务有多个实例,配置负载均衡
  4. 健康检查: 定期检查远程服务可用性

扩展功能

1. 添加新的远程接口

  1. RemoteService 中添加新的方法
  2. RemoteCtrl 中添加对应的控制器方法
  3. 更新文档和测试用例

2. 增加缓存机制

可以考虑对查询类接口添加缓存,提高响应速度:

@Cacheable(value = "controllerAlarmState", key = "#queryParams")
public BaseResponse<Object> getControllerAlarmState(String queryParams) {
    // 实现代码
}

3. 异步调用

对于不需要立即返回结果的操作,可以考虑异步调用:

@Async
public CompletableFuture<BaseResponse<Object>> openValveAsync(String requestBody) {
    return CompletableFuture.completedFuture(callRemoteApi("/valve/open", requestBody, "POST"));
}

总结

通过以上配置和代码,微信模块可以成功调用远程控制模块的 video/some 接口,实现视频监控数据的获取功能。这种架构设计保持了模块间的解耦,同时提供了简洁高效的视频数据访问能力。