当前位置: 首页 > 编程日记 > 正文

Hulu直播服务难点解析(一):系统需求

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/83053654

640?wx_fmt=jpeg


Hulu在其博客发布了建立直播服务遇到的挑战及解决方案,这对于以前只提供点播服务的系统而言是一次彻底的升级。LiveVideoStack对原文进行了摘译。


文 / Allison Deal

译 / 许海燕

原文:https://medium.com/hulu-tech-blog/the-anatomy-of-a-live-ott-service-c8f6078b24d3

https://medium.com/hulu-tech-blog/the-challenges-of-live-linear-video-ingest-part-one-live-versus-on-demand-system-requirements-89238f3af4f6


“Anatomy”系列是一组视觉效果,它展示了幕后OTT电视的系统功能。 


我们可以看到电视在几十年里最重大的转变:观众可以在旅途中或任何设备上观看更多电视节目。流媒体的收视率持续上升,dMVPD正在建立新的系统和流程,以便通过互联网提供电视直播。


要把Hulu和Live TV一起带给我们的观众,这个幕后有很多工作要做。下面这张图展示了从我们的网络合作伙伴接收内容并将其发送到全国各地的观众设备上的复杂过程。


640?wx_fmt=png


在去年5月推出直播电视服务之前,Hulu向数百万的观众提供了点播内容,为他们提供了一个最大的内容库以及他们最喜欢的当季播出的节目。虽然我们的视频摄取系统对于SVOD来说并不简单,但添加直播电视后又再增加了一层复杂性,这就给Hulu的小规模但强大的视频团队带来了独特的挑战。


直播电视需要与SVOD截然不同的系统,我们的团队不得不使用一个全新的技术栈来启动直播服务。现有的SVOD系统也需要修改,这样我们就可以同时支持这两种产品。在这个系列的文章的第一部分中,我将高度概述在设计我们的实时视频摄取系统时我们所要考虑的主要挑战和需求。


建立一个SVOD直播系统


直播服务的需求与SVOD服务的需求有很大的不同,我们现有的点播视频和元数据摄取处理系统无法充分支持实时线性流的摄取,原因如下:


1、直播系统必须具有高可用性和弹性,因为从丢失的数据中恢复过来的灵活性很小。对于点播视频,内容通常在被发送给观众之前的数小时甚至数天内收到,如果我们遇到文件问题,我们就有时间要求内容合作伙伴修改或重新提交文件。这使我们有时间在平台提供内容之前解决内容的任何技术问题。但是,这种策略不适用于直播服务。


2、点播视频是在内容(事件)级别上摄取的,但是频道的线性流需要连续的24/7摄取。


3、点播元数据也是基于内容的,而直播流元数据是以频道和时间戳为导向的。一个节目的持续时间是针对视频点播内容预先设置的,并且不会改变,但直播节目具有灵活的节目界限,当长时间的体育赛事或突发新闻发生时,这些界限可能会发生变化。


除了应对这些挑战之外,我们还需要在构建新的摄取系统时满足一些需求和设计目标。


需求和设计目标


功能


我们的直播电视需要将视频传送到各种各样的设备上,这意味着该服务需要同时生成基于HTTP的动态自适应流媒体(MPEG-DASH)和Apple的HTTP直播流媒体(HLS)媒体格式。在较高的层次上,我们的系统必须从供应商处获取视频流,重新封装和打包成视频片段,并将它们发布到CDN的源站。除了视频工作流之外,该服务还需要能够处理从摄取的流中获得的广告和节目标记,以准确的开始和结束时间,以及识别广告部分来将直播内容作为节目(而不是简单地作为频道)呈现。


可靠性


我们的直播电视服务无论是有无计划的都不应该有任何停止播放的时候。视频播放对于观众来说应该是连续无缝的。


兼容性


我们的视频摄取系统需要与多个供应商和网络兼容,这些供应商和网络提供了来自全国各地的频道的视频内容。它需要适应供应商特定的编码输出,包括不同的段长度,段命名方案以及不同的分辨率和码率。


安全性


