Seharusnya pengontrol subtitle sudah mengatur kesalahan Mediaplayer Android

138

Setiap kali saya memutar media, itu menunjukkan peringatan di DDMS Should have subtitle controller already set

KODE SAYA:

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

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

LOG DDMS

Pengontrol subtitle seharusnya sudah disetel

info / peringatan (2, 0)

Ketika saya mencari di Google, tidak ada satu pun topik yang terkait dengannya. Bagaimana cara menyingkirkan atau menonaktifkan ini?

Sai
sumber

Jawaban:

188

Pengembang baru-baru ini menambahkan dukungan subtitle ke VideoView .

Ketika MediaPlayermulai memainkan musik (atau sumber lain), ia memeriksa apakah ada SubtitleController dan menampilkan pesan ini jika tidak disetel. Sepertinya tidak peduli jika sumber yang ingin Anda putar adalah musik atau video. Tidak yakin mengapa dia melakukan itu.

Jawaban singkatnya: Tidak peduli dengan "Pengecualian" ini.


Edit:

Masih hadir di Lollipop ,

Jika MediaPlayerhanya digunakan untuk memutar file audio dan Anda benar-benar ingin menghapus kesalahan ini di logcat, kode di bawah ini disetel empty SubtitleControllerke MediaPlayer.

Ini tidak boleh digunakan dalam lingkungan produksi dan mungkin memiliki beberapa efek samping.

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

Kode ini mencoba melakukan hal berikut dari API tersembunyi

SubtitleController sc = new SubtitleController(context, null, null);
sc.mHandler = new Handler();
mediaplayer.setSubtitleAnchor(sc, null)
Hacketo
sumber
12
Saya setuju - ini bukan kesalahan jika trek subtitle tidak ada. Paling informasional.
Seseorang di suatu tempat
4
oke, tentu, tapi adakah cara mudah untuk menekannya? itu membuang hasil logcat saya ...
TJ Ellis
Dapat membuat filter menurut saya jika itu benar-benar mengganggu, mengkompilasi ulang android, atau menyetel SubtitleController kosong untuk lagu Anda.
Hacketo
1
@Hacketo bagaimana Anda menyetel SubtitleController kosong? Maaf, saya tidak melihat ini di dokumen.
Frank Schwieterman
2
Tentu saja dokumentasinya tidak memberikan informasi ini. Jika Anda telah melihat kode yang dibagikan dari MediaPlayer, Anda dapat melihat bahwa ada penyetel untuk SubtitleController (jadi itu mungkin), tetapi sayangnya tampaknya tidak tersedia.
Hacketo
8

Untuk menghapus pesan di logcat, saya menambahkan subtitle ke trek. Pada windows, klik kanan pada track -> Property -> Details -> masukkan teks pada subtitle. Selesai :)

StefanoM5
sumber
Beberapa pemikiran tentang ini: 1) memodifikasi file sumber tidak dapat dilakukan dalam banyak situasi. 2) Anda tidak menjelaskan mengapa menambahkan trek subtitle akan memperbaiki kesalahan pada pengontrol subtitle di MediaPlayer.
Travis Castillo
Kesalahannya adalah "Seharusnya pengontrol subtitle sudah disetel", jadi saya menambahkan subtitle untuk dilacak jadi hindari pesan kesalahan ini.
StefanoM5
pengontrol subtitle atau subtitle. apakah Anda mengatakan bahwa dengan memiliki trek subtitle pada video, pemutar media secara otomatis menghasilkan pengontrol?
Travis Castillo
0

Anda juga hanya dapat mengatur mediaPlayer.reset()dan onDestroymengaturnya untuk rilis.

Faizan Khan
sumber