我们问自己一个问题:如果今天我们要启动一个仅通过Internet(OTT)分发的电视频道,那么对此的技术解决方案将如何? 这个问题的答案 已在 此处 的 上 一篇 文章 中进行了详细阐述 ,现在我们的网站 tv.eyevinn.technology上 已在 概念上演示了完全“无服务器”仅OTT电视频道的播出。 在这篇文章中,我们将描述这是如何完成的。

我们之所以需要一个无服务器的解决方案,是因为我们希望成本直接由我们拥有的内容量和活跃用户数来驱动。 基本上,如果没人在看,我们只会支付存储成本。 与可用内容量直接相关的存储成本。 无服务器设计的另一个好处是,它允许我们按比例放大和缩小解决方案,以处理高峰时间和非工作时间。
- 为什么还要在剧院看电影
- 如何在线观看漫威队长
- Spark结构化流和Kafka集成的基本示例
- 崔恩真的在这里改变音乐产业吗? – kwsx
- Satori Live Data Hackathon的Project Noisy
电视频道是专为悠闲观众设计的基于社论的内容包装。 尽管点播观看已成为当今电视消费的很大一部分,但仍然有面向观众的服务,该服务并不确切地知道要看什么,这就是为什么我们认为电视频道的消费仍然占有一席之地的原因。这个风景。 但是,每个观看者将拥有自己的个性化电视频道,而不是拥有多个固定和预编程的电视频道。 但是,这并不意味着我们每个观看者都拥有一个编码器,而是找到了一种更有效,可扩展的方式来实现这一目标。
我们使用的一般概念是,我们将内容存储库中已编码的视频点播(VOD)包放入其中,然后将这些VOD包动态“缝合”在一起,形成“实时”流。 对于播放器和观看者来说,它看起来和感觉都像一个“直播”电视频道,但实际上是通过连接已经准备好的VOD包即时创建的。

将这些VOD包动态拼接在一起的组件就是我们所说的频道引擎。 它是部署在Heroku上的NodeJS应用程序。 Heroku是一个应用引擎平台,可让您轻松扩展和缩小以满足性能要求。
为了了解Channel Engine的功能,让我们首先简要介绍一下Apple HLS和流格式。 广播流和OTT流之间的关键区别在于,当广播流将视频推向播放器时,OTT流将被视频播放器拉出。 与将图像或HTML文档从Web服务器拉到浏览器的方式非常相似。 在OTT流媒体中,我们提供了一组以各种分辨率和大小进行转码的视频文件,并且为了能够在播放期间在不同分辨率之间切换,将视频文件分为较小的块(3-9秒长)。 这些清单的位置和顺序由清单文件(在Apple HLS中以.m3u8后缀)描述。
对于VOD内容,所有这些块从一开始就可用,而对于Live内容,这些块将连续可用。 当这些新块附加到HLS清单中并删除了较旧的块时,将指示HLS视频播放器不断刷新并从服务器重新获取此清单。
基于此,我们可以简单地通过从VOD内容中挑选视频块并使用引擎(频道引擎)构造和更新视频播放器正在获取的“实时清单”来模拟HLS实时流。 为此,我们首先需要将VOD内容块“切片”为媒体序列。 每个媒体序列对应于VOD内容的子集,以模拟新的视频块被附加。

通道引擎的伪代码可以这样描述(简化):
server.get('/ live / master.m3u8',function(req,res){
会话= generateNewSession();
重新发送(
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH = 300000,RESOLUTION = ...
master300000.m3u8; session = $ session
#EXT-X-STREAM-INF:BANDWIDTH = 600000,RESOLUTION = ...
master600000.m3u8; session = $ session
...
);
});
server.get('/ live / master(\ d +)。m3u8; session =(。*)',function(req,res){
带宽= $ 1;
会话= $ 2;
vod = getCurrentVod(session);
mediaSequence = getNextMediaSequence(vod,session);
res.send(mediaSequence.m3u8);
});
尽管频道引擎负责为视频播放器提供他们所需的HLS清单,但来自VOD包的实际视频片段是通过CDN分发的。 在此解决方案中,我们已将VOD软件包放在连接到AWS CloudFront CDN的AWS S3存储桶中。 使用此模型,我们不需要由AWS处理的运行24×7的Web服务器,而我们有一个成本模型,该模型基于存储在存储桶中的内容量和从存储桶中传输的数据量通过CDN。 当没有人要求任何视频片段时,我们只需支付存储费用。
前端和用户界面(tv.eyevinn.technology网站)以类似的方式从S3存储桶和CloudFront CDN分发。 由于该网站不需要任何后端逻辑,只需要提供静态HTML,图像和Javascript文件,因此不需要Web服务器。
为了使内容进入系统,进行转码并打包为VOD HLS包,我们使用了Elastic Transcoder流水线。 弹性代码转换器作业由Lambda函数创建,该函数在S3存储桶创建对象事件上触发。

转码器将结果放入S3存储桶中,该存储桶用于内容分发,如前所述。 然后将内容和URI注册到Dynamo DB中。
通道引擎仅负责将VOD资产拼接在一起,并知道将哪些VOD资产拼接在一起,它通过Asset Manager API请求VOD。 资产管理器API是通过API网关公开的Lambda函数,在编写时提供了一个从Dynamo DB中随机选择VOD的端点。 这是我们有很大潜力定制和个性化电视频道的领域。 有关更多信息,请参见后面的文章。
要直接播放“您的”实时HLS流,您可以在HLS播放器中放置以下链接(在Apple设备上单击它):https://ott-channel-engine.herokuapp.com/live/master.m3u8或转到访问我们的网站:https://tv.eyevinn.technology/(在台式机或Mac上效果最佳)。
我和我的同事们要感谢您的阅读,如果您想进一步了解这一概念证明,可以通过Twitter或电子邮件与我联系,乔纳斯·里德霍尔姆·比尔梅(Jonas RydholmBirmé)。
- 推特:@JonasBirme
- 电子邮件:jonas.birme@eyevinn.se
Eyevinn Technology 是一家领先的独立咨询公司,专门从事视频技术和媒体发行,并且是每年举行的北欧会议 瑞典Streaming Tech的 骄傲组织者 。