内容保护对于MPEG-DASH和HLS格式都至关重要。我们的实时摄取服务需要使用基于MPEG公共加密(CENC)规范的AES-128加密媒体片段,将它们打包为fMP4和MPEG-TS文件格式,并在所有流格式中应用商业DRM。


容错性


这个系统需要具有容错能力,以至于一个频道的播放卡顿或者其他问题不会影响任何其他频道的摄取从而影响我们观众的体验


性能


为了向观众提供实时体验,系统必须具有高性能并且要在平均每个片段播放给观众所花费的时间内处理每个片段,以避免大量的作业队列。


可伸缩性


系统必须能够扩展到能同时处理数千个频道,以便当我们的内容合作伙伴的数量增长时,系统可以处理其他频道。


可扩展性


系统需要进行设计,以便轻松添加新功能,例如动态广告插入,处理音频和视频输入文件以及处理不同的视频帧率,从而使我们有机会轻松地为观众带来新的和扩展的功能。


在设计和构建直播电视的新视频摄取平台时,我们考虑了所有这些系统需求。在这个系列的文章的第二部分中,我们将讨论如何设计和实现带有这些参数的系统。



640?wx_fmt=jpeg

相关文章:

Velocity 入门(一)

Velocity是一种Java模版引擎技术,该项目由Apache提出。因为非常好用,和工作中有啥用,所以我在在理简单的入门一下。 网上找了很多教程,写的不是很明白,要么就是全部拷贝下来时候运行不起来。 在这里我来写一份比较完成…

php 魔术方法 多继承,day23:单继承多继承菱形继承__init__魔术方法

原文:https://www.cnblogs.com/libolun/p/13434675.html单继承关于继承的一些基本概念1.什么是子类?什么是父类?如果一个类继承另外一个类,该类叫做子类(衍生类),被继承的类叫做父类(基类,超类)2.继承的种类:1.单继承 2.多继承3…

最新版IntelliJ IDEA 15开发Java Maven项目

IntelliJ IDEA是最好的java开发IDE之一 下载地址:http://www.jetbrains.com/idea/download/1.安装好之后开始创建项目2.选择Maven类型项目,选择JDK3.设置Maven坐标4.需要给新项目Add Framework support5.选择Java EE项目模板6.初始的网站修改pom.xml文件…

Android APP全面屏适配技术要点

全面屏的概念 为什么先要解释一下全面屏,因为这个词在现在来讲就是一个伪命题。全面屏字面意思就是手机的正面全部都是屏幕,100%的屏占比。但是现在推出所谓“全面屏”手机的厂商没有一个能达到全面的。 那么下面来说一下Android开发领域对全面屏的理解和…

PHP数据库连接池SQL Relay安装使用

SQL Relay按照其官网http://sqlrelay.sourceforge.net/index.html上所说是:A powerful database connection management solution. 翻译为中文也就是说SQL Relay是一个开源的数据库池连接代理服务器。目前SQL Relay支持的数据库很多: SQL Relay supports…

oracle实例由,Oracle数据库和实例

Oracle数据库服务器由一个数据库和至少一个数据库实例组成。 数据库是一组存储数据的文件,而数据库实例是一组管理数据库文件的内存结构。 另外,数据库由后台进程组成。一个数据库和一个实例是紧密相连的,因此术语 - Oracle数据库 通常用来指…

说一说activity

activity与service,provider,receiver并称为 android的四大对象。 而activity,是展现界面的必不可少的组件。我这里有几个问题要问了,他是如何加载,他是如何进行npc的。具体是怎么实现的了。 说道activity的加载&#…

zookeeper脑裂

出现: 在搭建hadoop的HA集群环境后,由于两个namenode的状态不一,当active的namenode由于网络等原因出现假死状态,standby接收不到active的心跳,因此判断active的namenode宕机,但实际上active并没有死亡。此…

C语言编写的PHP框架--yaf入门编程

首先--添加dll&#xff0c;修改php.ini--不同的版本&#xff0c;不同的需求 其次&#xff0c;根据教程http://www.laruence.com/manual/tutorial.firstpage.html#tutorial.directory手动搭建好目录结构 入口文件index.php位置稍作修改--个人习惯 入口文件内容 <?php header…

