如何改善音视频通话过程中的用户体验?
来源:互联网 发布:ubuntu右键打开终端 编辑:程序博客网 时间:2024/04/29 19:58
如何改善音视频通话过程中的用户体验?
一、选择播放模式
视频通话过程中出现马赛克或是视频短暂卡住不动等,通常是由于网络不稳定,如丢包、抖动等造成的。
AnyChat内核加入了丢包重传、抖动优化等措施,可以避免由于网络偶尔变差而对音视频通话效果的影响,但是当网络带宽不足,或是网络状态持续恶化时,AnyChat内核的优化措施不足以应对恶劣的客观条件时将会出现马赛克现象。
AnyChat内核提供了一个API接口,可以让上层根据自身的应用来决定选择何种处理方案:
方案一:打开平滑播放模式,该模式下,出现丢包时,继续播放,保持播放的流畅性,但是界面会出现马赛克,当收到下一个视频关键帧时马赛克消失;
方案二【默认】:关闭平滑播放模式,该模式下,出现丢包时,暂停播放,等下一个视频关键帧到来时再继续播放,界面不会出现马赛克,但是会“卡”一下,“卡”的程度与网络状况相关;
处理视频马赛克API接口定义:
///< 平滑播放模式(参数为int型,0 关闭[默认], 1 打开)
#define BRAC_SO_STREAM_SMOOTHPLAYMODE61
C++调用示例代码(初始化SDK完成之后调用)
// 打开平滑播放模式,可防止视频被卡住,但是会马赛克
DWORD bSmoothPlayMode = 1;
BRAC_SetSDKOption(BRAC_SO_STREAM_SMOOTHPLAYMODE,(const char*)&bSmoothPlayMode, sizeof(DWORD));
二、设置音视频流的缓冲时间
音视频通话过程中,接收到对方的音视频流数据之后,流数据会进入缓冲区,缓冲到一定的时间才开始播放,这样可以消除网络抖动对通话的影响,缓冲时间越大,应对网络抖动的能力越强,但延迟也越大,不同的应用,不同的网络环境,可设置不同的缓冲时间。
AnyChat内核在通话的过程中,会自动评估网络状态,根据不同的网络状态来动态调整缓冲时间:当网络状态好时,会尽量减少缓冲时间,保障通话过程的实时性;当网络状态差时,会适当增大缓冲时间,保持通话过程的流畅性(参考:241. AnyChat音视频延迟有多大?)。
设置流缓冲时间API接口定义:
///< 最大流缓冲时间(参数为int型,单位:毫秒,取值范围:500 ~ 5000,默认:800)
#define BRAC_SO_STREAM_MAXBUFFERTIME60
C++调用示例代码(初始化SDK完成之后调用)
// 设置音视频流最大缓冲时间
DWORD dwMaxBufferTime = 2000;
BRAC_SetSDKOption(BRAC_SO_STREAM_MAXBUFFERTIME,(const char*)&dwMaxBufferTime, sizeof(DWORD));
设置的最大流缓冲时间为允许内核调节缓冲时间的上限,只有当网络条件非常恶劣时才会达到设置的缓冲时间,在网络条件允许的情况下,内核会尽最大的能力保障交互的实时性,减少缓冲时间。简而言之,增大缓冲时间,应对网络抖动、丢包的能力增强,但是在网络变差时,会带来一些延迟。
经验总结:普通的应用保持AnyChat内核的默认设置即可,当应用环境网络不稳定时,且对实时性要求不高的场合(如3G、卫星通讯等)可适当增加流的缓冲时间,至于是采用默认的流畅播放模式,还是关闭流畅播放模式,则需根据实际的应用来决定,通常来说:网络较稳定的场合,可开启平滑播放模式,网络较差的场合,需要关闭平滑播放模式
注:上述两个API接口为AnyChat Platform Core SDK V4.5版本新增。
- 如何改善音视频通话过程中的用户体验?
- 如何改善音视频通话过程中的用户体验?
- 亚马逊用户体验改善
- 改善用户体验
- 如何改善软件的用户体验 之 颜色与UI
- 如何改善软件的用户体验 之 颜色与UI
- 精益设计: 设计团队如何改善用户体验
- Sipdroid中的视频通话是如何实现的?
- 使用ErrorProvider改善用户体验
- 使用ErrorProvider改善用户体验
- 表单设计改善用户体验
- 自定义progressdialog,改善用户体验
- 【转】如何改善软件的用户体验 之 颜色与UI
- ajax:改善用户体验之进度条
- 改善用户体验的alert提示效果
- 改善用户体验的alert提示效果
- 改善用户体验之alert提示效果
- 改善用户体验的alert提示效果
- 主进程退出的时候,杀死所有子进程
- MVC下载文件方式
- 对统一专利法庭的探索性观点
- B-树和B+树的应用:数据搜索和数据库索引
- LIS(最长递增子序列)和LCS(最长公共子序列)的总结
- 如何改善音视频通话过程中的用户体验?
- jquery.validate.js使用心得
- net::ERR_CACHE_MISS这个错误是由于缺失权限引起
- Oracle拆分字符串函数
- POJ_3006
- SQL Servier插件SQL Prompt 5使用
- Java SE学习之方法参数的使用
- 打包DMG方法 (Mac 中)
- sscanf