ВидеоПросмотр в живых обоях? - PullRequest
11 голосов
/ 25 мая 2011

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

Ответы [ 4 ]

3 голосов
/ 20 февраля 2014

Просто используйте 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();
                    }
        }

}
1 голос
/ 19 января 2014

Короткий ответ - да.Длинный ответ http://ikaruga2.wordpress.com/2011/06/15/video-live-wallpaper-part-1/

0 голосов
/ 14 января 2015

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

0 голосов
/ 25 января 2014

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

...