崩溃日志:MediaPlayer.setSubtitleAnchor中的InternalError

问题描述 投票:13回答:1

看到以下崩溃日志经常弹出:

java.lang.InternalError: 
  at java.lang.Thread.nativeCreate (Native Method)
  at java.lang.Thread.start (Thread.java:733)
  at android.media.MediaPlayer.setSubtitleAnchor (MediaPlayer.java:3039)
  at android.media.MediaPlayer.scanInternalSubtitleTracks (MediaPlayer.java:3240)
  at android.media.MediaPlayer.prepare (MediaPlayer.java:1442)
  at android.media.MediaPlayer.create (MediaPlayer.java:1046)
  at android.media.MediaPlayer.create (MediaPlayer.java:1012)
  ...

我用上下文/资源参数调用MediaPlayer.create。它对我和95%的用户都很好。有一点需要注意的是,我确实得到了可怕的

 E/MediaPlayer: Should have subtitle controller already set

日志消息是许多StackOverflow问题的主题。我目前一直忽视它,就像大多数答案告诉我的那样 - 但如果scanInternalSubtitleTracks正在创建InternalError崩溃,也许我不应该?

java android crash-reports
1个回答
4
投票

在MEDIA_PREPARED之后的媒体播放器android中,播放器开始搜索字幕,并且在搜索字幕发送期间发生任何异常而不是崩溃。你应该忽略它,或者你可以使用像ExoPlayer这样的其他播放器。

case MEDIA_PREPARED:
    try {
         scanInternalSubtitleTracks();
    } catch (RuntimeException e) {
      // send error message instead of crashing;
      // send error message instead of inlining a call to onError
      // to avoid code duplication.
      Message msg2 = obtainMessage(
                        MEDIA_ERROR, MEDIA_ERROR_UNKNOWN, MEDIA_ERROR_UNSUPPORTED, null);
      sendMessage(msg2);
    }
    OnPreparedListener onPreparedListener = mOnPreparedListener;
    if (onPreparedListener != null)
         onPreparedListener.onPrepared(mMediaPlayer);
         return;

在Android版本28 android让你使用.setOnSubtitleDataListener()可以解决你在Android 28上的问题

© www.soinside.com 2019 - 2024. All rights reserved.