11

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

4

4 回答 4

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();
                    }
        }

}
于 2014-02-20T06:33:16.343 回答
1

简短的回答是肯定的。长答案是http://ikaruga2.wordpress.com/2011/06/15/video-live-wallpaper-part-1/

于 2014-01-19T07:06:42.943 回答
0

只是跳出框框思考,是否可以在 Android 的 Java 窗口下获取一个正常工作的视频播放器并将其重新设置为父级?我没有在 Linux 或 Android 中这样做,但在 Windows 下,可以获取正在运行的应用程序的窗口句柄并使其成为 Java 框架的子框架,结果其他应用程序的窗口看起来就像它的 Java 的一部分应用。

于 2014-01-24T23:07:53.810 回答
0

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

于 2015-01-14T18:28:06.947 回答