前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >视频API的发展方向

视频API的发展方向

作者头像
LiveVideoStack
发布2020-01-16 16:02:15
1.5K0
发布2020-01-16 16:02:15
举报
文章被收录于专栏:音视频技术音视频技术

本文来自Mux流媒体专家Phil Cluff 在LiveVideoStackCon 上海站的精彩分享。在此我们会研究视频API过去十年来的启发以及时间线,从Real Player、Adobe Flash、RTMP、FLV 直到DASH,并且如何将其集成到视频流平台中。另外,Phil将视频API的定义分解为编码API和视频平台API、API结构的重要性以及SAAS如何帮助开发人员更好地使用SDK。最后,我们总结了如何以14个简单步骤构建一个优秀的视频API。

作者 / Phil Cluff

整理 / LiveVideoStack

译 / Adrian Ng

非常感谢LiveVideoStack邀请我来到这个论坛,这是我第一次来中国,更何况是上海。我觉得上海是一个很棒的城市,城市节奏与这里各种各样的美食,对我来说都很重要!我是Phil,在视频行业已经有10年了。

我的职业生涯是在伦敦的BBC开始,然后转到Brightcove和Zencoder,现在在Mux当流媒体专家。在业余时间,我组织了London Video Technology Meetup(伦敦视频技术会议)。如果你们有机会来到伦敦,可以随时联系我,我欢迎你们的出席,同时间我也共同主持一个关于视频技术的播客。

今天我的主题是视频API,我们回顾流式视频历史的时间线,并讨论视频API的类型。另外,我们看看视频API以及构建优秀视频API的一些技巧,API结构的重要性。也许你会好奇这点“什么让你有资格谈论视频API这话题呢?”

在BBC,当时我们把视频中最大的API集成到了一个privateencoding API(私有的编码API)。之后,我在Brightcove 和Zencoder建立了公共和私有的视频API,现在的公司Mux,是个API的第一的视频平台。但是,我的专长还是欧洲、美国、澳大利亚和日本的某些地方。

你们比我更了解中国,所以也许我所说的可能不太适合你们的市场,但是我希望在接下来的时间,你们可以与我分享,分辨两个市场的区别。

对我来说,互联网上的流媒体视频始于1995年- 90年代的中期,所以我也会探索未来的发展方向。在线流媒体的前五年实际上是由专有的浏览器插件(动画gif之外)作出定义的,显然其中一个重要的插件是RealPlayer。

我们就什么浏览器插件达成一致,Macromedia的Flash显然变成了Adobe Flash。持续了近10年Flash视频、FLV和RTMP,之后我们开始向HDS过渡,HDS显然是Adobe的块流标准版本。Smooth和HLS发动之前,我们再次做转换并广泛地应用DASH,接下来的两年内我们会注重CMAF,LHLS,还有低延迟性DASH流。

随着Smooth的发布,我们从Flash切换到HLS的第一个版本。2012年DASH首次宣布时,许多人也开始应用它,这几乎终止了HLS的应用。

你们是否听说过Homestar Runner 或eBaum’s World的网站? 大多数人都没有忘记互联网的遗迹,所以这些网站才是真正的病毒视频概念的发源地。大多数人都没有忘记互联网的遗迹,所以以上的这些网站才是viral 视频概念的发源地。这些网站上的小猫动画,剪辑,漫画都是在Flash 世界开始,互联网上的viral 视频都是在此而被带动的。

2005年,YouTube再次推出了全球最主要的基于Flash的视频平台之一。

两年后,市场商业平台快速地增加,比如欧洲的BBC iPlayer、美国的Netflix和Hulu – 仍然基于Flash RTMP FLV流媒体。当我们踏入segmented world( 细分世界),我们看见Amazon所建立的Amazon Prime Video。它最初被称为Instant Video。在2015年,HBO GO上线,并且年底预定将推出全新的Disney Plus (迪士尼+)

这些技术显然是在流媒的chunked streaming space(块流空间中),这些平台只存在于块流空间。现在我们已经确定了时间表,video API到底是什么?凡是可以应用操作一段视频都归于video API。但我们将主要讨论软件即服务的视频API,对我来说,它分为两类:“编码API”和“视频平台API”,所以第一个编码API,我认为这是一个不妥当的名字,但最终还是保留了。

我认为没有一个纯粹的软件作为这个编码API存在。实际上你所说的都是API内置的转码器、Muxers、Packagers(打包器)、DRM代理、文件传输代理。但是关键是对于编码设置的fine-grainedcontrol(细粒度控制),所以我依然称它为encodingAPI。一般来说,这将使用远程存储,通常是Amazon的S3或Google Cloud Storage云存储以及类似的设备。

