我正在制作一个可以显示视频的动态壁纸.一开始我认为这将非常困难,所以有些人建议使用OpenGL解决方案或其他非常复杂的解决方案(例如这个).
无论如何,为此,我发现了各种各样的地方,并且基于这个github库(它有一些bug),我终于得到了它的工作.
虽然我成功地显示了一个视频,但我无法找到控制它与屏幕分辨率相比如何显示的方法.
目前它总是被拉伸到屏幕尺寸,这意味着这个(从这里拍摄的视频):
得到如下:
原因是不同的宽高比:560x320(视频分辨率)与1080x1920(设备分辨率).
注意:我很清楚缩放视频的解决方案,这些解决方案可以在各种Github存储库中找到(例如这里),但我问的是一个动态壁纸.因此,它没有View,所以它对如何做事更加有限.更具体地说,解决方案不能具有任何类型的布局,TextureView或SurfaceView或任何其他类型的View.
我尝试使用SurfaceHolder的各种领域和功能,但到目前为止没有运气.例子:
setVideoScalingMode - 它要么崩溃要么不做任何事情.
改变surfaceFrame - 相同.
这是我目前的代码(这里有完整的项目):
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 = …