자막 컨트롤러에 이미 Mediaplayer 오류 Android가 설정되어 있어야합니다 controller already set 내 코드 : private void

미디어를 재생할 때마다 DDMS에 경고가 표시됩니다 Should have subtitle controller already set

내 코드 :

private void start() {
    mediaPlayer.start();

        mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            mp.stop();
            mp.release();
        }
    });
}

DDMS 로그

자막 컨트롤러가 이미 설정되어 있어야합니다

정보 / 경고 (2, 0)

Google에서 검색 할 때 관련 주제가 하나도 없었습니다. 이를 제거하거나 비활성화하려면 어떻게해야합니까?



답변

개발자는 최근 VideoView에 자막 지원을 추가했습니다 .

MediaPlayer이 설정되지 않은 것 경우 SubtitleController와 쇼이 메시지가있을 경우 음악 (또는 다른 소스) 재생 시작되면 확인합니다. 재생하려는 소스가 음악 또는 비디오인지에 대해서는 신경 쓰지 않는 것 같습니다. 왜 그렇게했는지 모르겠습니다.

짧은 대답 : 이 “예외”에 신경 쓰지 마십시오.


편집하다 :

여전히 Lollipop 에 있습니다.

경우 MediaPlayer에만 오디오 파일을 재생하는 데 사용하고 당신이 정말로 로그 캣에서 이러한 오류를 제거 할되어, 코드가 울부 짖는 소리 설정 empty SubtitleController받는 사람을 MediaPlayer.

프로덕션 환경에서 사용해서는 안되며 부작용이있을 수 있습니다.

static MediaPlayer getMediaPlayer(Context context){

    MediaPlayer mediaplayer = new MediaPlayer();

    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) {
        return mediaplayer;
    }

    try {
        Class<?> cMediaTimeProvider = Class.forName( "android.media.MediaTimeProvider" );
        Class<?> cSubtitleController = Class.forName( "android.media.SubtitleController" );
        Class<?> iSubtitleControllerAnchor = Class.forName( "android.media.SubtitleController$Anchor" );
        Class<?> iSubtitleControllerListener = Class.forName( "android.media.SubtitleController$Listener" );

        Constructor constructor = cSubtitleController.getConstructor(new Class[]{Context.class, cMediaTimeProvider, iSubtitleControllerListener});

        Object subtitleInstance = constructor.newInstance(context, null, null);

        Field f = cSubtitleController.getDeclaredField("mHandler");

        f.setAccessible(true);
        try {
            f.set(subtitleInstance, new Handler());
        }
        catch (IllegalAccessException e) {return mediaplayer;}
        finally {
            f.setAccessible(false);
        }

        Method setsubtitleanchor = mediaplayer.getClass().getMethod("setSubtitleAnchor", cSubtitleController, iSubtitleControllerAnchor);

        setsubtitleanchor.invoke(mediaplayer, subtitleInstance, null);
        //Log.e("", "subtitle is setted :p");
    } catch (Exception e) {}

    return mediaplayer;
}

이 코드는 숨겨진 API에서 다음을 수행하려고합니다.

SubtitleController sc = new SubtitleController(context, null, null);
sc.mHandler = new Handler();
mediaplayer.setSubtitleAnchor(sc, null)


답변

logcat에서 메시지를 제거하려면 추적 할 자막을 추가하십시오. 창에서 트랙-> 속성-> 세부 정보-> 자막에 텍스트를 마우스 오른쪽 버튼으로 클릭하십시오. 완료 🙂


답변

또한 설정 해제 mediaPlayer.reset()onDestroy해제 만 가능합니다.


답변