调试JDK源码-ConcurrentHashMap实现原理

调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hashtable实现原理以及线程安全的原因ConcurrentHashMap线程安全的总结是我从源码分析出来的&#xff1a; ConcurrentHashMap所谓线…

oracle某个表丢失,丢失一个控制文件并恢复数据库

只丢失或损坏一个控制文件的情况下来恢复数据库&#xff0c;相对来说简单一点。一般来说&#xff0c;控制文件都需要形成一个多路径冗余策略&#xff0c;来提高数据库的安全性。这样的话只需将完好的控制文件复制一个副本放到丢失或者损坏了的控制文件所在路径的目录下&#xf…

MySQL:一个死锁分析 (未分析出来的死锁)

最近一个朋友给了我一个死锁 没分析出来搞了好几天&#xff0c;但是把以前出现的一个死锁理了一下流程。这里大概记录一下&#xff0c;并且给出朋友的案例。 RC 隔离级别很少出GAP我已经知道的 继承和分裂会出LOCK_GAP这是代码写死的purge线程可能触发页的分裂融合可能触发内部…

经历一次真实的XSS跨站攻击以及应付之策

这是一个线上真实的事情&#xff0c;黑客已经攻破网站&#xff0c;并主动给我们上报了问题的根源以及解决方案还是不错的。1.前端网站某处存在用户评论输入&#xff0c;黑客再此输出跨站脚本&#xff0c;下面的是从数据库查出来的2.后台管理人员如果浏览到这条数据就会触发这个…

在linux中 要删除abc目录,在 Linux 中,要删除 abc 目录及其全部内容的命令为:

【单选题】星子本地人说( )【判断题】音乐的音响,虽然不能直接传达抽象概念,但是却可以通过同构联觉的去描摹围绕着抽象概念的氛围。( )【判断题】专项耐力负荷量度是通过对糖酵解无氧代谢供能能力与非乳酸供能无氧耐力能力的监控实现的。【单选题】电动轮廓仪是根据( )原理制成…

ECHO.js 纯javascript轻量级延迟加载

