Android-Exoplayer在渲染mpd视频时显示空白屏幕



我正在使用以下测试流在android外部层中渲染mpdhttps://bitmovin-a.akamaihd.net/content/art-of-motion_drm/mpds/11331.mpd

以下是我的外层代码:

val adaptiveTrackSelection = AdaptiveTrackSelection.Factory()
val trackSelector: TrackSelector = DefaultTrackSelector(mContext!!, adaptiveTrackSelection)
mConcatenatingMediaSource = ConcatenatingMediaSource()
val mediaItem = MediaItem.Builder().setUri(url).setMimeType(MimeTypes.APPLICATION_MPD)
.build()
val dashMediaSource = DashMediaSource.Factory(DefaultDataSourceFactory(mContext!!, mContext!!.packageName))
.createMediaSource(mediaItem)
mConcatenatingMediaSource.addMediaSource(dashMediaSource)
exoPlayer = SimpleExoPlayer.Builder(this).setTrackSelector(trackSelector).build()
.also { exoPlayer ->
exoPlayer.playWhenReady = true
exoPlayer.addMediaSource(mConcatenatingMediaSource as MediaSource)
playerView!!.player = exoPlayer
exoPlayer.prepare()
attachEventListener(exoPlayer)
}

我得到了球员状态state_READY,我得到了每秒钟的位置更新,最后得到了球员的状态state_ENDED,但在屏幕上总是一个空白屏幕。我正在三星设备上测试操作系统android 12。

有人能帮我解决这个问题吗。

您共享的链接指向受DRM保护的视频流,您看到的行为与播放器不显示加密内容一致。

如果你只是想测试ExoPlayer,那么你可以简单地选择一个不受DRM保护的不同流。

如果你确实想测试这个特定的流,那么你需要在ExoPLayer中设置DRM信息。

ExoPlayer文档对此提供了指导,包括以下示例(https://exoplayer.dev/drm.html):

MediaItem mediaItem = new MediaItem.Builder()
.setUri(videoUri)
.setDrmConfiguration(
new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
.setLicenseUri(licenseUri)
.setMultiSession(true)
.setLicenseRequestHeaders(httpRequestHeaders)
.build())
.build();

这是为Widevine,它是Android上的默认DRM,您的流支持它。你可以通过查看链接到的清单来看到这一点,你会看到Widevine UUID列在内容保护元素中。

ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dc51d21ed";

仅供参考,DRM UUID的完整列表如下:https://dashif.org/identifiers/content_protection/

最新更新