如果您在网上度过了任何时间,那么您很有可能已经流式传输了某些内容。
流媒体是互联网上最著名的应用程序最常见的用途之一,无论是通过 YouTube、Spotify、Netflix 还是其他一百个应用程序。
但是,考虑到流媒体的普遍性,很容易将其视为理所当然。 例如:究竟什么是流媒体?
任何通过互联网发送到计算机和移动设备并实时播放的媒体材料,无论是直播的还是录制的,都称为流媒体。
常见的流媒体材料类型包括播客、网络广播、电影、电视节目和音乐视频。
音乐、视频和其他类型的媒体项目被规划并以连续数据包的形式传输,因此它们可以立即进行流式传输。
一个合适的设备、对流媒体服务或应用程序的访问以及快速、可靠的高速互联网连接都是您进行流媒体播放所需要的。
注意:我们将使用视频流服务作为示例。
这篇文章将深入探讨流媒体服务的系统设计和开发视频流媒体应用程序时要考虑的关键因素。
系统要求
世界上最受欢迎的视频流媒体服务包括 YouTube 和 Netflix。 为了改善用户体验,他们的架构包括许多元素。
这样的服务包括流行电影、发票、基于人工智能的推荐系统和稍后观看的功能,但我们将专注于基本要素。
核心素质
我们在我们的概念中包含了以下功能 视频流 服务:
- 内容创作者可以发布视频。
- 观众可以使用多种设备观看视频(手机、电视等)。
- 在视频上,用户可以评论、喜欢或不喜欢。
- 视频的标题可用于搜索它们。
- 为了向用户显示这些统计数据,系统可以存储视图、喜欢和不喜欢。
系统目标
- 不应有任何缓冲,以便观众可以实时观看视频。
- 视频存储应该是可靠的。 您不应丢失已上传的视频。
- 随着用户的增加,系统应该是可扩展的。
- 低延迟和高可用性应该是系统的特性。 在这种情况下,一致性并不那么重要,因为用户可以等待一段时间才能看到新提交的电影。
单个服务器无法处理大量数据,因为系统必须定期管理强大的流量。 一组服务器将用于为系统提供服务。
即使一台服务器崩溃,客户端也不应该有任何明显的速度影响。
高级架构
视频流程序可以接受三种不同类型的请求之一:
- 上传(写)
- 搜索(阅读)
- 查看(阅读)
由于读取查询(搜索和查看)的频率通常是写入请求(上传)的数倍,因此它们中的每一个都由单独的服务器集群处理。
由于该程序是读取密集型程序,因此您需要设置比上传更多的服务器来处理读取请求。
客户端发出的每个请求都被路由到适当的微服务 负载均衡器 收到时。
上传服务
处理视频、将其上传到 Open Connect 服务器并使其可供所有用户访问的上传服务满足上传请求。
搜索服务
负载均衡器将搜索请求发送到搜索微服务,然后将其发送到 Netflix 的 Elastic 搜索。 客户端收到弹性搜索的答案。
Netflix 使用 Elastic Search 来搜索数百万个视频,这是一个可扩展性极强的全文开源搜索引擎。
Netflix 使用弹性搜索来分析客户服务运营。
服务详情
大多数查看请求不会发送到负载均衡器或 Netflix 的服务器。 相反,用户将连接到本地 ISP,并直接从最近的 Open Connect 服务器获取数据。
但是,如果请求的视频不可访问,它将被发送到负载均衡器和视图微服务。
然后在元数据数据库中搜索视频,从元数据中指定的路径检索视频,并将其传输到客户端。
当然,这种技术包括延迟,这就是为什么实际上所有的视图请求都是通过 Open Connect 提供的。
上载影片
YouTube 的主要目的是上传电影或视频。 视频流服务必须克服许多障碍,才能让消费者可以访问视频。
保持碎片化
每个提交的视频将被分成许多较小的文件,而不是保存为一个大文件。
这是必不可少的,因为内容制作者能够提交巨大的视频。 单个大文件可能需要一段时间来处理或流式传输。
观看者无需下载完整的视频即可播放,如果它被保存并分段提供给他们。
为了保证chunk之间的延迟很小,并且用户有一个流畅的观看体验,客户端会先向服务器请求第一个chunk,然后在播放该chunk时请求下一个chunk。
处理队列
每个视频都有很多块,Netflix 会同时使用多个工作人员来分析它们,因此需要一个处理队列。 通过将它们添加到队列中,这变得更简单。
作业将由工作人员(或编码器,我们将在接下来介绍)收集,编码为各种格式,然后存储在分布式文件存储中。
视频编码
以多种格式转换和保存视频块至关重要,以便观众可以使用最适合他们的技术和互联网连接访问它们。
观众可以在笔记本电脑、手机、电视或其他小工具上观看视频。 各种设备的最佳格式各不相同。
同样,不同的观众可以利用不同的带宽访问互联网。
一些观众可以根据他们的互联网连接速度或带宽轻松流式传输高分辨率电影,而带宽较小的观众将能够更轻松地流式传输低质量视频。
打开连接
当您使用浏览器请求 Netflix.com 时,您的 ISP(互联网服务提供商)确实需要在您的计算机和 Netflix 服务器之间建立连接。
您的 ISP 代表您联系 Netflix IP 地址并将结果返回给您。 由于这些服务器集中在美国,像东京这样的偏远国家的观众将在传输和接收信号方面遇到重大延迟。
对于视频,延迟更令人担忧,因为必须将大量数据传输给观看者,如果是这样,流传输将被延迟并且用户体验将受到影响。
Netflix 利用一种巧妙的技术来解决这个问题。 它被称为开放连接 (OC)。 Open Connect 是 Netflix 使用的 CDN(内容交付网络)。
为了缓存在线信息并通过缩短用户与材料之间的物理距离将其快速交付给消费者,CDN 是一个由分散的服务器和相关数据中心组成的网络。
负载均衡
A 单一申请 服务器无法处理每秒到达的请求量(包括上传、搜索和查看请求)。
由于涉及多台服务器,因此必须有一个负载平衡器来有效地将工作负载分布在众多服务器上。
Netflix 使用恒定散列在服务器之间分配负载,因为它可以处理服务器故障并轻松适应额外服务器的安装。
由于每个视频的受欢迎程度各不相同,因此托管这些电影的实际服务器可能会遇到不均等的负载。 使用动态 HTTP 重定向,它允许繁忙的服务器将新请求转移到打开的服务器,我们可以解决这个问题。
开发视频流应用程序时的注意事项
寻找和发展你的利基
有这么多不同种类的可用材料,从娱乐到教育再到健身,建立具有专业特色的差异化因素至关重要。 您可以为纪录片或独立电影创建平台。
应用程序的货币化
颠覆传统的货币化模式可以带来创新和增长。 计划应始终针对目标受众量身定制。
由于老牌企业已经垄断了市场,您可以尝试通过广告或产品植入来通过免费会员获利。
与此同时,如果要构建一个全球流媒体服务平台,就必须考虑多币种的需求。
更好的体验
该程序的性能应针对边缘情况(如互联网速度慢或访问受限的用户)进行增强。
流媒体视频
Netflix 不仅广播内容,而且还使用用户工程技术和个性化建议来保持用户对服务的迷恋。
计划建立类似于 Netflix 的流媒体服务,重点是数据分析和用户定制。
管理应用程序的许多角色
在 Netflix App 中,用户视图只是多个用户角色之一。 需要对各种用户及其访问权限进行规划,包括管理员、视频所有者、合作伙伴、版主等。
结论
总之,这就是 Netflix、YouTube 和其他车载视频等视频流服务如何跟踪它们并将它们展示给数百万消费者的方式。
尽管这些应用程序中的每一个都可能具有一些使它们与众不同的附加功能,但基本功能基于相同的算法。
我尽力为您提供流服务系统架构的总体概述,但在后台还有很多事情要做。
我真诚地希望您会发现这些知识很有价值并加以利用。
发表评论