代码之家  ›  专栏  ›  技术社区  ›  ericosg

iOS 14中肖像视频不再保留人像视频

  •  0
  • ericosg  · 技术社区  · 4 年前

    在XCode 12和iOS 14上使用Texture 3.0.0版本时,一个仅在iOS 14设备上出现的问题是,肖像视频的加载分辨率错误(看起来它们的宽度和高度是互换的)。

    自动播放效果良好,但手动播放效果不佳。 肖像视频坏了,但风景视频没有。 问题是,所施加的重力似乎使用了错误的肖像视频宽度/高度来拉伸视频。

    下面的示例应用程序(使用我上传的公共肖像视频):

    //
    //  ViewController.swift
    //  test video
    //
    //  Created by Ericos Georgiades on 22/09/2020.
    //
    
    import UIKit
    import AVFoundation
    import AsyncDisplayKit
    
    class ViewController: UIViewController {
    
        
        @IBOutlet weak var videoView: UIView!
        private let videoNode = ASVideoNode();
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            videoNode.gravity = AVLayerVideoGravity.resizeAspectFill.rawValue;
            videoNode.muted = true;
            videoNode.shouldAutorepeat = true;
            videoNode.shouldAutoplay = false; // works if true
            videoView.addSubnode(videoNode);
            videoNode.frame = videoView.frame;
            
            let asset = AVAsset(url: URL(string: "https://storage.googleapis.com/pao-uat-6b24c.appspot.com/users/0QhK2lnaQ49BftJTRQ46/spots/7q0Q2TjiIyHyrNTBbJOO/media/WaMnS8Np5vkTcIV0rGyJ/WaMnS8Np5vkTcIV0rGyJ?alt=media&token=75542345-06cc-4e37-a422-1ff2a1cf47c2")!)
            videoNode.asset = asset
    
            DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
                self.videoNode.play();
            }
        }
    }
    

    我还没有弄清楚这是否是库的错误,或者这是否可以在Swift中解决,而不需要修复库(或者是否需要)。

    也作为bug发布在 https://github.com/TextureGroup/Texture/issues/1918

    0 回复  |  直到 4 年前
        1
  •  1
  •   atarasenko    4 年前

    尝试拨打电话 didExitPreloadState() 之前 play() :

    ...
    DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
          self.videoNode.didExitPreloadState()
          self.videoNode.play();
    }
    ...
    

    在the sample 他们立即设定了资产 play() .资产调用的设置者 didExit预加载状态() 内部(见 here ).

    推荐文章