as

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

W3C媒体功能

W3C媒体功能

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

万维网联盟 (W3C) 规范定义了decodingInfo method(仅提供英文版)方法,该方法允许您查询用户代理以确定音频和视频解码能力。通过该方法,您可以判断播放器是否支持相关配置,以及是否能实现流畅播放和/或低功耗播放。

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

W3C媒体功能先决条件

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

安装和设置W3C媒体功能

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

如何使用W3C媒体功能

使用Shaka播放器的应用

Shaka播放器在发布版中内置提供了polyfill。有关适用于Vega的Shaka播放器版本的更多信息,请参阅使用Shaka播放器播放自适应内容 (HLS/DASH)

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

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

使用其他需要实现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()

若要在Dash.js播放器中使用decodingInfo() 的Vega实现,应用必须安装polyfill。Dash.js播放器的4.0.0版本引入了对MediaCapabilities API的支持。

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

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

若要在HLS.js播放器中使用decodingInfo() 的Vega实现,应用必须安装polyfill。HLS.js播放器的1.5.0-alpha版本引入了对MediaCapabilities API的支持。

确保在HlsConfig中启用useMediaCapabilities

注意:​ HLS.js播放器仅特定场景中使用decodingInfo() 方法,具体信息请参阅GitHub上HLS.js存储库中mediacapabilities-helper.ts源文件。

W3C媒体功能故障排除

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

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

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


Last updated: 2026年2月11日