这里有一些重要的例子:Zencoder,亚马逊的第一个编码产品:Elastic Transcoder,encoding.com,Hybrik,Bitmovin,以及最近的MediaConvert一种替代Elastic Transcoder的产品。

仔细看过去的10年,这些产品都释放在哪里呢?在Zencoder,我推发的第一个软件是一个serviceencoding platform(服务编码平台),一个非常简单的JSON API。

它还支持XML API,但是我们不再使用它。不过,它有一个非常简单的工作,并使用temporaryoutput storage(临时输出存储)来帮助您快速入门。内存含有SDK,但不多,因为如果你有一个很好的API,你的SDK实际上无关紧要。

Elastic Transcoder弹性转码器-我很幸运成为弹性转码器预发行候选者之一。Amazon Web Services (AWS)比较复杂,它们所称的管道(即实际作业规范本身的输入和输出)之前引入了一个抽象。它从一开始就有很好的SDK支持,因为很明显,作为一个亚马逊产品,它只是建立在亚马逊的SDK之上。

Bitmovin是编码领域中近代有创新能力的公司,他们在2015年发布了自己的编码平台Bitcodin。这是一个相当复杂的API,他们使用MSON和JSON,JSON可是API blueprint中的一个系统。Bitmovin很积极地鼓励SDK的应用,避免直接使用他们的 Restful APIs。2017年,一个比较新式的编码API之一是Media Convert,它实际上是从Amazon的Elemental Acquisition发展起来的,适合广播公司,复杂度也高。

Encoding API怎么形成的呢?我们所见的内涵的粒度和控制已得到很大的改进,但是API交换的复杂性也提高。在此举个例子,这是Zencoder v2,如果你去注册一个帐户,你今天就可以在Zencoder上做这个。

这是运行的最基本需求,首先它只是一个input file (输入文件)。Inputfile分配你一些存储空间,并给你一个临时输入文件,它会假设你想要H.264 1兆位 – 会有defaults(默认值)。

这就是一个符合标准的API。

这是最简单的media convert job(媒体转换工作),我们运行同一个步骤:MP4 输入,MP4输出,一个兆位,完全没有预设。

我认为这是一个糟糕的API。

为什么会有这样呢?我个人觉得因为面向开发市场会比较少,更多的是针对于高端系统集成商。另外一个关键点是人们没有首先考虑API设计,而且有很多假设认为人们会使用SDK。

提到我的第二种视频API,这是一个video platform API(视频平台API)。你们也许不知道视频平台提供更高的层次、更全面地服务,所以他们会给你ingest(摄取),transcode(转码),catalog(目录),distribution(发行),CDN,analytics (分析),播放器等捆绑成一套产品。一般都会有三个 API – 可能会更多,或许更少,但至少三个服务器内置一个目录、一个摄取和一个回放API。

Brightcove的视频云在这个领域占据主导地位。Kaltura是个开源的替代方案,JW在space是个比较新的方案,而Ooyala现在也是Brightcove的一部分。

这三种API,一个是目录API – 主要是关于你的账户中内容的metadata management (元数据管理)。其中包括标题、描述、类别、元数据标记社交分发目标。

Ingest APIs:这将暴露对实际编码过程的一些控制,并且看起来像我们所讨论过的编码API。其他时候,它将使用配置文件来定义编码,因此你可以使用一个API来定义配置文件。然后,当你实际运行编码时,同时你也正在摄取引用这些配置文件。

这些是用来获取URL的,所以内容的片段可以是HLS,Smooth,DASH,或者渐进式MP4 URL。URL往往是tokenized(标记化的),这些API很安全,但是很多情况下,它们实际上并不是很安全。

我想强调过去10年所发生的一些变化,因为JW Player 的确是一个很新、刚上线的平台。

2011年,他们建立了自己的视频平台,为Brightcove的发展提供了一个可以追溯到21世纪初的背景。这是一个基于XML的API,他们实际上使用了两个API一个用于目录和摄取,另一个用于回放生成的文档。基于Push and Pull的摄取,它可以从存储中提取一个文件,也可以将一个文件推送到它进行摄取。

2013年Ooyala宣布了“Rights Locker”,这是一个用于authenticated (身份认证),和authorized(授权的回放)的API。这并不擅长用于线视频平台领域传统系统上,但最近我们开始看见它的演变和改进。

2015年Brightcove在年中替换了所有的 Catalog API,面向基于 JSON的对象模型。在2016年,Brightcove采用了完全基于pull-based的ingest格式。值得关注的是,Brightcove在 2018年重新添加了一个ingestion 推送技术,所以显然我们还需要基于pull以及push推送的ingestion。

