You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ExoPlayer2中配置ClearKey许可证?

ExoPlayer2 ClearKey 授权配置问题修复方案

核心问题排查与修复步骤

  • 调整MediaSourceFactory配置顺序
    当前代码先调用createMediaSource再设置DrmSessionManagerProvider,导致已创建的MediaSource未绑定DRM管理器。需先配置DRM管理器,再创建关联MediaSource:

    DefaultMediaSourceFactory mediaSourceFactory = new DefaultMediaSourceFactory(this)
         .setDataSourceFactory(new DefaultHttpDataSource.Factory())
         .setDrmSessionManagerProvider(mediaItem -> drmSessionManager); // 先绑定DRM管理器
    
    player = new ExoPlayer.Builder(this, new DefaultRenderersFactory(this).forceEnableMediaCodecAsynchronousQueueing())
         .setTrackSelector(new DefaultTrackSelector(this))
         .setMediaSourceFactory(mediaSourceFactory)
         .build();
    
    MediaItem mediaItem = MediaItem.fromUri(Uri.parse(videoUri));
    player.setMediaItem(mediaItem);
    
  • 验证ClearKey密钥编码格式
    ClearKey要求kid和k必须是Base64URL编码(无填充字符),检查你的keyString:

    • 移除末尾的=填充符
    • 将Base64中的+替换为-、/替换为_
  • 启用多会话支持
    代码中包含多组密钥,需将setMultiSession(false)改为true,让DRM管理器支持多密钥会话:

    DefaultDrmSessionManager drmSessionManager = new DefaultDrmSessionManager.Builder()
         .setMultiSession(true)
         .setUuidAndExoMediaDrmProvider(C.CLEARKEY_UUID, FrameworkMediaDrm.DEFAULT_PROVIDER)
         .build(new LocalMediaDrmCallback(keyString.getBytes()));
    
  • 添加错误监听定位问题
    给Player添加监听,捕获DRM相关错误信息:

    player.addListener(new Player.Listener() {
        @Override
        public void onPlayerError(PlaybackException error) {
            super.onPlayerError(error);
            if (error.errorCode == PlaybackException.ERROR_CODE_DRM_FAILED) {
                Log.e("DRM_ERROR", error.getMessage(), error);
            }
        }
    });
    
  • 明确MediaItem的DRM配置(可选)
    部分场景下需给MediaItem指定DRM配置,确保与视频参数匹配:

    MediaItem mediaItem = new MediaItem.Builder()
         .setUri(Uri.parse(videoUri))
         .setDrmConfiguration(new MediaItem.DrmConfiguration.Builder(C.CLEARKEY_UUID)
                 .setLicenseUri("") // ClearKey本地授权留空即可
                 .build())
         .build();
    

内容的提问来源于stack exchange,提问作者Lionel Yayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 23:22:43