as

Settings
Sign out
Notifications
Alexa
亚马逊应用商店
Ring
AWS
文档
Support
Contact Us
My Cases
新手入门
设计和开发
应用发布
参考
支持
跳转到主要内容
Vega W3C媒体API提供符合W3C标准的React Native和JavaScript类组件、JavaScript方法和JavaScript接口。使用此API构建播放体验,例如无间隙的剧集播放和主内容播放期间的无缝广告插入。 API实现 (polyfill) HTMLMediaElement、媒体源扩展和加密媒体扩展方法。

开始使用

设置

  1. 将以下库依赖项添加到package.json文件的dependencies部分。
  1. 打开终端窗口并导航到您的应用文件夹。运行npm以将程序包安装到您的应用中。
  2. 更新您的babel.config.js文件,否则运行时应用会引发“ReferenceError: Property ‘React’ doesn’t exist”(ReferenceError:属性“React”不存在)的异常。
  3. 在您的manifest.toml中,添加以下权限。

用法

Video React Native组件

Video是实现HTMLVideoElement接口的组件,该接口可扩展HTMLMediaElement接口。 使用该组件以播放各种格式的包含音频和视频的视频内容,这些格式包括MP4、MPEG DASH和HLS等。 该组件支持默认媒体控件图形用户界面。 将该组件添加到呈现树中并存储其引用。然后在该引用上调用HTMLMediaElement和HTMLVideoElement方法。该组件不允许应用在屏幕上显示视频之前预缓冲内容。要进行预缓冲,您可以使用VideoPlayer JavaScript类组件。

VideoPlayer组件

VideoPlayer组件实现HTMLVideoElement接口,该接口可扩展HTMLMediaElement接口。 HTMLVideoElement是一个typescript类,而非React Native组件。 默认情况下,它不会将视频呈现到屏幕上,也不会呈现媒体控件图形用户界面。 应用必须构建自身的媒体控件用户界面并控制播放体验。 应用必须创建一个VideoPlayer实例,并使用它来开始缓冲内容,而无需在屏幕上呈现视频。 要在屏幕上显示视频,应用必须执行以下操作:
  • 将KeplerVideoSurfaceView React Native组件添加到渲染树中
  • 接收onSurfaceViewCreated事件
  • 通过setSurfaceHandle方法将事件回调中获得的表面句柄传递给VideoPlayer

Audio React Native组件

Audio是实现HTMLAudioElement接口的组件,该接口可扩展HTMLMediaElement接口。 使用该组件播放仅包含音频的MP3或MPEG DASH/HLS等音频。 该组件支持默认媒体控件图形用户界面。 将该组件添加到呈现树中并存储其引用。 然后在该引用上调用HTMLMediaElement和HTMLAudioElement API。 该组件不允许应用在设备上播放音频之前预缓冲内容。要进行预缓冲,可使用AudioPlayer JavaScript类组件。

AudioPlayer组件

AudioPlayer组件实现HTMLAudioElement接口,该接口可扩展HTMLMediaElement接口。 AudioPlayer是一个typescript类,而非React Native组件。 使用该组件播放仅包含音频的MP3或MPEG DASH/HLS等格式。 应用需要创建一个AudioPlayer实例,并使用它来开始缓冲内容,而无需开始播放。 它不呈现媒体控件图形用户界面。应用需要构建自身的媒体控件用户界面并控制播放体验。

KeplerVideoSurfaceView

KeplerVideoSurfaceView是一个React Native组件,用于在屏幕上呈现视频帧。 只有在预缓冲模式下使用VideoPlayer且多个播放器同时预缓冲不同的内容时,才使用KeplerVideoSurfaceView。 然后,应用将由onSurfaceViewCreated事件回调传递的表面句柄附加到需要在屏幕上呈现的视频播放器实例。

KeplerCaptionsView

KeplerCaptionsView是一个React Native组件,该组件可在屏幕上呈现隐藏式字幕和字幕。仅在使用VideoPlayer和AudioPlayer组件在预缓冲模式下运行时才使用该组件。 应用通过setCaptionViewHandle方法将onCaptionViewCreated事件回调传递的隐藏式字幕句柄附加到VideoPlayer和AudioPlayer,以便播放器能够在屏幕上呈现隐藏式字幕或字幕。 当前,默认情况下不呈现隐藏式字幕。 要启用字幕呈现,可运行以下命令:
以下示例展示了该组件的用法。

HTMLMediaElement