正如我们所说,从基于push到基于pull-based的API转变,因为除了Push API,大多数的ingest还在但它们不再基于FTP,它们过去通常基于FTP放置位置。如今,他们通常基于S3或Google 云存储和playback security (安全播放)。

Rights Lockers概念是一个实际的authenticatedauthorized playback system(经过身份验证的授权播放系统)。所以这是相当可以改进的空间 –每一块都很弱的空间:Rights Locker是一个很好的例子,关键是看你的客户是否希望能够定义播放或做出playback。

实际上我们在编码API中看到了相当多的演变,但是在与online video platforms (在线视频平台)并不多,为什么呢?OVP公司很大,而且进展缓慢,它们有非常复杂的客户集成,也可能是外包公司管理。他们有可能从来没有接触这种集成,因此缺乏一个支持API的多个版本的欲望。最后,他们选择一些新的特性,但是这个路线不一定可以提供一个精致的API。

Move Fast (行动快)及 Break things的概念跟在线视频平台上不可以同时存在。

另外,我想提一下其他类型的视频API。我认为FFmpeg是一个视频API。FFmpeg在每一个视频平台、每一个视频软件中几乎无处不在,它总是通过command line interface(命令行接口)集成。这些年来我一直在研究,偶然发现了一些只是执行FFmpeg的东西,已经不计其数了。

FFmpeg不是software as a service(软件即服务),但是我们可以把它作为一个社区来操纵视频。我们应该使用libav 和libav绑定。当然,我也想强调Mux的视频API与我们所讨论的API到底有什么区别。我们将mixed video infrastructure (混合视频基础设施)称为一种服务并使用与最初构建Zencoder的相同概念从新开发。因此,如果我们还记得早期的Zencoder接受请求,这是一个用于接受和流式处理的trivial API。

我们可以用Mux做同样的事情- 它是two lines而不是one line,但它仍然只有two lines。所以我们把输入放在一个URL中,不管它是公共的还是私用的,也有一个playback policy(回放策略)。

这是一个供应开箱playback security的概念。我们再次使用Playback ID然后可以把它直接放到一些URL,不管是M3U8流,还是thumbnail (缩略图) ,动画GIF。

他们所含的default behaviours也是非常简单的minimal API。

API结构重要吗?

现在,软件即服务很正常。这即是标准,客户都希望能够减少有如JSON媒体编写次数。例如:Bitmovin的数百行代码。开发者有选择的能力,能否选择使用并实验他人的SDK。在这个情况下,开发者会以developer-centric market中心的市场(目标是开发者与小公司),你更有可能购买他们的产品。

当初,我想列出10个简单的步骤编写视频API,最终我还是得到了14个步骤。

首先最重要的是:你需要知道你客户需求,谁将使用你的API?第一个问题是:它是internal内部还是external外部?它是一个公共API还是你正构建的一个产品?

如果这样的话,也许你在乎speed ofintegration (集成的速度),还有elegant API abstraction(API抽象)。如果是internal,那抽象的API可能失去价值。我们注重的close coupling (紧密耦合) – 有一个非常具体的问题需要解决,所以必须理解这一点。

提到抽象这一点,你想要了解的是你试图在目标市场解决的问题,但我真正想看的是我的客户对视频了解有多少?他们是想要一个在任何地方操作的线视频平台,还是目的只想控制我正在使用的H.264配置文件?

每个API有一个抽象级别是重要的,不是关键的,但它很重要。为了实现这一点,您可能需要重新安排你的API。

我们从Zencoder可见,如果你给它一个input输入文件,他可以生成一个 MP4 output 输出文件。与Mux一样 – 你给它一个输入文件MP4的话,它可以给你一些HLS自适应比特率输出。所有的东西会默认为H264 – 这些都是合理的默认值。我们希望能达到最简单的集成,而不仅仅是默认而已,small minimum API请求也重要。

这是关于 trivial authentication (琐碎的身份验证),我喜欢这样问自己“我的视频API仅仅使用curl合适吗?”如果不能的话,那么结果可能不太理想。

这是另一个例子,也是最大的在线视频平台的入门指南。设置身份验证一共有16个步骤。

对我来说,这是一个不合格的API。因为它在使用OAuth,我个人不推荐OAUTH的应用。

举个例子,Mux也是这样。这个屏幕你得到了你的API token,第二步实际上是video ingestion摄取视频。这是如何制作一个简单并实用的API。

你应该在合理的地方实用established standards(既定的标准),通常HTTP和JSON是合理的选择,XML也是我可以接受的(虽然我个人不太喜欢)。

