用上直播大数据课程:如何进行主数据管理?课程直播方便吗?

抱歉,您的浏览器不支持在线播放MP4!

我们先从普通的直播模式说起,目前常规的直播遵循如下图所示的模式:主播端(TXLivePusher)将音视频数据推送给云服务器,多个观众端(TXLivePlayer)就可以从云端拉流并播放音视频数据。
既然要做连麦,那么反向的一条线路就必不可少,我们这里做个假设,观众 A 从原来的普通观众变成了小主播,那么下图中就多出了一条直播流(图中红色虚线所示):

腾讯云 RTMP 直播支持跨房间连麦互动,所以小主播(们)可以是原房间里的普通观众,也可以是另一直播间里的其他主播。

从“单向”到“多向”,这看似很简单,而且直接用 RTMP SDK 按这个思路也是可以实现的。但效果却很难达到商用的要求,因为有两个难题需要我们去解决:

  • 常规直播解决方案中从推流端到播放端延迟一般在 2-3 秒,但是连麦场景中大主播和小主播们之间的延迟如果超过 1s,和谐的语音沟通就基本不可能了。
  • 常规直播解决方案中,由于语音是单向的(主播说 => 观众听),所以没有必要去做 AEC(回音消除)。但是连麦场景中有双向(或多向)的语音沟通,主播的声音流向小主播那一端的扬声器,如果不做回音消除,这些声音会再经由麦克风采集后返还给主播本人。
  • 解决完延迟问题和回音问题,大主播和小主播(们)之间是可以互动了,但是要让普通的直播观众看到才算真正成功,所以多路画面必须要完成混流才能在观众端正常展示。

我们先看看怎么解决延迟问题,要解决延迟,先要弄明白延迟是怎么来的?
上图中红色标记的三处是整条链路的主要延迟来源,一场延迟大约 3 秒的直播中,以上三个模块“贡献”了 80% 的力量。

  • 转码模块的主要工作是对主播推上来的音视频数据做进一步的加工处理,同时,如果您有多清晰度(超清、高清、标清)以及多格式(比如适合 Web 播放的 HLS)的需求,这也是转码模块需要去操心的。
  • 在连麦场景中,大主播和小主播(们)之间如果都使用 RTMP 协议构建链路,那就不需要转码集群的参与,因为能够省掉这部分延迟。

  • CDN 集群存在目的是 分发 数据流:如果主播在上海,那么他/她肯定是向上海的服务器推流,这样才能保证较好的上传质量,问题来了,桂林和哈尔滨的观众怎么办呢?难道从上海的服务器上去拉流吗?显然这并不是一个好主意,可行的方案是通过 CDN 分发集群将音视频流按需分发到桂林和哈尔滨两个城市。
  • 连麦场景中,大主播和小主播(们)之间如果都不走 CDN 集群,他们之间的延迟可以缩短很大一截。但这样一来,地域问题如何解决? 比如有两位主播要连麦互动,一位在北京,一位在深圳,相隔千里,如何才能构建低延时且高质量的直播链路呢?
    腾讯云的解决方案是采用 RtmpAcc 加速节点,它是我们专门为连麦场景所设立的超低延迟加速集群,在全国各大关键网络节点均有部署。这些加速节点全部由专线连接,唯一的职能便是为处于不同地域、不同运营商的主播,提供可靠而优质的低延时链路。

  • 播放器的缓冲是多多少少都要有的,因为下行网络不可能均匀平滑不抖动。缓冲区越长,抗网络抖动的效果就越好,视频的观看体验也就越流畅,同时,这也意味着更大的延迟。常规解决方案中,我们一般设置 500ms 或者 1000ms 以上的播放器缓冲。
  • 在连麦场景中,这里就要激进一些,比如 200ms 的延迟相对适中。于此同时,常规开源解决方案的播放器一般不具备 延迟修正 能力,所以随着卡顿次数的增加,延迟也越积越多。在连麦场景下,延迟是不能容忍的,所以延迟修正不仅不可或缺,而且策略也要非常激进。

如果要做双向的语音通讯,回音消除是不可或缺的,我们从 RTMP SDK 1.8.2 开始,在 iOS 和 Android 两个平台引入了回音消除模块,从而避免主播在手机的喇叭里听到 1 秒前自己说话的声音。
从上图可以看出,AEC 模块是躲在 RTMP SDK 里面的,所以在使用上您不需要额外的编程。

腾讯云有两种技术可以实现混流:客户端混流和服务端混流。

  • 源自 RTMP SDK 1.8.2 开始支持的多实例播放,也就是可以并行的播放多个直播 URL, 视频 View 也可以相互叠加。这样一来,只要观众端能拿到多个主播的 URL 就可以实现客户端混流。
  • 服务端混流是近期推出的一项新解决方案,目前外网已经可以支持。它是腾讯云视频转码集群的一个附加模块,可以将多路视频流直接在云端混成一路,减少下行的带宽压力。
