HTMLMediaElement、媒体源扩展和加密媒体扩展方法。
开始使用
设置
- 将以下库依赖项添加到package.json文件的
dependencies部分。
-
打开终端窗口并导航到您的应用文件夹。运行npm以将程序包安装到您的应用中。
-
更新您的babel.config.js文件,否则运行时应用会引发“ReferenceError: Property ‘React’ doesn’t exist”(ReferenceError:属性“React”不存在)的异常。
-
在您的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实例,并使用它来开始缓冲内容,而无需在屏幕上呈现视频。
要在屏幕上显示视频,应用必须执行以下操作:
- 将
KeplerVideoSurfaceViewReact 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]
-
将src属性设置为媒体URL。
应用将内容URL设置为“src”属性。
-
媒体源扩展 (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)
SourceBuffer: -
创建MediaSource对象。
常见媒体操作
使用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注册一个事件处理程序,如以下示例所示:
-
使用
EventTarget addEventListener()方法。 Video和Audio组件实现了EventTarget接口的两种方法:addEventListener和removeEventListener。 应用可以使用这些方法在React Native的Audio/Video组件的引用上注册事件处理程序。例如,您可以按以下示例所示注册事件处理程序。video.addEventListener("ended", onEnded);
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参考
类
- Audio—实现
HTMLAudioElement接口的React Native组件,可扩展 - AudioPlayer—*
- Event
- HTMLAudioElement
- HTMLMediaElement—https://html.spec.whatwg.org/multipage/media.html#htmlmediaelement
- HTMLVideoElement
- InvalidStateError
- KeplerCaptionsView—这是一个React Native组件,可渲染隐藏式字幕和字幕
- KeplerMediaControlHandler
- KeplerShareableSurfaceView—这是一个React Native组件,可渲染屏幕上的视频帧。
- KeplerVideoSurfaceView—这是一个React Native组件,可在屏幕上渲染视频帧。
- Media—https://html.spec.whatwg.org/multipage/media.html#htmlmediaelement
- MediaError—所有媒体元素都具有关联的错误状态,
- MediaSource—实现
MediaSource接口。它使用EventEmitter来发出事件。 - NotSupportedError
- SourceBufferImpl—此类可实现SourceBuffer接口。
- TextDecoder
- TextTrackImpl—我们需要单独实现
- TrackEvent—https://html.spec.whatwg.org/multipage/media.html#trackevent
- Video—Video是一个React Native组件,可实现
HTMLVideoElement接口 - VideoPlayer—*
- VTTCue—https://www.w3.org/TR/webvtt1/#the-vttcue-interface
- W3CLibPolyfill
- WebCrypto
接口
- AudioConfiguration—https://w3c.github.io/media-capabilities/#dictdef-audioconfiguration
- AudioTrack—表示音频轨道对象。
- AudioTrackList—有关更多信息,请参阅
- CDMiInterface
- EventListener
- EventTarget—https://dom.spec.whatwg.org/#interface-eventtarget
- KeySystemTrackConfiguration—https://www.w3.org/TR/media-capabilities/#keysystemtrackconfiguration
- MediaCapabilities—https://w3c.github.io/media-capabilities/#media-capabilities-interface
- MediaCapabilitiesDecodingInfo—https://w3c.github.io/media-capabilities/#dictdef-mediacapabilitiesdecodinginfo
- MediaCapabilitiesInfo—https://w3c.github.io/media-capabilities/#dictdef-mediacapabilitiesinfo
- MediaCapabilitiesKeySystemConfiguration—https://w3c.github.io/media-capabilities/#mediacapabilitieskeysystemconfiguration
- MediaConfiguration—https://w3c.github.io/media-capabilities/#dictdef-mediaconfiguration
- MediaDecodingConfiguration—解码功能的输入由MediaDecodingConfiguration字典表示。
- MediaKeys—表示一组密钥的MediaKeys对象,这组密钥关联
- MediaKeySession—表示媒体密钥会话。
- MediaKeysSystemAccess—MediaKeySystemAccess对象提供密钥系统的访问权限。
- MediaKeySystemConfiguration—https://www.w3.org/TR/encrypted-media/#mediakeysystemconfiguration-dictionary
- MediaKeySystemMediaCapability—为MIME类型指定密钥系统的稳定性。
- MediaProvider
- MediaSourceHandle—TextTrackCue。
- SourceBuffer—有关更多信息,请参阅
- SourceBufferList—有关更多信息,请参阅
- TextTrack—https://html.spec.whatwg.org/multipage/media.html#texttrack
- TextTrackCue—https://html.spec.whatwg.org/multipage/media.html#texttrackcue
- TextTrackCueList—https://html.spec.whatwg.org/multipage/media.html#texttrackcuelist
- TextTrackList—有关更多信息,请参阅
- TimeRanges—表示时间范围(时段)列表。
- VideoConfiguration—https://w3c.github.io/media-capabilities/#dictdef-videoconfiguration
- VideoTrack
- VideoTrackList—有关更多信息,请参阅
- W3CMediaTurboModuleInterface
枚举
- AppendMode—有关更多信息,请参阅
- AudioContentType—描述音频内容类型。
- AudioUsageType—描述音频使用类型。
- EndOfStreamError—有关更多信息,请参阅
- ReadyState—有关更多信息,请参阅
类型别名
- BufferSource—有关更多信息,请参阅
- CanPlayTypeResult—“可能”:
- ColorGamut—VideoConfiguration可能包含以下类型之一:
- HdrMetadataType—如果存在,HdrMetadataType会描述解释指定类型HDR元数据的能力。
- InitDataType—指定与加密相关的初始化数据
- MediaDecodingType—MediaDecodingConfiguration有三种类型:
- MediaKeySessionType—指定媒体密钥会话的类型。
- MediaKeysRequirement—必需:
- MediaPlayerDeInitStatus—此文件是从ATVKeplerNFPBindingsInterface vmpf-dev分支复制的
- Robustness—安全:使用安全的视频缓冲区
- TextTrackKind—表示文本轨道的类型。
- TextTrackMode—表示文本轨道的显示模式。
- TransferFunction—VideoConfiguration可能包含以下类型之一:
函数
- decodingInfo
- KeplerVideoView—这是一个React Native组件,会按照指定的方式渲染以下内容
- QuotaExceededError
- requestMediaKeysSystemAccess—待办事项:在未来版本中(在MR32之后)中弃用“requestMediaKeysSystemAccess”。
- requestMediaKeySystemAccess—https://www.w3.org/TR/encrypted-media/#dom-navigator-requestmediakeysystemaccess