HTMLMediaElement代表您的适用于Vega的React Native应用用来控制播放的主播放器界面。该接口由Video和Audio React Native组件以及VideoPlayer和AudioPlayer typescript组件实现。 如需了解更多详情,请参阅https://html.spec.whatwg.org/multipage/media.html(仅提供英文版)。 应用可以在两种模式下启动播放,具体取决于内容类型(自适应或非自适应),如下所述。
  • URL模式播放适用于非自适应流媒体格式,例如MP4、MP3、MKV等媒体文件。Audio和Video组件支持通过“src”属性播放MP4、MP3、MKV等非自适应流媒体格式。
    • 将src属性设置为媒体URL。 应用将内容URL设置为“src”属性。 video.src = [some url] or audio.src = [some url]
  • 媒体源扩展 (MSE) 模式适合播放自适应流媒体格式,例如HLS和MPEG DASH等。MSE API支持HLS和MPEG DASH等自适应流媒体格式。此API允许应用向播放器注入HLS和DASH等自适应流媒体内容的媒体片段。应用下载清单并对其进行解析,以确定内容支持的不同比特率质量级别和变体。该应用根据可用网络带宽下载具有适当质量级别的媒体片段。然后它通过MediaSource和SourceBuffer方法将其传递给播放器。 有关如何使用这些API的更多信息,请参阅https://www.w3.org/TR/media-source-2/(仅提供英文版)。
    • 创建MediaSource对象。
      let mediaSource = new MediaSource();
    • 为MediaSource创建blob URL:
      let url = URL.createObjectURL(mediaSource)
    • 将MediaSource连接到视频或音频组件。
      video.src = url或audio.src = url
    • 按mime类型添加SourceBuffer。
      let sourceBuffer = mediaSource.addSourceBuffer(mimeType)
    -5下载媒体片段并将其附加到SourceBuffer:

常见媒体操作

使用Audio或Video React Native组件引用,通过HTMLMediaElement方法控制媒体播放和其他常见操作,如下所示。

开始播放

video.play()或audio.play()

暂停播放

video.pause()或audio.pause()

获取当前时间

读取currentTime属性以获取当前的播放位置。 console.log('${video.currentTime}'); or console.log('${audio.currentTime}');

搜索位置

将currentTime属性设置为搜索所需位置。 video.currentTime = seekPosition;或audio.currentTime = seekPosition;

处理事件

Vega W3C媒体API支持W3C媒体规范中描述的所有事件。有两种方法可以在Video或Audio上注册事件处理程序。
  • 在React Native的Audio/Video组件上使用属性。有关支持的属性列表,请参阅MediaProps。例如,您可以为ended注册一个事件处理程序,如以下示例所示:
  1. 使用EventTarget addEventListener() 方法。 Video和Audio组件实现了EventTarget接口的两种方法:addEventListener和removeEventListener。 应用可以使用这些方法在React Native的Audio/Video组件的引用上注册事件处理程序。例如,您可以按以下示例所示注册事件处理程序。 video.addEventListener("ended", onEnded);
除了Audio和Video React Native组件,还有其他非React Native组件,例如AudioTrackList、VideoTrackList、MediaSource、SourceBuffer和SourceBufferList,它们也可以发出事件。这些事件通过EventTarget的addEventListener方法来处理。所有这些方法都支持addEventListener。 注意:​ 不支持这些方法的EventHandler属性。 例如,以下示例显示了如何处理VideoTrackList上的addtrack事件。 video.videoTracks.addEventListener("addtrack", onVideoTrackAdded); 或者要处理MediaSource上的sourceopen事件。 mediasource.addEventListener("sourceopen", onMediaSourceOpen) 加密媒体扩展仅在MSE模式下支持受DRM保护的播放。有关更多信息,请参阅https://w3c.github.io/encrypted-media/。

HTMLMediaElement中不支持的功能

  • networkState
  • 加载
  • canPlayType - 指明支持的任何类型。
  • fastSeek - 执行与设置currentTime相同的搜索。
  • getStartDate
  • addTextTrack
  • 预加载
  • defaultPlaybackRate、playbackRate
  • preservesPitch
  • 循环
  • 音量、静音

媒体源扩展 (MSE) 中不支持的功能

MediaSource API (https://www.w3.org/TR/media-source-2/#mediasource)

  • 不支持的EventHandler属性。应用可以使用MediaSource实现的EventTarget接口的addEventListener方法来注册事件处理程序。
  • audioTracks、videoTracks和textTracks

SourceBuffer API (https://www.w3.org/TR/media-source-2/#sourcebuffer)

  • changeType
  • EventHandler - 以下属性。目前,应用可以使用SourceBuffer实现的EventTarget接口的addEventListener方法来注册事件处理程序。

SourceBufferList API (https://www.w3.org/TR/media-source-2/#sourcebufferlist)

  • 不支持以下EventHandler属性。目前,应用可以使用SourceBufferList实现的EventTarget接口的addEventListener方法。

相关主题

API参考

类

接口

枚举

类型别名

函数


最后修改于 2026年10月26日