文档历史发放及记录
序号 | 变更(+/-)说明 | 作者 | 版本号 | 日期 | se审核 | se leader批准 |
---|---|---|---|---|---|---|
1 | 新建 | 穆仙念 | 1.0.0 | 2023-6-2 | ||
2 | 变更 |
原始需求文档:泰康视频通话
该项目需要实现电视端与手机端的视频通话功能(电视和电视的通话场景暂不考虑),使用场景为养老院,使用对象为养老院工作人员(手机)和养老院老人(电视),目前只需要实现1对1的通话场景,不考虑多人通话的场景;
来电 | 接听、拒绝 | 1.焦点默认在【接听】按钮;2.焦点选中对应按钮,按【确认键】接听或是拒绝,【返回键】表示拒绝通话;3.拒绝通话后,弹窗消失;接听后进入通话界面;4.录制文案提示:当手机端发起录制申请时才在TV端来电页面显示,若手机端未发起录制申请,则不显示文案;5.在60S内未接听,弹窗消失,来电提醒结束; |
---|---|---|
拨打 | 挂断、开启/关闭摄像头、开启/关闭麦克风、开启/关闭美颜、大小屏幕切换 | 1.焦点默认在【挂断】按钮,按【确认键】表示挂断,挂断后,拨打界面消失;2.拨打过程中,多按钮默认显示【关闭麦克风】,【确认】键操作当前功能,左右键可选其他功能:开启/关闭摄像头、开启/关闭麦克风、开启/关闭美颜、大小屏幕切换;3.摄像头、麦克风、美颜默认开启,屏幕默认显示电视端当前视频画面;4.在60S内未接听,弹窗消失,拨打申请结束; |
通话 | 挂断、开启/关闭摄像头、开启/关闭麦克风、开启/关闭美颜、大小屏幕切换 | 1.焦点默认在【挂断】按钮,按【确认键】表示挂断,挂断后,通话界面消失;2.通话过程中,多按钮默认显示【关闭麦克风】,【确认】键操作当前功能,左右键可选其他功能:开启/关闭摄像头、开启/关闭麦克风、开启/关闭美颜、大小屏幕切换;3.摄像头、麦克风、美颜默认开启,大屏幕默认显示对方视频画面,右上角小窗口默认显示电视端视频画面;大小屏切换后,大小屏幕的显示画面互换; |
录制 | 同意/拒绝录制,录制标识 | 1.在通话过程中,手机端发起录制申请,电视端在通话界面出现【录制申请】弹窗;2.焦点默认在【同意】按钮,【确认】键表示开始录制,【录制申请】弹窗消失,同时左上角出现【录制中】标识,不显示录制时间,只显示通话时间;3.【不同意】表示拒绝录制,弹窗消失;4.电视端接收到录制申请后,便开始倒计时,在60S内若电视端不操作,那弹窗便自动消失;5.在录制过程中,若手机端取消了录制,那电视端toast:对方已结束录制服务;同时,【录制中】的标识消失; |
功能操作 | 操作响应、toast | 1.开启【美颜】的前提条件是摄像头已开,若摄像头未开,点击【开启美颜】时,toast:请先开启摄像头;(开启/关闭美颜的需求已删减) 2.所有toast保持UI统一,显示3S后自动消失; |
功能权限 | 来电提醒 | 在任何界面,来电通知弹窗都会显示在最上层 |
电视播放事件处理 | 若当前在视频/音频播放界面,来电提醒和通话时,需暂停/结束音视频播放 | |
备选方案:技术上若没办法实现暂停,则在接听前让当前视频/音频播放事件强制退出 | ||
应用升级 | 支持自升级 | 终端应用接入开发者平台,必须支持自升级,可全量下发;升级条件:应用必须允许在后台时才允许升级,应用在前台运行时,不允许升级,避免闪退; |
页面 | 功能 |
---|---|
呼叫页面 | 提供拨打电话的页面 |
通话中 | 展示通话中的ui页面 |
自定义操作组件 | 提供切换摄像头,麦克风等等功能的通用组件 |
其他 | APP自更新 | APP自更新 | ||
---|---|---|---|---|
通话APP | SDK登录 | 开机自动初始化 | 开机自启和初始化逻辑 | |
自动登录和重试 | 1、自动登录 2、登录失败重试处理 | |||
接听 | UI实现 | 1、是否云录制的显示状态 2、来电信息展示 | ||
接听和挂断逻辑 | 高 | 1、接听和拒绝逻辑 2、返回按键处理 | ||
倒计时自动断开 | 60秒没有接听自动挂断 | |||
UI组件 | 1、录制申请UI(接听)交互组件 | |||
2、通话配置UI交互组件 | 挂断、摄像头、mic、屏幕主从切换、美颜、状态提示 | |||
拨打 | UI实现 | 1、显示当前摄像头预览画面/显示默认背景图 2、显示被呼叫人信息 3、状态切换UI和提示 | ||
麦克风状态切换 | 设置SDK对应方法 | |||
摄像头状态切换 | 设置SDK对应方法 | |||
美颜切换 | 设置SDK对应方法,需要检测摄像头是否开启 | |||
被呼叫人信息获取 | 通过腾讯SDK获取 | |||
挂断逻辑 | 使用SDK挂断 | |||
通话中 | UI实现 | 1、通话时间显示 2、云录制状态显示 3、当前用户和对方用户视频流显示 4、状态切换UI和提示 | ||
麦克风切换和页面状态显示 | 1、调用SDK设置 2、显示提示信息,显示麦克风关闭状态 | |||
摄像头和页面状态显示 | 1、调用SDK设置 2、显示提示信息,显示摄像头关闭状态和背景图片 | |||
切换大小屏和页面状态显示 | 1、调用SDK设置 2、显示提示信息,交换视频预览位置和大小 | |||
通话时间 | 预留录制中的文案信息 | |||
通话状态监听并提示 | 1、主要监听网络状态并在页面提示 2、其他错误状态 | |||
通过过程中申请录制逻辑 | 1、显示申请对话框 2、调用SDK方法设置 3、对接自定义消息完成通讯 | |||
机型兼容 | 性能兼容和试图焦点 | 焦点在不同机器上表现不一样 | ||
异常处理 | 网络异常,通话异常和SDK抛出的异常信息处理 | |||
对接 | 协议定制和对接 | 协议定制和对接 | 1、通讯录信息获取 2、摄像头状态接口 3、自定义消息协议制定 | |
自测联调 | 自测联调 | 1、主动呼叫测试 2、被动接听测试 | ||
风险提示 | 设备异常处理(摄像头/麦克风) |
val intent = Intent("com.tcl.ah.VIDEO_CALL")
//uid -- 被呼叫的用户名称 这里需要组装好数据,页面仅做展示 ---- 发起呼叫的用户名 这里需要组装好数据,页面仅做展示 ---- 扩展数据,养老云id
intent.putExtra("extra", "{"uid": "userid_xxx","username": "3#10-1004 苏文阿姨","caller": "3#11-1005 苏文大叔","center_id": "10000"}")
startActivity(intent)
CameraManager.getCameraIdList() //获取可用摄像头列表
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Log
class TclBroadcastReceiver : BroadcastReceiver() {
companion object {
const val ACTION_CAMERA_PLUG_IN = "android.intent.action.CAMERA_PLUG_IN"
const val ACTION_CAMERA_PLUG_OUT = "android.intent.action.CAMERA_PLUG_OUT"
}
override fun onReceive(context: Context, intent: Intent) {
when (intent.action) {
ACTION_CAMERA_PLUG_IN -> {
Log.e("TclBroadcastReceiver", "camera device plug in")
}
ACTION_CAMERA_PLUG_OUT -> {
Log.e("TclBroadcastReceiver", "camera device plug out")
}
else -> {
//other
}
}
}
}
val intentFilter = IntentFilter()
intentFilter.addAction(TclBroadcastReceiver.ACTION_CAMERA_PLUG_IN)
intentFilter.addAction(TclBroadcastReceiver.ACTION_CAMERA_PLUG_OUT)
registerReceiver(TclBroadcastReceiver(), intentFilter)
try {
val intent = Intent("com.example.myapp.CUSTOM_ACTION")
intent.setPackage("com.tcl.ah.tkvideocall")
sendBroadcast(intent)
} catch (e: Throwable) {
}
环境 | APIGateway地址 |
---|---|
⽣产(未发布) | https://tktv.tkhealthcare.com |
测试(已发布) | https://tktv500.tkhealthcare.com |
3.2.2、Header
字段名称 | 描述 | 作用 |
---|---|---|
Content-Type | 扩展名 | 固定值:"application/json; charset=utf-8" |
AppId | 调⽤⽅AppId,⽤以表明服务调⽤⽅⾝份信息 | 相当于当前系统名,代表服务调⽤⽅的⾝份信息,⽤于 鉴权对于第三章的⽹关鉴权来说, Key-auth 模式鉴权的key指的就是这个AppId basic-auth模式鉴权中的username值的就是AppId AppId为字符串 = 系统缩写 + "-" + 微服务名称,使⽤"- "作为间隔 |
接口地址 | [AIPGateway地址] /taikang/api/call/makeCall |
---|---|
请求⽅式 | POST |
参数列表 | 1. roomStr:腾讯通话建⽴的房间id 2. initiateUserId *发起通话的userId(居⺠居住房间电视sn号)*3. receiveUserId 接收通话的userId(管家) 4. centerId 养⽼云id(发起呼叫居⺠) |
⼊参⽰例 | { "roomStr":"1910654899", "initiateUserId":"initiateUserId", "receiveUserId":"receiveUserId", "centerId":"tk154785" } |
出参示例 | { "code": "0x0000", "msg": "ok", "data": null } |
接口地址 | [AIPGateway地址] /taikang/api/call/callState |
---|---|
请求⽅式 | POST |
参数列表 | 1. roomStr:腾讯通话房间id 2. callStatus :通话状态 a. 已接听 :1 b. 已结束 :2 c. 已取消 :3 d. 已拒绝 :4 e. 未接听 :5(呼叫60s未接听) |
⼊参⽰例 | { "roomStr":"1910654899", "callStatus":"1" } |
出参示例 | { "code": "0x0000", "msg": "ok", "data": null } |
3.2.4 自定义消息
目前定义为msgType 为 1代表录制申请相关
{
"msgType":1,
"content":{
"sender":"TV/APP",
"operation":"REJECT/AGREE/REQUEST/END",
"username":"testUser"
}
}
接口地址 | [AIPGateway地址] /taikang/api/call/pushMessage |
---|---|
请求⽅式 | POST |
参数列表 | 1. userId:管家/家医的腾讯UserId2. username :用户居住信息+姓名( 3#10-1004 苏文阿姨) |
⼊参⽰例 | { "userId":"weizy09@", "username":"3#10-1004 苏文阿姨" ,} |
出参示例 | { "code": "0x0000", "msg": "ok", "data": "消息已推送" } |