演示 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"utf-8"> <title>简单的JavaScript图像延迟加载库Echo.js</title> <style> .demo img { width: 736px; height: 490px; background: url(images/…

SQL中的case when then else end用法

2019独角兽企业重金招聘Python工程师标准>>> Case具有两种格式。简单Case函数和Case搜索函数。 --简单Case函数 CASE sexWHEN 1 THEN 男WHEN 2 THEN 女 ELSE 其他 END --Case搜索函数 CASE WHEN sex 1 THEN 男WHEN sex 2 THEN 女 ELSE 其他 END这两种方式&#xf…

linux run文件夹,Linux下运行run文件

比如realplay.run安装方法如下chmod xrealplay.run./realplay.run然后他就会执行安装了&#xff0c;在过程中可能会要求你输入yes或no安装完后就可以用了,chmod实际上是加权限命令。&#xff0b;x表示可以执行chmod[-cfvR][--help][--version]modefile...说明:Linux/Unix的档案…

POJ2796 Feel Good(单调栈)

题意&#xff1a; 给出一列数据&#xff0c;要求一个区间内最小值与区间内数据总和乘积最大值 要点&#xff1a; 还是单调栈&#xff0c;这次我自己写的&#xff0c;先做了几题比较简单的果然还是有效果的&#xff0c;这题也是一样&#xff0c;按点遍历&#xff0c;网上大神做的…

Solr占用CPU持续过高原因查询

线上java进程占用CPU忽高忽低&#xff0c;就是说一下子40%左右&#xff0c;一下子减下去。这台服务器只有Solr&#xff0c;所以估计是Solr在GC。 # jstat -gcutil 2072 2sJVM名词解释参考java内存泄漏的定位与分析 一些术语的中文解释&#xff1a; S0C&#xff1a;年轻…

通过一个案例理解 JWT

原文出自&#xff1a;https://www.pandashen.com JWT 简述 JWT&#xff08;json web token&#xff09;是为了在网络应用环境之间传递声明而基于 json 的开放标准&#xff0c;JWT 的声明一般被采用在身份提供者和服务器提供者间传递被认证的身份信息&#xff0c;以便于从资源服…

gitlab报错 fatal: index-pack failed error: RPC failed; result=18, HTTP code = 200解决方案

gitlab报错 "fatal: index-pack failed error: RPC failed; result18, HTTP code 200"&#xff0c;如下图这个问题网上有些人给出这样的解决方法是不行的&#xff0c; 所谓&#xff1a;git config --globalhttp.postBuffer 24288000 git config --list 最有代表的是…

(10)Spring Boot修改端口号【从零开始学Spring Boot】

Spring boot 默认端口是8080&#xff0c;如果想要进行更改的话&#xff0c;只需要修改applicatoin.properties文件&#xff0c;在配置文件中加入&#xff1a; server.port9090 常用配置&#xff1a; ######################################################## ###EMBEDDED SER…

linux查看文件安全权限,Linux系统下如何查看及修改文件读写权限

查看文件权限的语句&#xff1a;在终端输入:ls -l xxx.xxx (xxx.xxx是文件名)那么就会出现相类似的信息&#xff0c;主要都是这些&#xff1a;-rw-rw-r--一共有10位数其中&#xff1a; 最前面那个 - 代表的是类型中间那三个 rw- 代表的是所有者(user)然后那三个 rw- 代表的是组…

【网摘】检测 iframe 是否加载完成

var iframeSet document.getElementById("iframeSet"); //需要检测的 iframe if(iframeSet.attachEvent) {iframeSet.attachEvent("onload", function() {$("#loading").hide();}); } else {iframeSet.onload function() {$("#loading&q…

Java json转Map,转bean,转Listbean

引用jackson /** * json转Map&#xff0c;转bean&#xff0c;转List<bean> by http://blog.csdn.net/21aspnet/ * 需要jackjson jar包 */ public class JsonUtil {/*** Object转Json*/public static String ObjectToJson(Object value) {try {ObjectMapper mapper new…

JVM实用参数 GC日志

为什么80%的码农都做不了架构师&#xff1f;>>> 原文章地址&#xff1a;http://blog.panaihua.com/archives/151 GC日志是一个很重要的工具&#xff0c;它准确记录了每一次的GC的执行时间和执行结果&#xff0c;通过分析GC日志可以优化堆设置和GC设置&#xff0c;或…

linux 搜索so文件,Linux下查找和安装依赖的.so文件

以解决Webex在Linux下运行问题为例说明查找和安装依赖的.so文件方法&#xff1a;查找依赖的.so文件$ ldd $HOME/.webex/1324/*.so | grep not foundlibgtk-x11-2.0.so.0 > not foundlibgdk-x11-2.0.so.0 > not foundlibXmu.so.6 > not foundlibXtst.so.6 > not fou…

CentOS7.4下 VNC Server的搭建和客户端的连接配置

CentOS7.4下 VNC Server的搭建和客户端的连接配置 服务器版本&#xff1a;CentOS Linux release 7.4.1708 (Core) yum方式安装VNC server yum install tigervnc-server 启动vnc 服务初次启动服务时&#xff0c;按提示设置VNC Service密码&#xff1b;服务成功启动后会在 /root/…

Java生成html为pdf

使用这个&#xff1a; http://wkhtmltopdf.org/ 下载&#xff1a;http://download.gna.org/wkhtmltopdf/0.12/0.12.3/wkhtmltox-0.12.3_linux-generic-amd64.tar.xz 解压到/usr目录 调用这个bin /usr/wkhtmltox/bin/wkhtmltopdf需要注意如果中文不显示&#xff0c;显示为框框&…

GCD之信号量机制二

在前面GCD之信号量机制一中介绍了通过信号量设置并行最大线程数,依此信号量还可以防止多线程访问公有变量时数据有误&#xff0c;下面的代码能说明。 1.下面是不采用信号量修改公有变量的值 dispatch_group_t groupdispatch_group_create();// dispatch_semaphore_t semapho…