【问题标题】:Android - Exoplayer shows blank screen while rendering mpd videoAndroid - Exoplayer 在渲染 mpd 视频时显示空白屏幕
【发布时间】:2022-10-17 19:49:02
【问题描述】:

我正在使用以下测试流在 android exoplayer 中呈现 mpd https://bitmovin-a.akamaihd.net/content/art-of-motion_drm/mpds/11331.mpd

以下是我的 exoplayer 代码:

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,但在屏幕上它始终是一个空白屏幕。我正在使用 os android 12 在三星设备上进行测试。

谁能帮我解决这个问题。

【问题讨论】:

    标签: android exoplayer exoplayer2.x exoplayer-media-item dashmedia


    【解决方案1】:

    您共享的链接指向受 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-27dcd51d21ed"

    作为一个仅供参考,DRM UUID 的完整列表在这里:https://dashif.org/identifiers/content_protection/

    【讨论】: