переключение видео просмотров - PullRequest
1 голос
/ 24 октября 2011

В моей деятельности у меня есть 2 VideoViews.я должен проигрывать разные видео файлы один за другим.
Чтобы сократить время переключения, я планировал перевернуть просмотры видео.т.е. один просмотр видео будет VISIBLE, а другой - GONE.Пока воспроизводится видимое видео, я могу инициализировать (setVideoPath) другое видео.

Но, основываясь на журналах, я обнаружил, что для videoview с видимостью GONE после вызова setVideoPath, OnPreparedListener вызывается только тогда, когда представление становится VISIBLE.Т.е. после завершения первого видеовидения я переключаю видимость, затем я получаю OnPreparedListener для второго видеовидения.

Чтобы подтвердить свои выводы, я сделал оба видеопоказа VISIBLE и позвонил setVideoPath.В этом случае оба OnPreparedListener вызываются немедленно.

Вопрос:
Зависит ли подготовка VideoView (setVideoPath) от его видимости?
Есть ли способ подготовить видеовид на заднем плане (не показывая егопользователь)?

Спасибо!

Ответы [ 3 ]

1 голос
/ 24 октября 2011

Зависит ли подготовка VideoView (setVideoPath) от его видимости?

Видимо, да. openVideo () требует наличия некоторой видимости

public void setVideoURI(Uri uri) {
        mUri = uri;
        mStartWhenPrepared = false;
        mSeekWhenPrepared = 0;
        openVideo();
        requestLayout();
        invalidate();
    }

Есть ли способ подготовить видеовид в фоновом режиме (не показывая его пользователю)?

Расширьте это VideoView и подготовьтесь самостоятельно. Или просто используйте свой собственный VideoView

0 голосов
/ 24 октября 2011

Вид должен быть видимым и выложенным, прежде чем его можно будет привязать к приложению камеры. (Обратные вызовы вида поверхности должны быть обработаны, прежде чем что-либо делать).

0 голосов
/ 24 октября 2011

Копаясь в исходном коде для VideoView и SurfaceView, похоже, что большая часть работы по инициализации Media Player не выполняется до тех пор, пока представление не станет видимым. Я не вижу выхода из этого.

В частности, вот часть SurfaceView.java, которая запускается, когда вид становится видимым:

if (visible) {
    // other stuff
    if (visibleChanged) {
        mIsCreating = true;
        for (SurfaceHolder.Callback c : callbacks) {
            c.surfaceCreated(mSurfaceHolder);
        }
    }
    // other stuff
}

Это вызывает это в VideoView.java:

.
SurfaceHolder.Callback mSHCallback = new SurfaceHolder.Callback()
{
    // other stuff
    public void surfaceCreated(SurfaceHolder holder)
    {
        mSurfaceHolder = holder;
        openVideo();
    }
    // other stuff
}

И openVideo () - это место, где происходит вся магия.

...