声网自研的抗丢包音频编码,底层序列化/反序列化使用 protobuf 实现

摘要近日,腾讯QQ上线了一项超级功能,那就是允许QQ年费超级会员,创建3000人的群。近日,腾讯QQ上线了一项超级功能,那就是允许QQ年费超级会员,创建3000人的群。下面一起来了解下详情。3000人群可以新开通,也可以升级现有群,每人最多只能创建3个,提供2GB的永久群共享空间、1-5GB的群相册空间,可以设置最多30个管理员,并可随意设置群图标。用户要想开通QQ
3000人群,必须每年花费638元,其中240元购买QQ年费超级会员资格、398元购买3000人群创建资格。但如果使用QQ支付目前可以享受95折优惠,3000人群购买费用为378.1元,再算上年费超级会员费用总共要618.1元。特别注意以上都是每一年的费用,费用到期前群主必须保持年费超级会员身份。如群主失去年费超级会员身份,或者3000人群付费到期,就会自动降级为200人群。此时如果群人数已超出200人,就不能继续加入新成员,只允许退出。3000人群降级后,可以通过重新开通年费超级会员或者重新购买3000人群的方式,再次将原来降级的群重新升级为3000人群。另外,3000人群不能转让,不能解散,如有违规行为会被封群,但费用不退。

摘要2018年11月21日,“声网Agora”正式宣布完成7000万美元C轮融资,由全球科技股对冲基金Coatue
Management领投,SIG海纳亚洲、Morningside晨兴资本和顺为资本跟投。从YY到声网声网Agora成立于2014年,由前YY语音CTO赵斌在硅谷创立,定位全球实时通信云服务商,其核心技术为RTC。实时通信(Real-time
Communication,
简称RTC),即允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流,也就是现在很多应用内都会有的聊天、语音、视频功能。通过调用声网的API,开发者可以快速创建这些功能,实现例如视频社交、互动直播、游戏开黑、AR远程协作、视频报警、视频客服、机器人视频陪伴等场景。自研算法优化底层技术音视频传输,通常需要经过“采集—预处理—编码—传输—端处理—解码”等一系列流程,不同服务商会在每一个环节进行优化,从而提高传输速率、质量。例如,声网的预处理已经不仅包括美颜、瘦脸等基础功能,还加入了“人机交互”——在直播中,用户用手势比一个心型,那么系统就会自动识别出来,发几个颗心给对方。再比如,对音视频传输质量影响很大的编、解码环节。编、解码可以理解为压缩、解压缩,原则上,在网络传输出现问题时压缩包会丢失,丢的越多,出现的卡顿就越多。在这方面,声网首席科学家、国际编解码专家钟声曾表示:“视频编码,声网的新算法在高丢包率、低延迟情况下,能体现更多优势。相同质量下只需要一半的码率,比如延迟只有4帧情况下,丢包率是60%,基本上码率只有原来的一半,同时编码的质量和复杂性没有本质变化。如果拿到很模糊的图像,需要在低码率、低分辨率情况下还原,基于传统多像位滤波、三次发差值等方法还原出来的图像,总体上比较模糊。用了深度学习算法之后,细节明显提升,即使在较差网络条件、带宽受限的情况下,依旧可以还原清晰画质。但深度学习有一个大问题,就是需要在大模型、大数据、大平台上实现,可用户基本都在使用移动端,对于算法的实现是一个挑战。声网在这方面也做了很多优化,比如在iPhone6上把一个放大9倍算力支持到每秒200帧,已经达到实时。在音频方面,声网自研的抗丢包音频编码
Agora Solo™ 已发布进化版Solo X™,具有抗丢包特性,即使是在 50%
的丢包下,用户都可以听清对方所讲的内容。同时,自研的分组信号互补技术,兼容Opus和WebRTC。”音视频普及带动场景延伸据悉,除了硅谷,声网已于上海、北京、广州、伦敦、班加罗尔、东京等地有分布式协作团队。目前已在全球自建200多个数据节点的SD-RTN™
软件定义实时网,服务了全球超20万开发者,覆盖全球超过20亿终端用户,每日支持通话分钟数超过3亿,客户包括社交、直播、游戏、教育等、民生、政务、医疗、金融、物联网等行业,同时与小米、陌陌、中国移动在线、The
Meet Group、Hike
Messenger、Badoo、Musical.ly、V-cube、好未来、招商银行等建立了战略合作关系。列举一个应用场景,目前重庆市已推出急救视频
120 自救互救服务,在拨打 120
或下载相关App后,医生可通过视频对话,指导现场人员进行自救或互救,若用户此前并未下载
App,拨打120后,手机会收到一条包含 URL 的短信,用户可通过 Web
端与急救医生视频对话。该场景的实时视频通话就是通过声网SDK实现的。再比如,郑州铁路警方用AI警务眼镜筛查网上在逃人员的新闻中,采用的是亮亮视野推出的搭载VPU的AR眼镜,其中内嵌了声网的语音通话技术。谈及未来,声网CEO赵斌表示,目前看来,RTC技术服务平台市场规模超80亿美金,亚洲和欧美市场使用量最大,中东、俄罗斯、非洲等市场增长较快。随着语音聊天室、视频社交、互动课堂等成熟使用场景的普及,音视频互动已成为用户最为主流的使用习惯,未来更多线下的真实互动场景将被搬到线上,构建新的线上世界。声网Agora官网

