TRTC功能咨询
1、TRTC能实现手机端和pc端通过手机号搜索,进行音视频通话么?
使用场景:
(1)医生与病人进行音视频一对一问诊(包括多人视频会议)
(2)医生使用PC端,病人使用移动端
问题:PC端怎么通过音视频通话邀请移动端进入通话,就像IM视频通话一样?使用的是TRTC,请问怎么能实现这个业务场景?
解答:
一:首先在TRTC官方demo中手机端是可以实现1V1音视频通话的(demo下载地址:https://cloud.tencent.com/document/product/647/32689),具体实现过程:A拨打音视频通话给B,A通过IM发送一条消息给B同时创建一个房间,B接收到消息,点开进入音视频通话界面,接受进入房间。
所以1V1音视频通话到底是怎么实现的呢?实际上就是双方进入同一个房间,只不过房间号没有开放出来。
二:跨端的音视频通话,也是通过IM消息发送,进入房间实现的。
(PC端邀请移动端音视频通话)具体实现过程:用户服务器肯定得保存用户的userID(手机号注册,对应唯一的userID),PC端通过手机号搜索用户(userID),拨通音视频通话(并创建房间)。这时,通过IM发送消息给移动端,移动端接收邀请进入房间。
2、如何获取采集的每一帧?有现成的接口吗?
使用SDK采集视频,无法获取到CVPixelBufferRef(每一帧)。只能自定义时才能通过onPlayerPixeBuffer:这个方法拿到CVPixelBufferRef
3、如何监听网络,弱网时提示切换网络或者停止连麦?
弱网状态下,直播连麦会出现卡顿甚至丢帧的情况。TRTC可以使用 onNetworkQuality() 监听当前网络的上行和下行质量,实现信号强弱功能。在VoiceRoomTRTCServiceDelegate下设置了一个代理方法
func onNetWorkQuality(trtcQuality: TRTCQualityInfo, arrayList: [TRTCQualityInfo])
通过设置当前代理,实现网路监听,
func onNetWorkQuality(trtcQuality: TRTCQualityInfo, arrayList: [TRTCQualityInfo]) {
//判断网络,进行操作(提示主播切换网络)
switch trtcQuality.quality {
case TRTCQuality.excellent:
print("网络最好")
case TRTCQuality.good:
print("网络好")
case TRTCQuality.poor:
print("网络一般")
case TRTCQuality.bad:
print("网络差")
case TRTCQuality.vbad:
print("网络很差")
case TRTCQuality.down:
print("网络不可用")
default:
print("未知网络")
}
}
4、新版本的应用是否能使用旧版本的混流方式?
解决办法:新版本的应用可以使用旧版本的混流方式,但是,不能使用客户端SDK进行混流。因为新版本默认是使用MCU混流方式,所以只能服务器使用云直播混流的方式进行混流。但是这样又出现一个问题,这样的混流不能进行录制。
录制的解决办法:是api没带product_name的原因,api支持product_name后期会改善发布。
目前解决方式可以在trtc控制台配置录制模板,通过模板来拉起录制任务(https://cloud.tencent.com/document/product/647/16823 )
5、直播音画不同步?
解答思路:
首先造成音画不同步的原因一般有两种:
1) 音视频数据采集时时间戳添加就存在偏差,这种情况上,需要从采集设备端调整PTS 生成策略。
2) 网络传输导致的时间戳偏差,由于网络延时、丢包、带宽不足等原因,音视频数据包没有同步到达播放器,解码的时候有了一些偏差,这种情况也有可能导致音画不同步。
通过仪表盘查看直播的音视频的图形表,发现音视频和网络的波动很大,初步得出结论是网络影响了音视频数据包的传输和解码时机,导致的不同步。进而发现用户使用App的CPU使用率平均在80%左右。最终建议:1、在网络流畅的情况下进行直播,2、直播是建议关闭其他占用CPU资源多的App 3、代码进行App的内存优化
- Linux基础(day65)
- 18.12 keepalived + LVS
- 学会JS只是知道了“是什么”,并不意味着你会用JS做什么
- Linux基础(day68)
- 启动zabbix 报错
- 深入理解C# 3.x的新特性(2):Extension Method[上篇]
- 深入理解C# 3.x的新特性(2):Extension Method[下篇]
- 19.13/19.14 配置邮件告警
- 19.12 添加自定义监控项目
- [原创]深入理解C# 3.x的新特性(3):从Delegate、Anonymous Method到Lambda Expression
- a=b=c,但a不等于c?这是什么鬼
- 为什么不是0,1,2,3,4?setTimeout的奇怪问题
- Linux基础(day67)
- 深入理解C# 3.x的新特性(5):Object Initializer 和 Collection Initializer
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [译]使用DOT语言和GraphvizOnline来可视化你的ASP.NETCore3.0终结点01
- 探索 React 内核:深入 Fiber 架构和协调算法
- [经验]使用Keil MDK+Jlink-OB下载失败的解决办法
- ESP8266两种工作模式数据传输测试
- 『真香警告』这33个超级好用的CSS选择器,你可能见都没见过。
- [踩坑]STM32外部8M晶体不起振会有什么现象?
- 干掉 GuavaCache:Caffeine 才是本地缓存的王
- 美团数据怎么爬,看看这个文章吧!
- [硬件]关于SPI Flash那些你不知道的事儿
- 「新特性」Spring Boot 全局懒加载机制了解一下
- 做olap一定要要了解的Druid存储结构
- 【ST开发板评测】使用Python来开发STM32F411
- 一文详解 Ansible 自动化运维!
- 手把手教你搭建织女星开发板RISC-V开发环境
- R语言多臂试验 - 我们应该考虑多重性吗?