由于观众端的表现由 App 自行控制,能够支持更灵活的界面排布 下行数据是多路,所以带宽消耗要高于服务端混流。
下行数据只有一路,所以对于高并发的直播场景,能有效降低带宽消耗。 目前最多支持 1v3 混流。 需要调用混流 CGI 并正确设置混流参数

文档是否有帮助解决问题?

您已提交过反馈,无需再次提交

反馈收到,动动手指,帮我们明确下问题点

提交成功!非常感谢您的反馈,我们会继续努力做到更好!

如果有其他疑问,你也可以通过提问形式与我们联系探讨

可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

火星直播就是啊。这个很合规,里面好几个主播唱功都还可以,自己已经关注了好几个主播了,闲暇的时候就喜欢听他们唱唱歌。

大数据是对海量数据进行存储、计算、统计、分析处理的一系列处理手段,处理的数据量通常是TB级,甚至是PBEB级的数据,这是传统数据处理手段所无法完成的,其涉及的技术有分布式计算、高并发处理、高可用处理、集群、实时性计算等,汇集了当前IT领域热门流行的IT技术。

想要学好大数据需掌握以下技术:

Java编程技术是大数据学习的基础,Java是一种强类型语言,拥有极高的跨平台能力,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等,是大数据工程师最喜欢的编程工具,因此,想学好大数据,掌握Java基础是必不可少的!

对于大数据开发通常是在Linux环境下进行的,相比Linux操作系统,Windows操作系统是封闭的操作系统,开源的大数据软件很受限制,因此,想从事大数据开发相关工作,还需掌握Linux基础操作命令。

Hadoop是大数据开发的重要框架,其核心是HDFSMapReduceHDFS为海量的数据提供了存储,MapReduce为海量的数据提供了计算,因此,需要重点掌握,除此之外,还需要掌握Hadoop集群、Hadoop集群管理、YARN以及Hadoop高级管理等相关技术与操作!

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行,十分适合数据仓库的统计分析。对于Hive需掌握其安装、应用及高级操作等。

AvroProtobuf均是数据序列化系统,可以提供丰富的数据结构类型,十分适合做数据存储,还可进行不同语言之间相互通信的数据交换格式,学习大数据,需掌握其具体用法。

ZooKeeperHadoopHbase的重要组件,是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组件服务等,在大数据开发中要掌握ZooKeeper的常用命令及功能的实现方法。

HBase是一个分布式的、面向列的开源数据库,它不同于一般的关系数据库,更适合于非结构化数据存储的数据库,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,大数据开发需掌握HBase基础知识、应用、架构以及高级用法等。

API操作HBase的开源SQL引擎,其具有动态列、散列加载、查询服务器、追踪、事务、用户自定义函数、二级索引、命名空间映射、数据收集、行时间戳列、分页查询、跳跃查询、视图以及多租户的特性,大数据开发需掌握其原理和使用方法。

Redis是一个key-value存储系统,其出现很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用,它提供了JavaC/C++C#PHPJavaScriptPerlObject-CPythonRubyErlang等客户端,使用很方便,大数据开发需掌握Redis的安装、配置及相关使用方法。

Flume是一款高可用、高可靠、分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。大数据开发需掌握其安装、配置以及相关使用方法。

SSM框架是由SpringSpringMVCMyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架。大数据开发需分别掌握SpringSpringMVCMyBatis三种框架的同时,再使用SSM进行整合操作。

Kafka是一种高吞吐量的分布式发布订阅消息系统,其在大数据开发应用上的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。大数据开发需掌握Kafka架构原理及各组件的作用和使用方法及相关功能的实现!

Scala是一门多范式的编程语言,大数据开发重要框架Spark是采用Scala语言设计的,想要学好Spark框架,拥有Scala基础是必不可少的,因此,大数据开发需掌握Scala编程基础知识!

Spark是专为大规模数据处理而设计的快速通用的计算引擎,其提供了一个全面、统一的框架用于管理各种不同性质的数据集和数据源的大数据处理的需求,大数据开发需掌握Spark基础、SparkJobSpark

Azkaban是一个批量工作流任务调度器,可用于在一个工作流内以一个特定的顺序运行一组工作和流程,可以利用Azkaban来完成大数据的任务调度,大数据开发需掌握Azkaban的相关配置及语法规则。

Python是面向对象的编程语言,拥有丰富的库,使用简单,应用广泛,在大数据领域也有所应用,主要可用于数据采集、数据分析以及数据可视化等,因此,大数据开发需学习一定的Python知识。

只有完整的学完以上技术,才能算得上大数据开发人才,真正从事大数据开发相关工作,工作才更有底气,升职加薪不成问题!

我要回帖

更多关于 大数据课程:如何进行主数据管理? 的文章

 

随机推荐