电视功能如何利用网络技术

基于互联网的 IPTV、视频点播 (VoD) 和传统广播的融合正在发生。随着越来越多的网络技术应用于电视,网络应用和原生应用之间的差距正在迅速缩小。

Firefox OS 现在支持 TV Manager API,它是 W3C TV Control API(由 TV Control API 社区小组推动的编辑草案)的基础,它允许基于网络的应用程序从服务提供商获取诸如电子节目指南 (EPG) 之类的信息,以及管理本地电视硬件,例如调谐器和遥控器。Firefox OS 还依赖于多个 API 规范来完全支持网络平台上的电视功能。一些 API 仍在成为标准的道路上。以下概述了一些常见电视功能,这些功能可以通过这些 Web API 在今天实现。

FxOS_TV

调谐器、频道和 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> 元素中存在两个 VideoTrackAudioTrack 对象列表,以帮助网络内容分别利用可用的视频和音频轨道。同时,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 APIService 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 条评论

  1. Pete Cox

    我有一个 DVB-T USB 接收器,在 Linux 下支持驱动程序。

    对于 DIY 电视,B2G 是否已经支持 USB OTG,这样我就可以将电视调谐器直接插入我的 Flame 并用手机观看电视?

    2015 年 5 月 6 日 上午 8:04

    1. Marco Chen

      嗨,Pete,

      FxOS 目前引入了 nsITVService.idl [1],它专为贡献者设计,用于实现您自己的 XPCOM 组件。此组件将负责从您的驱动程序/二进制文件/守护程序提供底层电视服务到 FxOS TV Manager。

      在这个第一个版本中,FxOS 并没有内置一些支持,例如 V4L-DVB。我们把这部分留给我们的合作伙伴来完成。

      2015 年 5 月 10 日 下午 8:46

  2. Ivan

    Netflix 怎么样?看起来它将在松下电视上可用。

    是否有 Firefox“候选版本”可以在桌面浏览器上原生观看 Netflix?

    2015 年 5 月 6 日 上午 10:32

    1. André

      据我所知,松下电视上的 Netflix“只是”一个网络应用程序。因此,如果 Netflix 在其网站上提供“观看”功能,它将正常工作。

      2015 年 5 月 7 日 上午 1:41

  3. Clinton Gallagher @virtualCableTV

    本文中的信息非常令人鼓舞,这意味着 TV Control API 足够强大,可以做一些早期工作来开发一个最小可行产品。

    2015 年 5 月 6 日 下午 4:19

  4. Brett Zamir

    您提到让“电视体验更加网络化”,但如何让网络体验更像电视,例如,允许网站由遥控器控制?

    是否有计划以更通用的“通用遥控器”友好的方式报告事件,以便不同的网站可以被编程以对遥控器做出不同的响应,但在各种遥控器中是可移植的?

    虽然我可以看出仅仅将某些遥控器按钮映射到按键(例如,假设“频道向上”到“向上箭头”,“音量向上”到“向右箭头”)以便某些功能可以开箱即用,但也许 API 也可以允许网站定义他们自己的映射。

    2015 年 5 月 8 日 上午 3:06

    1. Brett Zamir

      虽然我知道自定义解决方案可以通过专门提供给移动设备的应用程序或网络界面完成,但我仍然喜欢能够在相同的硬件上尝试控制,而无需学习新的按钮映射。

      2015 年 5 月 8 日 上午 3:22

    2. Marco Chen

      嗨,Brett,

      关于遥控器,W3C 已经在“1.13 媒体控制器键”[1] 规范中添加了一些来自电视遥控器的键。例如,电视上已经存在频道上下和音量上下以及 4 个颜色键(例如 ColorF3Blue)的键名。

      因此,如果电视平台遵循这些规范,网络应用程序可以被设计为响应遥控器。

      [1] http://www.w3.org/TR/DOM-Level-3-Events-key/

      2015 年 5 月 10 日 下午 8:59

      1. Brett Zamir

        很棒的信息,谢谢……我假设 Firefox OS 也支持这些(因为我看到这些键在 https://mdn.org.cn/en-US/Firefox_OS/TVs_connected_devices 中也有引用)?如果可以问的话,桌面支持怎么样?

        2015 年 5 月 11 日 上午 2:28

        1. Simon

          看起来你也可以在桌面(通过桌面模拟器)这样做 https://mdn.org.cn/en-US/Firefox_OS/TVs_connected_devices#Developing_TV_apps

          2015 年 5 月 12 日 上午 1:34

本文的评论已关闭。