VideoView在动态壁纸?

时间:2011-05-25 19:13:23

标签: android android-videoview live-wallpaper

根据其他问题android-video-as-a-live-wallpaper,在动态壁纸中播放视频的唯一方法是自行解码吗?

4 个答案:

答案 0 :(得分:3)

只需使用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 :(得分:1)

答案 2 :(得分:0)

只是想在框外思考,是否有可能将一个有效的视频播放器重新托管在Android的Java窗口下?我没有在Linux或Android中完成此操作,但在Windows下,可以获取正在运行的应用程序的窗口句柄并使其成为Java框架的子项,结果是其他应用程序的窗口看起来像是Java的一部分应用

答案 3 :(得分:0)

我尝试过Justin Buser解决方案并且无效(在API 16设备上测试过),在https://github.com/thorikawa/AndroidExample/tree/master/MovieLiveWallpaper/上也找到了类似的代码;它也不起作用。 唯一的解决方案似乎是使用FFMPEG和NDK。例如:https://github.com/frankandrobot