连麦已经成为互动直播的基本功能,但连麦的成本较高,对业务形成比较大的压力。北京密境和风科技有限公司iOS技术负责人唐赓在LiveVideoStack Meet上分享了花椒直播在降低连麦成本方面的一些探索,此外对连麦费用构成、降低成本可采用方案,以及实际效果进行分析。

演讲 / 唐赓

整理 / LiveVideoStack

class="video_iframe" data-vidtype="2" allowfullscreen="" frameborder="0" data-ratio="1.7647058823529411" data-w="480" data-src="http://v.qq.com/iframe/player.html?vid=t0524zlq15o&width=638&height=358.875&auto=0" style="display: none; width: 638px !important; height: 358.875px !important;" width="638" height="358.875" data-vh="358.875" data-vw="638" src="http://v.qq.com/iframe/player.html?vid=t0524zlq15o&width=638&height=358.875&auto=0"/>

我将从以下五部分分享我们在连麦成本控制方面的尝试和经验:连麦接入方案、费用构成分析、尝试方案、实现过程中存在的问题以及实际效果分析。

连麦接入方案

上图是最常见的单向直播架构,左侧主播端将直播流推到源站,源站再通过CDN分发到边缘节点,所有客户端则是从这些边缘节点拉取数据,这是最普通的方案。单向直播对技术的要求相对较低,它对延迟、实时性没有过高的需求,但是对CDN的要求会相对高一些,来保证直播的连通性和覆盖率。

但是对连麦的接入方案而言,连麦本身对实时性是有较高要求,当然这个要求主要是针对连麦的主播之间的,因此连麦服务商都会有连麦服务器来保证主播之间实时互动的连通性和实时性,连麦服务使用的肯定是核心服务器,那么相对而言成本也会高很多。而对于普通的观众端则依旧是从CDN边缘节点拉流观看直播。

但是这个架构我们在实际应用过程中遇到了很多问题:首先就是开播之前必须选择是否使用连麦,这决定了主播推送的流是否要接入连麦服务器,因为连麦成本(单价)是普通直播的20倍、甚至40倍,而有的主播虽然在开播前选择连麦,但在直播过程中却并没有用到,这无形之中就极大增加了直播成本。也正是因为如此,给所有主播都开启连麦是不可能的,而且也仅仅有小部分主播需要使用到连麦功能。而另一个问题则是在直播过程中突然有连麦需求怎么办?下播重新推流显然是不现实的,一方面会影响观看体验,一方面也很难再次聚集人气。此外伴随直播玩法的更新,象主播间的连麦PK、多个直播间合并这样的需求也在不断增加,如何支持这些需求,这就需要对直播架构进行重新设计。

连麦成本构成分析

连麦成本首先是连麦服务费,它的计算方式分为按照房间数*时长计算和按流量计算两种,无论用哪种方式计算,通常价格都是普通CDN的20倍、甚至40倍以上。费用构成的第二部分就是中间CDN费用,这部分又会有两种方案:一种是直接使用连麦服务厂商提供的SDK中的CDN解决方案,一种是自建或单独购置CDN,两种方案相较而言可能第二种方式在费用上会更合适些。此外还可能会产生的成本就是合流费用,这部分费用产生的原因是连麦会产生多个窗口,假如采用拉取多路流再在客户端拼合成需要的布局,一个因为手机和各客户端本身分辨率有差异,另外为保持所有客户端获取一致体验需要手机端代码来保证播放同步,这在实现过程中会遇到很多麻烦,因此我们采用将多个流合流为一路推送到客户端,目前几大连麦服务厂商都提供了合流服务,但同时在费用上它甚至比连麦服务还要再贵几倍。因此我们使用FFmpeg自己开发了一套实现方案。

降低成本的实现&遇到的问题

上图是我们改进后的架构,主播在正常开播时依旧是采用传统的单向直播方案,直播流会走绿色的线推给源站进行推流,而连麦服务初始状态是隐藏的,一旦有需求,主播只要同意连麦请求就会自动切换到连麦服务器上,再推给源站推流。

  • 老版本兼容问题

