实用云,提供最全最实时的云市场资讯

手机站:/m

人工智能开发_物联网方案提供商

时间:2020-11-05 13:59编辑:实用云来源:实用云当前位置:主页 > 云存储服务 >

从头开始构建Cloudflare TV

Cloudflare TV的灵感来自90年代的电视节目,这些节目分享了计算机和音乐视频的最新、最激动人心的发展。我们对Cloudflare TV有三个基本要求:客户参与应该像加入Zoom Call一样简单—应该是全天候的节目。一些有趣的东西应该一直在播放一切都应该在云端发生,我们不应该要求任何人"让他们的电脑开着",让流24小时不间断地运行我们并不是从scratch开始建立Cloudflare TV的很多技术都不是计划的一部分,尤其是考虑到我们积极进取的时间表。那我们为什么要继续下去呢?在评估了多种直播解决方案后,我们达到了以下c结论:24x7线性对于大多数视频流平台来说,流媒体并不是一个优先考虑的问题。这是有道理的:视频点播和基于事件的实时流媒体的兴起是以线性为代价的流媒体。大多数广播平台有自己的来宾应用程序,必须事先下载和设置。与单击日历中的链接邀请加入视频通话相比,这会带来不必要的摩擦!我们可以只使用Zoom+Cloudflare吗?"Cloudflare TV的核心目标之一是使演示者更容易使用,还有什么比让他们使用他们已经知道的工具更容易呢?我们团队中的每个人都熟悉Zoom,许多将出现在Cloudflare TV上的嘉宾也都很熟悉。更好的是,Zoom几乎总是"工作正常",所以当我们发现Zoom可以将实时视频推送到任何RTMP端点时,我们就开始尝试这个特性"RTMP"代表实时消息传递协议,最初是为了通过Macromedia Flash使用TCP促进低延迟通信而开发的。RTMP比Flash还久远,被包括YouTube在内的平台广泛使用,以支持实时视频流。RTMP是一种推送协议,像YouTube这样的平台提供RTMP端点,它只是url。大多数视频广播应用程序都会让你配置多个RTMP端点,这会告诉应用程序"嘿,把我的手机或电脑上的直播视频发送到这些服务上。"如果你发现自己正在观看一个正在多个服务上播放的直播视频,很可能是通过RTMP.缩放允许您提供RTMP端点并指示把视频传给我们的视频直播。在使用这个功能之前,我们需要能够摄取RTMP视频源。首先,我们使用RTMP设置NGINX服务器模块:apt-get-install构建必要的libpcre3 libpcre3 dev libssl dev git zlib1g dev-ymkdir~/build&&cd~/buildgit克隆git://github.com/arut/nginx-rtmp-module.gitwget公司 xzf nginx-1.14.1。焦油gzcd nginx-1.14.1版sudo./configure--with-http_ssl_module--add module=../nginx rtmp module苏多牌sudo make安装接下来,我们配置nginx.conf公司因此NGINX不仅可以接收RTMP提要,还可以使其流化以供最终用户使用。浏览器通常不能从RTMP源进行流式传输。我们需要NGINX获取RTMP提要并创建HLS/DASH细分市场。我们定义了一个名为live inside的应用程序nginx.conf公司。在实时应用程序中,我们可以添加指令来摄取RTMP和输出HLS:。。。rtmp公司{服务器{...应用程序实时{允许全部播放;继续活着;#样品HLShls开启;hls U路径/mnt/hls/;hls_片段1;播放列表长度4;hls同步100ms;}}}一旦NGINX设置为接收RTMP和HLS,我们就按照Zoom的指示定制实时流媒体。很快,我们就有了一个使用Cloudflare网络的实时流缩放调用的基本原型!无中断过渡因此我们满足了我们的首要要求,即让客人体验像加入视频通话一样简单。但Cloudflare电视不会是一个永无休止的电话。我们需要一种方法来在一天中的多个通话之间平稳过渡,并回放一些我们最喜欢的段。用于例如,我们可能有从1000到1100的直播节目,然后是两小时的预先录制(或重播)内容。当直播节目在1100点结束时,视频体验将中断,用户需要点击刷新按钮才能看到时间表上的下一个节目。那我们怎么解决这个问题呢?我们决定我们需要以下:能力设置编程("什么时候播放?")在许多日子里,我们有"虚拟房间"从不同的来源(现场活动、使用我们的Cloudflare Stream产品存储的预录制视频)接收视频。一旦我们有了时间表和"虚拟房间",我们就可以动态地将当前正在播放的内容切换到相应的"虚拟房间"流式播放内容。为了实现这一点,我们使用了Contentful、Workers和Brave(一个开源视频编辑器)。使用Brave,我们可以建立多个虚拟房间,并顺利地使任何虚拟房间都可以播放。在幕后,Brave正在做两件关键的事情:从不同来源获取多个视频源,并将它们放在虚拟房间里,每天每一秒都将最后一个("空中传送")传送到NGINX contentful是一个无头的内容管理平台,其设计初衷是API优先;它消除了对数据库的需要,并帮助我们快速构建了调度功能。对于CMS来说,大多数必需的字段都非常简单:标题、演示者,当然还有时间段。其中每一项都会自动与cloudflare.tv/时间表。我们可以使用worker从C获取事件ontentful:导出异步函数fetchEventRaw(id:string){让r=await fetch(`${CONTENTFUL_API}/entries/${id}`{标题:{'内容类型':'应用程序/json',授权:`bearner${CONTENTFUL_ADMIN}`,},})return unwrap(r,"检索事件失败")}更复杂的是它与变焦的结合。每个部分都需要自己的缩放会议,手动创建这些会议非常困难。因此,当我们在Contentful中发布时,Contentful会调用Worker端点。Worker端点自动生成一个缩放会议,并向编程团队提供自定义的invite以发送到客人。为了例如,将新事件添加到Contentful中时,Contentful通知我们的Worker端点,后者创建一个新会议并对其进行配置,以便将其推送到Cloudflare TV:export async function createMeeting(ev:tvent){const headers=等待zoomHeaders()const备用主机=ev.altHosts公司? ev.altHosts.join(',') : ''ev.zoomPassword=genPassword()让r=等待取回(`https://api.zoom.us/v2/users/${电动汽车工作室}@cloudflare.com/meetings`, {method:'发布',标题,正文:JSON.stringify({主题:企业名称,类型:2,开始时间:电动汽车启动,持续时间:ev.持续时间,timezone:'UTC',议程:ev.说明,密码:ev.zoomPassword,设置:{主持人视频:是的,参与者视频:错误,备用主机,cnđmeeting:错误,in_meeting:错误,先加入游戏主持人:真的,输入时静音:真,水印:假,使用_pmi:false,批准类型:2,audio:'两者',自动录制:'云',强制登录:false,},}),})let data=await unwrap(r,"未能创建缩放会议")log('缩放:',数据)电子会议ID= 数据.id埃夫佐穆尔= data.join\u网址//将livestream配置数据推送到会议r=等待取回(`https://api.zoom.us/v2/meetings/${电子会议ID}/直播流`{method:'补丁',标题,正文:JSON.stringify({//TODO:使可配置流\u url:CFTV\u RTMP_端点,流密钥:电动汽车工作室,页面url:'https://cloudflare.tv',}),})等待展开(r,"未能更新LiveStream配置")返回ev}使用Contentful的另一个好处是,我们团队中的许多成员已经熟悉它,因此它减少了学习新内容的开销工具工到目前为止,我们已经描述了使Cloudflare TV成为可能的后端的不同部分(NGINX、Brave、Contentful)。我们如何把他们聚集在一起?Cloudflare Workers是将这些系统结合在一起的粘合剂。Cloudflare TV前端构建在工人站点上。前端调用我们的Worker端点来获取数据,比如编程日历。思考前面……我们刚刚开始使用Cloudflare TV。我们有一个很长的愿望清单的功能,我们真的很想看到。以下是我们迫不及待要开发的一些功能:通过添加闭路字幕支持来改善观看体验使我们的观众能够打电话询问问题并为对话做出贡献将Cloudflare TV引入Apple TV和Roku等平台

上一篇云服务器_大数据和数据仓库

下一篇服务器云主机_企业管理软件企业

世界之最排行

世界之最精选