diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Drm.java b/app/src/main/java/com/fongmi/android/tv/bean/Drm.java index 1b6484602..699d1ddb5 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Drm.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Drm.java @@ -33,7 +33,7 @@ public class Drm { return TextUtils.isEmpty(type) ? "" : type; } - private UUID getUUID() { + public UUID getUUID() { if (getType().contains("playready")) return C.PLAYREADY_UUID; if (getType().contains("widevine")) return C.WIDEVINE_UUID; if (getType().contains("clearkey")) return C.CLEARKEY_UUID; diff --git a/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java b/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java index 8fe193b5b..af65f199e 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java @@ -19,6 +19,10 @@ public class ErrorEvent { EventBus.getDefault().post(new ErrorEvent(Type.URL, code)); } + public static void drm() { + EventBus.getDefault().post(new ErrorEvent(Type.DRM, -1)); + } + public static void flag() { EventBus.getDefault().post(new ErrorEvent(Type.FLAG, -1)); } @@ -59,6 +63,7 @@ public class ErrorEvent { public String getMsg() { if (type == Type.URL) return ResUtil.getString(R.string.error_play_url, code); + if (type == Type.DRM) return ResUtil.getString(R.string.error_play_drm_scheme); if (type == Type.FLAG) return ResUtil.getString(R.string.error_play_flag); if (type == Type.PARSE) return ResUtil.getString(R.string.error_play_parse); if (type == Type.TIMEOUT) return ResUtil.getString(R.string.error_play_timeout); @@ -66,6 +71,6 @@ public class ErrorEvent { } public enum Type { - URL, FLAG, PARSE, TIMEOUT, EXTRACT + URL, DRM, FLAG, PARSE, TIMEOUT, EXTRACT } } diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index 98803476a..adddb2570 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -22,6 +22,7 @@ import androidx.media3.common.C; import androidx.media3.common.PlaybackException; import androidx.media3.common.Player; import androidx.media3.exoplayer.ExoPlayer; +import androidx.media3.exoplayer.drm.FrameworkMediaDrm; import androidx.media3.exoplayer.util.EventLogger; import androidx.media3.ui.PlayerView; @@ -343,6 +344,8 @@ public class Players implements Player.Listener, ParseCallback { startParse(channel.result(), false); } else if (isIllegal(channel.getUrl())) { ErrorEvent.url(); + } else if (channel.getDrm() != null && !FrameworkMediaDrm.isCryptoSchemeSupported(channel.getDrm().getUUID())) { + ErrorEvent.drm(); } else { setMediaItem(channel, timeout); } @@ -355,6 +358,8 @@ public class Players implements Player.Listener, ParseCallback { startParse(result, useParse); } else if (isIllegal(result.getRealUrl())) { ErrorEvent.url(); + } else if (result.getDrm() != null && !FrameworkMediaDrm.isCryptoSchemeSupported(result.getDrm().getUUID())) { + ErrorEvent.drm(); } else { setMediaItem(result, timeout); } @@ -404,7 +409,7 @@ public class Players implements Player.Listener, ParseCallback { } private void setMediaItem(Map headers, String url, String format, Drm drm, List subs, int timeout) { - if (exoPlayer != null) exoPlayer.setMediaItem(ExoUtil.getMediaItem(this.headers = checkUa(headers), UrlUtil.uri(this.url = url), this.format = format, this.drm = drm, checkSub(this.subs = subs), decode), position); + if (exoPlayer != null) exoPlayer.setMediaItem(ExoUtil.getMediaItem(this.headers = checkUa(headers), UrlUtil.uri(this.url = url), this.format = format, this.drm = drm, checkSub(this.subs = subs)), position); if (exoPlayer != null) exoPlayer.prepare(); App.post(runnable, timeout); session.setActive(true); diff --git a/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java index f0978be76..6e5bd9b38 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java @@ -108,7 +108,7 @@ public class ExoUtil { return null; } - public static MediaItem getMediaItem(Map headers, Uri uri, String mimeType, Drm drm, List subs, int decode) { + public static MediaItem getMediaItem(Map headers, Uri uri, String mimeType, Drm drm, List subs) { MediaItem.Builder builder = new MediaItem.Builder().setUri(uri); builder.setRequestMetadata(getRequestMetadata(headers, uri)); builder.setSubtitleConfigurations(getSubtitleConfigs(subs)); diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f9c4ba171..d266bb036 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -109,6 +109,7 @@ 已经是最后一集了! 已经是第一集了! 播放地址解析失败 + 此设备不支持所需的 DRM scheme 播放地址加载失败\n错误代码:%s 暂无线路数据 连接超时 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 84023e53f..93251ee1a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -109,6 +109,7 @@ 已經是最後一集了! 已經是第一集了! 播放網址解析失敗 + 本設備不支援所需的 DRM scheme 播放網址載入失敗\n錯誤代碼:%s 暫無線路資料 連線逾時 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 45aa046cf..16b61a45e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -110,6 +110,7 @@ It\'s the last episode! It\'s the first episode! Unable to parse url + This device does not support the required DRM scheme Unable to load url\nError code: %s No flag data Timed out