Add drm check

pull/586/head
FongMi 12 months ago
parent 2ffadb2ee9
commit 3c15985d66
  1. 2
      app/src/main/java/com/fongmi/android/tv/bean/Drm.java
  2. 7
      app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java
  3. 7
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  4. 2
      app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java
  5. 1
      app/src/main/res/values-zh-rCN/strings.xml
  6. 1
      app/src/main/res/values-zh-rTW/strings.xml
  7. 1
      app/src/main/res/values/strings.xml

@ -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;

@ -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
}
}

@ -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<String, String> headers, String url, String format, Drm drm, List<Sub> 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);

@ -108,7 +108,7 @@ public class ExoUtil {
return null;
}
public static MediaItem getMediaItem(Map<String, String> headers, Uri uri, String mimeType, Drm drm, List<Sub> subs, int decode) {
public static MediaItem getMediaItem(Map<String, String> headers, Uri uri, String mimeType, Drm drm, List<Sub> subs) {
MediaItem.Builder builder = new MediaItem.Builder().setUri(uri);
builder.setRequestMetadata(getRequestMetadata(headers, uri));
builder.setSubtitleConfigurations(getSubtitleConfigs(subs));

@ -109,6 +109,7 @@
<string name="error_play_next">已经是最后一集了!</string>
<string name="error_play_prev">已经是第一集了!</string>
<string name="error_play_parse">播放地址解析失败</string>
<string name="error_play_drm_scheme">此设备不支持所需的 DRM scheme</string>
<string name="error_play_url">播放地址加载失败\n错误代码:<xliff:g name="name">%s</xliff:g></string>
<string name="error_play_flag">暂无线路数据</string>
<string name="error_play_timeout">连接超时</string>

@ -109,6 +109,7 @@
<string name="error_play_next">已經是最後一集了!</string>
<string name="error_play_prev">已經是第一集了!</string>
<string name="error_play_parse">播放網址解析失敗</string>
<string name="error_play_drm_scheme">本設備不支援所需的 DRM scheme</string>
<string name="error_play_url">播放網址載入失敗\n錯誤代碼:<xliff:g name="name">%s</xliff:g></string>
<string name="error_play_flag">暫無線路資料</string>
<string name="error_play_timeout">連線逾時</string>

@ -110,6 +110,7 @@
<string name="error_play_next">It\'s the last episode!</string>
<string name="error_play_prev">It\'s the first episode!</string>
<string name="error_play_parse">Unable to parse url</string>
<string name="error_play_drm_scheme">This device does not support the required DRM scheme</string>
<string name="error_play_url">Unable to load url\nError code: <xliff:g name="name">%s</xliff:g></string>
<string name="error_play_flag">No flag data</string>
<string name="error_play_timeout">Timed out</string>

Loading…
Cancel
Save