但在实现过程中我们也遇到了一些问题:首先是版本问题,如果要实现这样一个架构,我们就必须通过IM通道通知所有客户端流流名变更、流服务器地址变更,然后手机就会立刻从新的地址拉流,但老版本并不支持这个协议。此外还有H5和PC Web的问题。

这张图是我们针对老版本兼容改进的架构,当主播切换到连麦后原本推流的绿色虚线就会消失,改由连麦服务器按照原来的流名继续推流到源站,这样就可以保证老版本客户端能够源源不断看到直播内容,而新客户端也可以正常拉取到新的流。这里需要注意的一点,为了保证老版本客户端收到的内容也是新的画面,就需要连麦服务器在原来流名推的是合流之后的流。

  • 推流保护机制

但在我们实现过程中发现这条路走不通,因为CDN厂商有一套推流保护机制来防止流被别人恶意劫持, 它会记住上一次推流到这个流名的IP,并且在一定时间内不允许更换IP,或者需要特殊的API调用去通知它IP更换。因此这个问题只能通过和CDN厂商协商来解决了。

  • 推流参数变更

推流参数变更也是我们遇到的坑,原本的推流是由手机端直接推的,而手机的推流参数与连麦服务器和合流务器输出的参数是不一样的,这就可能会出现没有声音、直播画面出现异常等等各种问题。对于这个问题,我们也是和推流中所有环节的厂商——包括连麦服务商和各家CDN厂商规定了一套推流参数规则来解决这个问题。当然这些服务商也并非只有我们一家,因此他们在对我们参数适配的同时也还要兼顾其他客户的正常使用,所以测试、发布的过程也是非常谨慎小心的。

  • 新增CDN厂商不兼容

在规定推流参数的同时又衍生出了一个新的问题,就是新增CDN厂商的不兼容。我们的推流参数不是固定不变的,因为在手机端推流时,分辨率、码率、帧率都会根据当前网络带宽、手机CPU消耗等因素做动态调整,因此我也只能要求新增的CDN厂商按照我们的规范支持分辨率、码率的动态调整。

除此之外还会有一些其他的坑,比如我们自身用了很多私有协议,而厂商可能用的是公有协议,那么在对接时协议之间又会有很多不兼容,需要做适配转换。

实际效果分析

在经历一系列的问题改进,最终能达到的效果基本可以归纳为4点。首先对于主播而言,他可以随时进行连麦,不需要在开播前就必须做出选择。第二点我们实现了多个直播间合并直播,并且加入了一些设计:当多个主播连麦时,直播间观众看到的主播位置排序一定是当前主播在第一位,这个在实现过程中需要注意给到合流服务器的所有排列组合信息是正确的;在合并直播的基础上我们也做了主播才艺的PK。此外实现了老版本的平滑过渡。当然最大的好处就是成本降低,主播只有在有连麦需求的时候才会自动切换到连麦服务器,而我们也设定了一个时间域值,当主播一定时间不连麦后我们会自动切回普通直播,这样就比较明显的减少了连麦成本。

以上是我们尝试的新的直播架构,以及实现过程中遇到的问题和解决思路,谢谢大家。

LiveVideoStack招募全职技术编辑和社区编辑


LiveVideoStack是专注在音视频、多媒体开发的技术社区,通过传播最新技术探索与应用实践,帮助技术人员成长,解决企业应用场景中的技术难题。如果你有意为音视频、多媒体开发领域发展做出贡献,欢迎成为LiveVideoStack社区编辑的一员。你可以翻译、投稿、采访、提供内容线索等。


通过contribute@livevideostack.com联系,或在LiveVideoStack公众号回复『技术编辑』或『社区编辑』了解详情。

