as

Settings
Sign out
Notifications
Alexa
亚马逊应用商店
AWS
文档
Support
Contact Us
My Cases
新手入门
设计和开发
应用发布
参考
支持

W3C媒体功能

W3C媒体功能

媒体功能API提供关键功能,可帮助播放器更好地决定如何处理媒体,并确定媒体的处理效果。此API取代并改进了MediaSource方法、isTypeSupported() 方法、HTMLMediaElement方法和canPlayType() 方法。使用此API的播放器可以做出明智决定,并确保不将高动态范围 (HDR) 内容传送到标准动态范围 (SDR) 屏幕。

万维网联盟 (W3C) 规范定义了decodingInfo方法(仅提供英文版),该方法允许您查询用户代理以确定音频和视频解码能力。该方法指明是否支持该配置,以及预期播放是否流畅和/或节能。

在开始播放之前,类似Shaka的JavaScript播放器依靠decodingInfo() 方法来检测设备的媒体功能。在这种情况下,应用程序可以安装polyfill来获取decodingInfo() 方法的Vega实现,并让播放器做出相应决定。有关如何安装polyfill的更多信息,请参阅安装和设置W3C媒体功能部分。

W3C媒体功能先决条件

该功能在作为Vega SDK的一部分提供的W3C API中实现。应用必须将此API作为依赖项添加到其package.json中才能获得所需的导入。

安装和设置W3C媒体功能

  1. 设置媒体播放器项目
  2. 按照如何使用W3C媒体功能部分中所示安装polyfill。

如何使用W3C媒体功能

使用Shaka播放器的应用

对于使用Shaka播放器的应用,作为Shaka播放器版本的一部分提供了polyfill。有关适用于Vega的Shaka播放器版本的更多信息,请参阅使用Shaka播放器播放自适应内容 (HLS/DASH)

这个polyfill通过导航器提供了decodingInfo() 方法。Shaka播放器在提供实现时在内部使用此decodingInfo() 方法。要在不进行任何额外代码更改的情况下应用新实现来进行更新,请更新Shaka播放器dist文件夹。

所用JavaScript播放器会在内部使用decodingInfo() 的应用。

使用其他需要实现decodingInfo() 的播放器的应用必须手动安装polyfill。

已复制到剪贴板。

import {
    decodingInfo as decodingInfoImpl,
} from '@amazon-devices/react-native-w3cmedia';

class W3CMediaPolyfill {
    static install() {
        global.navigator.mediaCapabilities = ({});
        global.navigator.mediaCapabilities.decodingInfo = decodingInfoImpl;
    }
}

export default W3CMediaPolyfill;

// 调用W3CMediaPolyfill.install();来安装polyfill。

请注意,关于HLS.js和DASH.js播放器如何使用decodingInfo() 方法有一些注意事项。有关更多信息,请参阅常见问题解答部分。

使用不依赖于decodingInfo() 的JavaScript播放器的应用。

Theo和Bitmovin之类的播放器使用canPlayTypeisTypeSupported而不是decodingInfo()。如果应用程序满足相同方法的要求,它们可以继续使用这些方法,也可以在播放器外部调用MediaCapabilities API并使用相应信息开始播放。

已复制到剪贴板。

import {
    decodingInfo as decodingInfoImpl,
} from '@amazon-devices/react-native-w3cmedia';

const contentType = 'video/mp4;codecs=avc1.640028';

const configuration = {
  type: 'media-source',
  video: {
    contentType: contentType,
    width: 640,
    height: 360,
    bitrate: 2000, // 应该以bps为单位
    framerate: 29.97
  }
};

decodingInfoImpl(configuration)
  .then((result) => {
    console.log('解码' + contentType + ''
      + (result.supported ? '' : '') + '受支持的,'
      + (result.smooth ? '' : '') + '流畅并且'
      + (result.powerEfficient ? '' : '') + '节能');
  })
  .catch((err) => {
    console.error(err, '导致decodingInfo拒绝');
});

常见问题解答

如何检查Dolby支持?

decodingInfo()isTypeSupported() 方法的Vega实现还考虑了连接的电视或AVR的功能,并相应地返回结果。以下代码示例示出了为了使用decodingInfo() 方法检查Dolby支持而可以发送的最低配置。

已复制到剪贴板。

import {
    decodingInfo as decodingInfoImpl,
} from '@amazon-devices/react-native-w3cmedia';

const contentType = 'audio/mp4;codecs=ec-3';

const configuration = {
  type: 'media-source',
  audio: {
    contentType: contentType,
    channels: 5.1.1,
    sampleRate: 48000,
  }
};

decodingInfoImpl(configuration)
  .then((result) => {
    console.log('解码' + contentType + ''
      + (result.supported ? '' : '') + '受支持的,'
      + (result.smooth ? '' : '') + '流畅并且'
      + (result.powerEfficient ? '' : '') + '节能');
  })
  .catch((err) => {
    console.error(err, '导致decodingInfo拒绝');
});

检查HDR支持的最低配置是什么?

与Dolby支持类似,您可以使用Vega实现来检查连接的电视或显示器是否支持HDR。

已复制到剪贴板。

import {
    decodingInfo as decodingInfoImpl,
} from '@amazon-devices/react-native-w3cmedia';

// 必须使用有效的编解码器参数。
const contentType = 'video/webm;codecs=vp09.2.10.10.0.9.16.10.1';// 配置文件2,级别1,10位深度,BT2020

const configuration = {
  type: 'media-source',
  video: {
    contentType: contentType,
    width: 640,
    height: 360,
    bitrate: 2000, // 应该以bps为单位
    framerate: 29.97,
    hdrMetadataType: "smpteSt2086" // 适用于HDR10,而smpteSt2094-40适用于HDR10+
  }
};

decodingInfoImpl(configuration)
  .then((result) => {
    console.log('解码' + contentType + ''
      + (result.supported ? '' : '') + '受支持的,'
      + (result.smooth ? '' : '') + '流畅并且'
      + (result.powerEfficient ? '' : '') + '节能');
  })
  .catch((err) => {
    console.error(err, '导致decodingInfo拒绝');
});

如何在Dash.js上启用decodingInfo()

应用需要安装polyfill才能向Dash.js播放器提供decodingInfo() 的Vega实现。Dash.js播放器的4.0.0版本中引入了对MediaCapabilities API的支持。

注意:​ 要使用decodingInfo() 方法而不是isTypeSupported() 方法,请确保将useMediaCapabilitiesApi设置为true。

如何在HLS.js播放器上启用?

应用需要安装polyfill才能向HLS.js播放器提供decodingInfo() 的Vega实现。对MediaCapabilities的支持是在1.5.0-alpha版本(仅提供英文版)中引入的。

确保在HlsConfig中启用useMediaCapabilities。

注意:​ HLS.js播放器仅在GitHub上HLS.js存储库中mediacapabilities-helper.ts源文件里提到的特定场景中使用decodingInfo() 方法。

W3C媒体功能故障排除

API依赖MIME类型的“编解码器”参数来检测配置文件、级别、编解码器类型等。如果出现错误,请检查该值是否已正确传递。

当播放器无法检测到MIME类型时,它们可能会传递无效的MIME(不符合MIME标准)。即使设备支持实际内容,这也会导致错误。

使用Shaka播放器播放自适应内容 (HLS/DASH)


Last updated: 2025年9月30日