【问题标题】:Portrait videos no longer retain aspect ratio in iOS 14肖像视频在 iOS 14 中不再保留纵横比
【发布时间】:2020-10-05 12:37:16
【问题描述】:

在 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 中解决(或者是否需要它)。

还作为错误发布在 https://github.com/TextureGroup/Texture/issues/1918

【问题讨论】:

    标签: swift video ios14


    【解决方案1】:

    尝试在play()之前调用didExitPreloadState()

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

    sample 中,他们将资产设置在play() 之前。资产的设置器在内部调用didExitPreloadState()(参见here)。

    【讨论】:

    • 这真的有效吗?这只会让我的应用崩溃?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2020-05-13
    • 2013-03-22
    相关资源
    最近更新 更多