摘要腾讯微信团队于2018年9月底宣布开源 MMKV ,这是基于 mmap 内存映射的
key-value 组件,底层序列化/反序列化使用 protobuf
实现,主打高性能和稳定性。近期也已移植到 Android
平台,一并对外开源。简介MMKV 是基于 mmap 内存映射的 key-value
组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015
年中至今,在 iOS 微信上使用已有近 3
年,其性能和稳定性经过了时间的验证。近期也已移植到 Android
平台,一并开源。MMKV最新源码托管地址:
源起在微信客户端的日常运营中,时不时就会爆发特殊文字引起系统的
crash(请参见文章:《微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的?》、《微信团队分享:iOS版微信的高性能通用key-value组件技术实践》),文章里面设计的技术方案是在关键代码前后进行计数器的加减,通过检查计数器的异常,来发现引起闪退的异常文字。在会话列表、会话界面等有大量
cell
的地方,希望新加的计时器不会影响滑动性能;另外这些计数器还要永久存储下来——因为闪退随时可能发生。这就需要一个性能非常高的通用
key-value 存储组件,我们考察了 SharedPreferences、NSUserDefaults、SQLite
等常见组件,发现都没能满足如此苛刻的性能要求。考虑到这个防 crash
方案最主要的诉求还是实时写入,而 mmap
内存映射文件刚好满足这种需求,我们尝试通过它来实现一套 key-value
组件。MMKV 原理内存准备通过 mmap
内存映射文件,提供一段可供随时写入的内存块,App
只管往里面写数据,由操作系统负责将内存回写到文件,不必担心 crash
导致数据丢失。数据组织数据序列化方面我们选用 protobuf 协议,pb
在性能和空间占用上都有不错的表现。写入优化考虑到主要使用场景是频繁地进行写入更新,我们需要有增量更新的能力。我们考虑将增量
kv 对象序列化后,append 到内存末尾。空间增长使用 append
实现增量更新带来了一个新的问题,就是不断 append
的话,文件大小会增长得不可控。我们需要在性能和空间上做个折中。更详细的设计原理参考MMKV
原理。iOS 指南安装引入推荐使用
CocoaPods:安装CocoaPods;打开命令行,cd到你的项目工程目录, 输入pod repo
update让 CocoaPods 感知最新的 MMKV 版本;打开 Podfile, 添加pod
‘MMKV’到你的 app target 里面;在命令行输入pod install;用 Xcode 打开由
CocoaPods 自动生成的.xcworkspace文件;添加头文件#import
<MMKV/MMKV.h>,就可以愉快地开始你的 MMKV
之旅了。更多安装指引参考iOS Setup。快速上手MMKV
的使用非常简单,无需任何配置,所有变更立马生效,无需调用synchronize:MMKV*mmkv=[MMKVdefaultMMKV];[mmkvsetBool:YESforKey:@”bool”];BOOLbValue=[mmkvgetBoolForKey:@”bool”];[mmkvsetInt32:-1024forKey:@”int32″];int32_tiValue=[mmkvgetInt32ForKey:@”int32″];[mmkvsetObject:@”hello,mmkv”forKey:@”string”];NSString*str=[mmkvgetObjectOfClass:NSString.classforKey:@”string”];更详细的使用教程参考iOS
Tutorial。性能对比循环写入随机的int1w
次,我们有如下性能对比:更详细的性能对比参考iOS Benchmark。Android
指南安装引入推荐使用
Maven:dependencies{implementation’com.tencent:mmkv:1.0.10’//replace”1.0.10″withanyavailableversion}更多安装指引参考Android
Setup。快速上手MMKV
的使用非常简单,所有变更立马生效,无需调用sync、apply。 在 App
启动时初始化 MMKV,设定 MMKV 的根目录(files/mmkv/),例如在
MainActivity
里:protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);StringrootDir=MMKV.initialize(this);System.out.println(“mmkvroot:”+rootDir);//……}MMKV
提供一个全局的实例,可以直接使用:importcom.tencent.mmkv.MMKV;//……MMKVkv=MMKV.defaultMMKV();kv.encode(“bool”,true);booleanbValue=kv.decodeBool(“bool”);kv.encode(“int”,Integer.MIN_VALUE);intiValue=kv.decodeInt(“int”);kv.encode(“string”,”Hellofrommmkv”);Stringstr=kv.decodeString(“string”);MMKV
支持多进程访问,更详细的用法参考Android
Tutorial。性能对比循环写入随机的int1k
次,我们有如下性能对比:更详细的性能对比参考Android Benchmark。

相关文章