【问题标题】:VideoView in a live wallpaper?VideoView 在动态壁纸中?
【发布时间】:2011-05-25 19:13:22
【问题描述】:

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

【问题讨论】:

    标签: android android-videoview 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();
                        }
            }
    
    }
    

    【讨论】:

    • 如何将视频的比例设置为各种方法?我想把它放在各种缩放方法中查看它,但现在我只知道如何使用普通的 MediaPlayer 来实现它,它通过拉伸来缩放它,这并不好:stackoverflow.com/q/50091878/878126
    【解决方案2】:

    【讨论】:

    • 谢谢你,我知道并且我已经相应地构建了 ikaruga2 教程。关键是那个教程,实际上非常好,留下了一些问题,其中之一就是音频...... LISA
    • 您还需要音频吗?这是一个相当大的挑战。阅读文档(我知道音频有点不稳定),您可能会有所了解。例如,您必须考虑到,音频也可能被其他资源使用,而管理它是一项相当复杂的任务。祝你好运,我希望你成功。附言我想你知道这将是一个非常耗电的应用程序,对吧?
    • 是的,这是一个挑战......这就是为什么我正在寻找一种替代方法。不管怎么说,还是要谢谢你!丽莎
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多