Обработка исключений Android Libvlc

Я не могу найти никакой информации о том, как обрабатывать такие ошибки:

E/VLC: [7126d274] core input: Your input can't be opened E/VLC: [7126d274] core input: VLC is unable to open the MRL ...

Это приводит к сбою активности, когда я пытаюсь загрузить другой URI сразу после этой ошибки, поэтому я хотел бы выпустить и воссоздать проигрыватель, когда он появится.

Спасибо

EDIT: Вот как я создаю проигрыватель один раз, в onResume

    private void createPlayer() {
    releasePlayer();
    try {
        ArrayList<String> options = new ArrayList<String>();
        options.add("--aout=opensles");
        options.add("--audio-time-stretch");
        options.add("-vvv"); // verbosity
        libvlc = new LibVLC(options);

        libvlc.setOnNativeCrashListener(this);
        mSurfaceHolder.setKeepScreenOn(true);

        // Create media player
        mMediaPlayer = new MediaPlayer(libvlc);
        mMediaPlayer.setEventListener(mPlayerListener);

        // Set up video output
        final IVLCVout vout = mMediaPlayer.getVLCVout();
        vout.setVideoView(mSurfaceView);
        vout.addCallback(StandardPlayerMain.this);
        vout.attachViews();

    } catch (Exception e) {
        Toast.makeText(this, "Error creating player!", Toast.LENGTH_LONG).show();
    }
}

И вот как я начинаю играть каждый URI:

private void playMedia(String mediaString)
{
    if(mMediaPlayer == null) {
        createPlayer();
        return;
    }

    if(mMediaPlayer.isPlaying()) {
        mMediaPlayer.stop();
    }
    Uri mUri = Uri.parse(mediaString);
    Media m = new Media(libvlc, mUri);
    m.setHWDecoderEnabled(false, false);
    try{
        mMediaPlayer.setMedia(m);
        mMediaPlayer.play();
    }
    catch (Exception e)
    {
        Log.v("myapp", e.getMessage());
    }
}

person Gregorio Mascarpone    schedule 17.05.2016    source источник
comment
не могли бы вы поделиться кодом?   -  person TGO    schedule 17.05.2016
comment
Привет, Грегорио. У тебя есть ответ? Я тоже жду того же.   -  person sagar potdar    schedule 13.09.2017
comment
@sagarpotdar Нет, к сожалению, нет. Я перестал использовать libvlc и переключился на медиаплеер VXG, который не является бесплатным, но имеет пробную версию SDK, и этого было достаточно для проверки моей концепции. Извините, что не смог помочь с этим.   -  person Gregorio Mascarpone    schedule 14.09.2017
comment
@GregorioMascarpone: -Спасибо. Попробую.   -  person sagar potdar    schedule 15.09.2017


Ответы (1)


Мое решение использовало logcat таким образом.

Простой класс чтения журнала

 public static final class MyLibVLCLogReader {
        private static final String TAG = MyLibVLCLogReader.class.getCanonicalName();

        private static String[] runClearCMD = new String[]{"logcat", "-c"};
        private static String[] runCMD = new String[]{"logcat", "*:D", "-e", "libvlc"};

        private Thread thread;
        private boolean isRun = true;

        private OnLogListener logListener;

        public MyLibVLCLogReader() {
            thread = new Thread(runnable);
        }

        public MyLibVLCLogReader(OnLogListener listener) {
            logListener = listener;
            thread = new Thread(runnable);
        }

        public void Start() {
            thread.start();
        }

        public void Stop() {
            isRun = false;
        }

        private Runnable runnable = new Runnable() {
            @Override
            public void run() {
                Log.v(TAG, "Begin listening logger");
                try {
                    // Clear logs
                    Runtime.getRuntime().exec(runClearCMD);

                    // Capture logs
                    Process process = Runtime.getRuntime().exec(runCMD);
                    BufferedReader bufferedReader = new BufferedReader(
                            new InputStreamReader(process.getInputStream()));

                    String line;
                    while (isRun && (line = bufferedReader.readLine()) != null) {
                        if (logListener != null) logListener.onLogCapture(line);
                    }

                    bufferedReader.close();
                    process.destroy();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                Log.v(TAG, "Exit listening logger");
            }
        };

        public interface OnLogListener {
            public void onLogCapture(String line);
        }
    }

Вам необходимо разрешение на чтение журнала при его использовании.

    <uses-permission
        android:name="android.permission.READ_LOGS"
        tools:ignore="ProtectedPermissions" />
person ibrahim ethem gürsoy    schedule 02.10.2019