VideoView в живых обоях?

Как и в других вопросах android-video-as-a-live-wallpaper, единственный способ воспроизвести видео на живых обоях - это его декодировать самостоятельно?

Ответ 1

Просто используйте MediaPlayer вместо VideoView и используйте MediaPlayer.setSurface вместо MediaPlayer.setDisplay. Если вы используете setDisplay, MediaPlayer пытается сообщить SurfaceHolder, чтобы экран, на котором не разрешен для LiveWallpapers, выдает ошибку.

Я использую видео WebM/vpx8, но это должно работать с любым поддерживающим MediaPlayer (просто поместите видеофайл в res/raw)

package com.justinbuser.nativecore;

import android.media.MediaPlayer;
import android.service.wallpaper.WallpaperService;
import android.view.SurfaceHolder;
import com.justinbuser.android.Log;

public class VideoWallpaperService extends WallpaperService
    {
        protected static int                playheadTime = 0;

        @Override
        public Engine onCreateEngine()
            {
                return new VideoEngine();
            }

        class VideoEngine extends Engine
            {

                private final String        TAG     = getClass().getSimpleName();
                private final MediaPlayer   mediaPlayer;
                public VideoEngine()
                    {
                        super();
                        Log.i( TAG, "( VideoEngine )");
                        mediaPlayer = MediaPlayer.create(getBaseContext(), R.raw.wallpapervideo);
                        mediaPlayer.setLooping(true);
                    }

                @Override
                public void onSurfaceCreated( SurfaceHolder holder )
                    {
                        Log.i( TAG, "onSurfaceCreated" );
                        mediaPlayer.setSurface(holder.getSurface());
                        mediaPlayer.start();
                    }

                @Override
                public void onSurfaceDestroyed( SurfaceHolder holder )
                    {
                        Log.i( TAG, "( INativeWallpaperEngine ): onSurfaceDestroyed" );
                        playheadTime = mediaPlayer.getCurrentPosition();
                        mediaPlayer.reset();
                        mediaPlayer.release();
                    }
        }

}

Ответ 3

Просто подумать нестандартно, можно ли взять рабочий видеопроигрыватель и переименовать его под java-окном в Android? Я не делал этого в Linux или Android, но под Windows можно получить дескриптор окна запущенного приложения и сделать его дочерним элементом Java-фрейма, в результате чего другое окно приложения выглядит как его часть вашей Java приложение.

Ответ 4

Я пробовал решение Justin Buser, и он не работает (протестирован на устройстве API 16), также нашел аналогичный код на https://github.com/thorikawa/AndroidExample/tree/master/MovieLiveWallpaper/; он тоже не работает. Единственное решение, похоже, заключается в использовании FFMPEG с NDK. например: https://github.com/frankandrobot