音视频开发(Anychat如何改善音视频通话过程中的用户体验)

简介:
 
下载 后,首先将其解压到一个临时文件夹中,然后开始后续工作。

 

一、选择播放模式


视频通话过程中出现马赛克或是视频短暂卡住不动等,通常是由于网络不稳定,如丢包、抖动等造成的。

 

AnyChat内核加入了丢包重传、抖动优化等措施,可以避免由于网络偶尔变差而对音视频通话效果的影响,但是当网络带宽不足,或是网络状态持续恶化时,AnyChat内核的优化措施不足以应对恶劣的客观条件时将会出现马赛克现象。

 

AnyChat内核提供了一个API接口,可以让上层根据自身的应用来决定选择何种处理方案:

方案一:打开平滑播放模式,该模式下,出现丢包时,继续播放,保持播放的流畅性,但是界面会出现马赛克,当收到下一个视频关键帧时马赛克消失;

方案二【默认】:关闭平滑播放模式,该模式下,出现丢包时,暂停播放,等下一个视频关键帧到来时再继续播放,界面不会出现马赛克,但是会“卡”一下,“卡”的程度与网络状况相关;

 

处理视频马赛克API接口定义:

///< 平滑播放模式(参数为int型,0 关闭[默认], 1 打开)

#define BRAC_SO_STREAM_SMOOTHPLAYMODE61

 

C++调用示例代码(初始化SDK完成之后调用)

// 关闭平滑播放模式,可防止马赛克出现
DWORD bSmoothPlayMode = 0;
BRAC_SetSDKOption(BRAC_SO_STREAM_SMOOTHPLAYMODE,(const char*)&bSmoothPlayMode, sizeof(DWORD));

// 打开平滑播放模式,可防止视频被卡住,但是会马赛克

DWORD bSmoothPlayMode = 1;

BRAC_SetSDKOption(BRAC_SO_STREAM_SMOOTHPLAYMODE,(const char*)&bSmoothPlayMode, sizeof(DWORD));

 

二、设置音视频流的缓冲时间

 

音视频通话过程中,接收到对方的音视频流数据之后,流数据会进入缓冲区,缓冲到一定的时间才开始播放,这样可以消除网络抖动对通话的影响,缓冲时间越大,应对网络抖动的能力越强,但延迟也越大,不同的应用,不同的网络环境,可设置不同的缓冲时间。

 

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、卫星通讯等)可适当增加流的缓冲时间,至于是采用默认的流畅播放模式,还是关闭流畅播放模式,则需根据实际的应用来决定,通常来说:网络较稳定的场合,可开启平滑播放模式,网络较差的场合,需要关闭平滑播放模式





本文转自 fanxiaojun 51CTO博客,原文链接:http://blog.51cto.com/2343338/1009580,如需转载请自行联系原作者

相关文章
|
6月前
|
自然语言处理 语音技术 开发者
吊打中文合成!这款开源语音神器效果炸裂,逼真到离谱!
Spark-TTS 是一个面向中文及多语言文本转语音(TTS)场景的开源项目,旨在帮助开发者快速、简便地生成自然流畅的语音合成结果。它拥有灵活的配置方式和良好的扩展性能,对于需要文本到语音功能的应用场景,如有声读物、播客制作、智能客服、语音助手等,都提供了高可用性和可定制化的方案。凭借对多语种、多音色的支持以及清晰自然的发音质量,Spark-TTS 获得了许多开发者的青睐。
604 1
|
传感器 监控 数据中心
|
11月前
|
Kubernetes 网络协议 网络安全
Pod之间的通信问题
【10月更文挑战第6天】
385 4
|
11月前
|
Kubernetes 网络协议 网络安全
k8s中网络连接问题
【10月更文挑战第3天】
697 7
|
12月前
ConnectionResetError: [Errno 104] Connection reset by peer|4-16
ConnectionResetError: [Errno 104] Connection reset by peer|4-16
|
机器学习/深度学习 监控 语音技术
深度学习之音视频结合
基于深度学习的音视频结合是一个跨模态任务,旨在从音频和视频两种数据模态中提取有用的特征,并将其融合以实现特定的任务,如情感识别、说话人识别、语音分离、动作识别等。
287 7
|
11月前
|
数据挖掘 物联网 数据处理
深入探讨Apache Flink:实时数据流处理的强大框架
在数据驱动时代,企业需高效处理实时数据流。Apache Flink作为开源流处理框架,以其高性能和灵活性成为首选平台。本文详细介绍Flink的核心特性和应用场景,包括实时流处理、强大的状态管理、灵活的窗口机制及批处理兼容性。无论在实时数据分析、金融服务、物联网还是广告技术领域,Flink均展现出巨大潜力,是企业实时数据处理的理想选择。随着大数据需求增长,Flink将继续在数据处理领域发挥重要作用。
858 0
|
分布式计算 DataX MaxCompute
DataX使用指南——ODPS to ODPS
1. DataX是什么 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。
48661 2
|
SQL
Mybatis-Plus时间范围查询
Mybatis-Plus时间范围查询
904 0
|
存储 算法 安全
【国密算法】国密算法在Java中的实践
【国密算法】国密算法在Java中的实践