你还在为20倍的连麦成本发愁吗?相关推荐

  1. python减小内存占用_如何将Python内存占用缩小20倍?

    当程序执行过程中RAM中有大量对象处于活动状态时,可能会出现内存问题,特别是在对可用内存总量有限制的情况下. 下面概述了一些减小对象大小的方法,这些方法可以显著减少纯Python程序所需的RAM数量. ...

  2. 一年暴涨近20倍,比特币是郁金香泡沫还是庞氏骗局?

    如果用两个字来形容今年比特币的行情,那无疑是"疯狂".从年初的 963 美元开始,历经上半年的缓慢拉升,年中的两次大幅跳水,下半年却如火箭发射一般一发而不可收拾,最高价格已到两万美 ...

  3. 提速20倍!谷歌AI发布TensorFlow 3D

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨新智元 编辑丨极市平台 随着自动驾驶汽车与机器人的深入发展,激 ...

  4. 一个简单的更改让PyTorch读取表格数据的速度提高20倍:可大大加快深度学习训练的速度...

    来源:DeepHub IMBA 本文约3000字,建议阅读5分钟 我在PyTorch中对表格的数据加载器进行的简单更改如何将训练速度提高了20倍以上,而循环没有任何变化! 深度学习:需要速度 在训练深 ...

  5. 朱俊彦团队提出GAN压缩算法:计算量减少20倍,生成效果不变,GPU、CPU统统能加速...

    边策 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 现如今,GAN的效果已经越来越出神入化. 比如英伟达的GauGAN,就如神笔马良,能够凭空造物: 不过,从无化有背后,计算量也相当惊人 ...

  6. FPGA加速BCNN,模型20倍剪枝率、边缘设备超5000帧/秒推理吞吐量

    ©作者 | 机器之心编辑部 来源 | 机器之心 来自康涅狄格大学等机构的研究者提出了一种基于结构剪枝的 BCNN 加速器,它能以较小的准确率损失获得 20 倍的剪枝率,并且在边缘设备上提供了超过 50 ...

  7. extjs 表格数据重新加载_一个简单的更改让PyTorch读取表格数据的速度提高20倍:可大大加快深度学习训练的速度...

    来源:DeepHub IMBA 本文约3000字,建议阅读5分钟我在PyTorch中对表格的数据加载器进行的简单更改如何将训练速度提高了20倍以上,而循环没有任何变化! 深度学习:需要速度 在训练深度 ...

  8. spark减少内存消耗_将内存消耗减少20倍

    spark减少内存消耗 这将是另一个故事,与我们分享有关内存相关问题的最新经验. 该案例是从最近的客户支持案例中提取的,在该案例中,我们遇到了一个行为异常严重的应用程序,该应用程序因生产中的OutOf ...

  9. 将内存消耗减少20倍

    这将是另一个故事,与我们分享有关内存相关问题的最新经验. 该案例是从最近的客户支持案例中提取的,在该案例中,我们遇到了一个行为异常严重的应用程序,该应用程序因生产中的OutOfMemoryError消 ...

最新文章

  1. 学界 | UC伯克利发布一个低成本家居机器人,会叠衣服、会泡咖啡
  2. [20190113]四校联考
  3. 连载:阿里巴巴大数据实践—数据服务
  4. 【贪心】国王游戏(ybtoj 贪心-1-4)
  5. 什么叫pmt测试分析_RVS — 面向目标硬件的软件性能测试工具
  6. MySQL多表数据记录查询详解
  7. 没有workstation_这才是Win10的旗舰版:WorkStation版独享功能测试
  8. python 网格搜索_Python机器学习:6.4 通过网格搜索调参
  9. 中国天气网城市编码获取地址
  10. 怎么保存html上的图片,一分钟教你如何保存网页上一些不能直接保存的图片
  11. vga焊接线顺序_vga线序是怎么排列的?
  12. autoCAD 授权文件的位置
  13. matlab平行线的中线,cad怎么画两条平行线的中线
  14. 信安知识竞赛培训笔记
  15. chrome浏览器主页变成hao123
  16. 动态路由协议:华为路由配置OSPF实验
  17. 创业起步阶段需要注意的几点
  18. 阿里云Code设置ssh公钥
  19. 让自己不烦心的心理暗示
  20. 华为设备配置Hub and Spoke

热门文章

  1. 2016云栖大会马云畅谈未来五大创新趋势
  2. Linux运维工程师面试题第三套
  3. oracle 10g gateway 安装操作,Oracle 10g RAC启动节点报错 Default gateway is not defined
  4. Web开发-Django初识及实战
  5. VC6.0蕉HOOK_timeGetTime 达到变速效果
  6. 用完成例程(Completion Routine)实现的重叠I/O模型
  7. c++ template(4)基本技巧
  8. PyCairo 中的基本绘图
  9. 在Java中使用Protocol Buffers
  10. webpack 从 0 到 1 构建 vue