JSON API有些标准,用来定义API结构,它可以为request-responsepatterns 提供更好的结构。某些情况如构建private API时, HTTP可能不是最好的解决方案。你可以使用传输:message queue patterns(消息队列模式)。我构建了广泛使用message queue patterns来实现视频的系统。

如果你正在执行microservice oriented architecture (面向微服务的体系结构)比如GRPC或Protobuf,你可以使用备用传输以便在close coupling的服务之前进行通信。在此,不需要使用HTTP。

随着产品的实施,你可能会重新访问你的API。一个API很容易偏离它的初衷,你应该时时考虑你的API设计,想想每次修改API时是否忠于原始的API设计。

我很喜欢与客户谈论我的产品以及API,客户想要一个双向的关系,他们尽可能会以不同的方式看待你的API,所以有时候会对你的API设计给予非常诚实、清晰的反馈。

有一些开放的API toolchain 很强大,以下是一些以编程方式描述API的方法。你可以生成文档,你可以生成SDK,你可以生成服务器端绑定;如果你开始用编程的方式描述你的API,这些都是你可以用编程的方式做出的。举几个例子:Open API V3现在仍然是大摇大摆的。(我不知道他们为什么改名)。我们使用它成功地生成SDK,反应不错。Bitmovin 所构建的API blueprint也有同样的目的。

除此之外,无论您是否使用自动化流程,你也应该存储你的API记录。如果没有充分的文档记录,客户就可能不选择你的API。你还应该以HTTP格式存档API;有很多趋势,尤其是因为亚马逊在存储SDK方面很差。你应该使用HTTP记录,如果你用的是定义文件,那么这一切可以通过编程来完成。

首先,你应该对你的API进行版本化– 你不该等到第一次推出新版本才给一个版名,每次引入一个新版本的时候你该设定 V1 – V1 应该是最早期版本。例如,MuxAPI; 我们说的第一件事是视频API,它是Video API for Data API 的一个版本。它具有相同的类型,我们不该等到需要V2 才添加版本号。

我们必须提供一个迁移路径,以便从V1迁移V2。若强迫客户迁移服务,这对客户也许很麻烦、多余的经历。在SAAS环境下,这样做会让客户审查他们的供应商决策。实际上他们积极地问“等等,你要让我升级整个API集成吗?我倒不如直接去寻找一个更便宜、容易应用的系统,这对于客户保留是一个重点暗号。如果想解决这问题,最好是用shims (填隙片)替换旧的API,这样一个轻量级的shims会将V1转换为V2,同时以新的特性鼓励客户升级到 V2,而不是通知“在某个时候会终止V1 API 的应用”。

我们可以考虑构建transcode abstraction layers(转码抽象层),这是一个将generic transcode request(通用转码请求)转换为multiple underlying encoding vendors(多个底层编码供应商)的一种方法。其概念就是;你把它们放在所有SAAS编码供应商面前,并根据成本或性能为每一个转码工作做出决定,最终发送的方向。

在这构建过程中,我发现它的潜力非常强大– New York Times (纽约时报)有一个很好的开源软件,即是我的朋友建构的,它涵盖了Bitmovin、Zencoder到Hibrik以及其他一些东西。

我们需要考虑playback security upfront(预先播放的安全性),这就是我们讨论的在线视频平台API。如果你正在建造类似的东西,那你必须从零开始。

关键是我们该推卸责任给客户,当然的我们应该尊重客户的想法。如果客户允许你播放此内容,那我们尊重它的决定。

一般来说,有两种方法;第一种是在请求中添加客户的crytographic signature (加密签名)。客户会使用JWT或某种形式的加密签名签署一个URL,如果与你的签名匹配,那你尊重它。另一种方法是callbacks(回调)。这是另一种方式,客户出去定义一个URL,你可以作为供应商去点击它来决定是否可以开始播放 - 我亲眼看过两种方式的过程,而且都成功了。

作为一个总结,这14个简单的步骤并不难!

在过去的10年,经过多次的构建改革以及糟糕的API,我时时刻刻在学习新的方式做探讨。

概括起来,我认为这是两种类型的视频API编码和平台。一个合格良好的API对你的SAAS很重要,我建议您可以使用14条规则来帮助您构建一个好的视频API。

LiveVideoStackCon 2020 讲师招募

2020年LiveVideoStackCon将持续迭代,4月25日-26日在上海,9月11日-12日在北京,11月在旧金山。欢迎将你的技术实践、踩坑与填坑经历、技术与商业创业的思考分享出来,独乐不如众乐。请将个人资料和话题信息邮件到 speaker@livevideostack.com 或点击【阅读原文】了解成为LiveVideoStackCon讲师的权益与义务,我们会在48小时内回复。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LiveVideoStack 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档