相关疑难解决方法(0)

如何在动态壁纸,中心裁剪和适合宽度/高度适合视频?

背景

我正在制作一个可以显示视频的动态壁纸.一开始我认为这将非常困难,所以有些人建议使用OpenGL解决方案或其他非常复杂的解决方案(例如这个).

无论如何,为此,我发现了各种各样的地方,并且基于这个github库(它有一些bug),我终于得到了它的工作.

问题

虽然我成功地显示了一个视频,但我无法找到控制它与屏幕分辨率相比如何显示的方法.

目前它总是被拉伸到屏幕尺寸,这意味着这个(从这里拍摄的视频):

在此输入图像描述

得到如下:

在此输入图像描述

原因是不同的宽高比:560x320(视频分辨率)与1080x1920(设备分辨率).

注意:我很清楚缩放视频的解决方案,这些解决方案可以在各种Github存储库中找到(例如这里),但我问的是一个动态壁纸.因此,它没有View,所以它对如何做事更加有限.更具体地说,解决方案不能具有任何类型的布局,TextureView或SurfaceView或任何其他类型的View.

我试过的

我尝试使用SurfaceHolder的各种领域和功能,但到目前为止没有运气.例子:

这是我目前的代码(这里有完整的项目):

class MovieLiveWallpaperService : WallpaperService() {
    override fun onCreateEngine(): WallpaperService.Engine {
        return VideoLiveWallpaperEngine()
    }

    private enum class PlayerState {
        NONE, PREPARING, READY, PLAYING
    }

    inner class VideoLiveWallpaperEngine : WallpaperService.Engine() {
        private var mp: MediaPlayer? = null
        private var playerState: PlayerState = PlayerState.NONE

        override fun onSurfaceCreated(holder: SurfaceHolder) {
            super.onSurfaceCreated(holder)
            Log.d("AppLog", "onSurfaceCreated")
            mp = …
Run Code Online (Sandbox Code Playgroud)

android live-wallpaper android-mediaplayer

61
推荐指数
2
解决办法
2948
查看次数