基于互联网的 IPTV、视频点播 (VoD) 和传统广播的融合正在发生。随着越来越多的网络技术应用于电视,网络应用和原生应用之间的差距正在迅速缩小。
Firefox OS 现在支持 TV Manager API,它是 W3C TV Control API(由 TV Control API 社区小组推动的编辑草案)的基础,它允许基于网络的应用程序从服务提供商获取诸如电子节目指南 (EPG) 之类的信息,以及管理本地电视硬件,例如调谐器和遥控器。Firefox OS 还依赖于多个 API 规范来完全支持网络平台上的电视功能。一些 API 仍在成为标准的道路上。以下概述了一些常见电视功能,这些功能可以通过这些 Web API 在今天实现。
调谐器、频道和 EPG 管理
TV Control API 的主要目标之一是启用标准用例,例如频道切换和其他通常在传统遥控器中可用且预期的活动。该 API 向网络应用程序公开特定的调谐器、频道和 EPG 信息,并允许与调谐器模块进行间接交互。某些应用程序,如虚拟遥控器,可以通过此 API 轻松启用。网络内容可以灵活地操作多个调谐器(如果资源允许)。此外,关于频道扫描状态和 EPG 更新的事件驱动通知提供了动态访问广播信息的方式。
以下示例展示了如何获取可用的调谐器并通过 API 设置当前播放源。
// Retrieve all the available tuners.
navigator.tv.getTuners().then(function(tuners) {
// Just use the first tuner.
var tuner = tuners[0];
// Set the 'oncurrentsourcechanged' event handler.
tuner.oncurrentsourcechanged = function(event) {
// The current source has changed.
};
// Get the supported source types for the tuner.
var sourceTypes = tuner.getSupportedSourceTypes();
// Just use the first source.
tuner.setCurrentSource(sourceTypes[0]).then(function() {
// Succeeded to set the source.
}, function(error) {
// Failed to set the source.
});
}, function(error) {
// Failed to get tuners.
});
流媒体
在谈到电视流媒体时,多个网络规范协同工作。 Media Capture and Streams API 允许访问来自本地设备的多媒体流,并定义了一个 MediaStream
接口来承载视频/音频轨道和其他流相关属性。每个调谐器的当前流媒体数据可以包装在一个 MediaStream
实例中,并通过 TV Control API 检索。然后,网络内容可以通过将其分配给 HTML5 <a href="http://www.w3.org/TR/html5/embedded-content-0.html#the-video-element" target="_blank"><video></a>
元素来开始播放流。以下是一个示例
// Retrieve all the available TV tuners and then play
// the stream for the first tuner.
navigator.tv.getTuners().then(function(tuners) {
// Assuming a video element is already accessible to
// variable |video|, just assign the stream to it.
video.srcObject = tuners[0].stream;
});
Media Capture and Streams API 和 HTML5 <a href="http://www.w3.org/TR/html5/embedded-content-0.html#the-video-element" target="_blank"><video></a>
元素提供了属性和方法来帮助管理流媒体内容。将 API 和 HTML5 元素结合起来,使得开发一些高级电视流媒体场景(例如,多个流的并发显示(即画中画))更容易实现,也更灵活。
轨道管理
在播放视频流时,有时媒体内容会提供多个音频通道,甚至包含字幕。例如,电影或体育节目可能会以多种支持的语言广播,供观众选择。因此,HTML5 <a href="http://www.w3.org/TR/html5/embedded-content-0.html#the-video-element" target="_blank"><video></a>
元素中存在两个 VideoTrack
和 AudioTrack
对象列表,以帮助网络内容分别利用可用的视频和音频轨道。同时,Media Capture and Streams API 还提供了一些方法来动态管理相关的媒体轨道。凭借这种灵活性,网络内容能够播放源自其他连接设备(例如相机)的视频流。
HTML5 <a href="http://www.w3.org/TR/html5/embedded-content-0.html#the-video-element" target="_blank"><video></a>
元素包含一个 TextTrack
实例列表。这些轨道可以与特定的视频标签相关联,以表示不同的实例,例如字幕、说明和元数据。此外,多个包含时间敏感数据的 TextTrackCue
对象可以与它们关联,并用于控制字幕和说明显示的时间。
录制
MediaStream Recording API 提供了一个 MediaRecorder
接口来满足对 MediaStream
的录制要求。它允许网络内容为流选择适当的支持编码格式,并且还允许录制媒体以整体 Blob 或更小的缓冲区访问。
与 Task Scheduler API 和 Service Workers 协同工作,你甚至可以为你的网络应用程序或网络驱动设备添加 DVR 式的调度功能。另一方面,通过 TV Control API 检索到的 EPG 数据也可以帮助应用程序录制特定的电视节目。
紧急警报
有时,当发生紧急情况或自然灾害(例如地震、海啸或飓风)时,可能会通过电视广播或其他通信系统发出公共警报。 TV Control API 中包含的相应事件触发机制可用于帮助网络应用程序管理警报。
// Assuming variable |currentSource| is associated with
// the playing TV signal.
currentSource.onemergencyalerted = function (event) {
var type = event.type; // i.e. “Earthquake”.
var severityLevel = event.severityLevel;
var description = event.description;
// Display the emergency information.
// (More attributes could be available.)
};
最后的想法
电视广播机制和应用程序正快速发展,网络技术也是如此。由于提到的许多网络规范和 API 仍在标准化过程中,可能会添加更多功能或改进,以使电视体验更加“网络化”。与往常一样,你可以通过关注相关的标准邮件列表并在发现问题时提交错误来为这些 Web API 的发展做出贡献。
10 条评论