一、核心功能升级(视频问诊)
技术架构
- 前端:小程序 + 腾讯云IM SDK(文字/图片) + TRTC SDK(视频)
- 后端:用户鉴权/消息存储/签名生成
实现流程
- 用户进入聊天室 → 2. 文字沟通 → 3. 点击视频按钮 → 4. 创建TRTC房间 → 5. 音视频流交互 → 6. 结束问诊自动保存记录
二、高频问题与解决方案(
1. 权限申请失败
现象:无法调用摄像头/麦克风
// 解决方案:动态请求授权 wx.authorize({ scope: 'scope.record', // 麦克风 success: () => { /* 执行操作 */ }, fail: () => { wx.showModal({ title: '请开启麦克风权限' }) } })
2. 跨SDK事件冲突
现象:IM消息监听与TRTC事件互相干扰
- 使用命名空间隔离事件监听
- 页面销毁时主动解除监听
// 页面卸载时
onUnload() {
trtcContext.off('stream-added', this.handleStream);
tim.off(TIM.EVENT.MESSAGE_RECEIVED, this.handleMessage);
}
3. 安卓/iOS视频画面异常
现象:安卓端视频拉伸、iOS黑边
- 统一视频组件宽高比例(建议16:9)
- 添加CSS属性强制适配
video {
object-fit: cover;
width: 100%;
height: 300rpx;
}
4. 历史消息加载卡顿
优化方案:
- 分页加载:每次拉取15-20条
- 使用虚拟列表渲染(如
wx.createIntersectionObserver
) - 后端添加消息时间戳索引
5. 用户重复登录
现象:账号被踢下线
- 监听IM的
KICKED_OUT
事件 - 提示用户并返回登录页
tim.on(TIM.EVENT.KICKED_OUT, () => {
wx.showToast({ title: '账号在其他设备登录' });
wx.reLaunch({ url: '/pages/login/login' });
});
6. TRTC房间号冲突
生成规则:
// 使用哈希算法生成唯一ID
const roomId = md5(`doctor_${doctorId}_patient_${patientId}_${Date.now()}`);
7. 消息发送失败重试
容灾策略:
- 本地临时存储待发送消息
- 失败时显示红色感叹号
- 用户点击重试时重新签名发送
// 消息发送失败监听
tim.on(TIM.EVENT.MESSAGE_SEND_FAILED, (event) => {
this.storeFailedMessage(event.data.message);
});
8. 大图/视频加载缓慢
优化方案:
- 图片:压缩+CDN加速(使用
wx.compressImage
) - 视频:先传缩略图,点击后再加载原画质
- 添加加载进度条
9. 多端状态不同步
解决方案:
- 使用IM的 使用 IM
presence
功能订阅用户状态 - 心跳检测:每30秒向后端发送存活信号
// 心跳定时器
setInterval(() => {
tim.updateMyProfile({ status: 'online' });
}, 30000);
10. 安全合规风险
规避措施:
- 敏感词过滤(接入腾讯云内容安全API)
- 问诊记录加密存储(AES-256算法)
- 自动删除房间号(TRTC房间空闲30分钟自动销毁)
三、开发注意事项
- 设备兼容性测试
- 重点测试低端安卓机型的性能表现
- iOS需处理刘海屏适配问题 iOS 需
- 网络容错设计
- 弱网环境下自动切换清晰度(TRTC支持SD/HD模式)
- 断网时显示连接状态提示
- 法律合规要点
- 用户隐私协议中明确说明数据存储方式
- 视频问诊需具备医师执业资格验证环节
四、扩展优化方向
- AI辅助诊断:接入NLP接口分析症状描述
- 电子处方系统:问诊结束后生成PDF文档
- 服务评价体系:医生评分与问诊报告关联
避坑指南:
- TRTC房间人数上限为300人(若需扩容需联系腾讯云)
- 小程序包体积需控制在2MB以内(可动态加载SDK)
- 微信审核要求:医疗类小程序需提交《互联网医疗许可证》
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容