Я получаю URL-адрес с помощью PHPickerViewControllerDelegate. Я подтвердил, что мой URL-адрес правильно передан в код, но когда я играю узел видео, видео не отображается, и я не слышу никакого звука, так что это не проблема с наслоением. Мы можем назвать этот вариант 1.
ОБНОВЛЕНИЕ: я думал, что смогу решить проблему с помощью AVPlayer, поэтому я попробовал два дополнительных способа (вариант 2) поместить видеофайл в проект, что сработало, но не решило мою проблему с извлечением файлов из моего локального каталога. (Вариант 3) с использованием видео из локального каталога, что не сработало. Окно SKVideoNode отображается, но видео не воспроизводится.
Это говорит мне, что это как-то связано с URL-адресом локального каталога. Есть ли что-то, что мне нужно включить в конфиденциальность, чтобы видео показывалось? Я так близко, но кажусь таким далеким.
Optional(file:///private/var/mobile/Containers/Data/Application/3D99929D-CFC4-418A-B215-3AE463F3AD38/tmp/.com.apple.Foundation.NSItemProvider.WMPrvs/RPReplay_Final1617465667.mp4)
import Foundation
import SpriteKit
import GameplayKit
import PhotosUI
class AnimationInventory18: SKScene {
var chosenCharacterSceneUse1: CharacterSkin?
var chosenBackgroundSceneUse1: BackgroundSkin?
var selectedTextSceneUse1: String?
var chosenImageSceneUse1: UIImage?
var chosenLivePhotoSceneUse1: PHLivePhoto?
var chosenVideoSceneUse1: URL?
//MARK: First Party Class Initializers
init(size: CGSize, chosenChateracterSceneUse: CharacterSkin?,selectedTextSceneUse: String?, chosenBackgroundSceneUse: BackgroundSkin?, chosenImageSceneUse: UIImage?, chosenLivePhotoSceneUse: PHLivePhoto?, chosenVideoSceneUse: URL? ){
super.init(size:size)
self.chosenCharacterSceneUse1 = chosenChateracterSceneUse
self.selectedTextSceneUse1 = selectedTextSceneUse
self.chosenBackgroundSceneUse1 = chosenBackgroundSceneUse
self.chosenImageSceneUse1 = chosenImageSceneUse
self.chosenLivePhotoSceneUse1 = chosenLivePhotoSceneUse
self.chosenVideoSceneUse1 = chosenVideoSceneUse
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func niceToMeetYou() {
videoPlay()
}
func videoPlay(){
// below print statement outputs - *Optional(file:///private/var/mobile/Containers/Data/Application/3D99929D-CFC4-418A-B215-3AE463F3AD38/tmp/.com.apple.Foundation.NSItemProvider.WMPrvs/RPReplay_Final1617465667.mp4)*
print(chosenVideoSceneUse1)
let video2 = SKVideoNode(url: chosenVideoSceneUse1!)
video2.position = CGPoint(x: 90, y: -40)
video2.zPosition = 1
video2.xScale = 5
video2.yScale = 5
// below print statement outputs - *<SKVideoNode> name:'(null)' position:{90, -40} size:{0, 0} rotation:0.00*
print(video2)
addChild(video2)
video2.play()
//Plays but isnt ideal since pulling from project files instead of local director
let urlStr = Bundle.main.path(forResource: "TryToHaveANiceDay-20210322", ofType: "mov")
print(urlStr)
let url = NSURL(fileURLWithPath: urlStr!)
let player2 = AVPlayer(url: url as URL)
let videoNode = SKVideoNode(avPlayer: player2)
videoNode.position = CGPoint(x: 0, y: 0)
videoNode.zPosition = 100
videoNode.size = CGSize(width: 100, height: 100)
videoNode.xScale = 1
videoNode.yScale = 1
addChild(videoNode)
videoNode.play()
// SKVideoNode displays but content does not
let player = AVPlayer(url: chosenVideoSceneUse1! as URL)
print(player)
let video3 = SKVideoNode(avPlayer: player)
video3.position = CGPoint(x: 0, y: 0)
video3.zPosition = 100
video3.size = CGSize(width: 100, height: 100)
video3.xScale = 1
video3.yScale = 1
addChild(video3)
video3.play()
//MARK: Override functions
override func didMove(to view: SKView) {
niceToMeetYou()
}
}
*Optional(file:///private/var/mobile/Containers/Data/Application/3D99929D-CFC4-418A-B215-3AE463F3AD38/tmp/.com.apple.Foundation.NSItemProvider.WMPrvs/RPReplay_Final1617465667.mp4)*
Исходная переменная задается через другой vc, доступ к которому осуществляется через мой контроллер вкладок. Видео воспроизводится нормально, если я использую SKVideoNode(fileNamed:), но я хочу, чтобы пользователь мог использовать видео из своей библиотеки. - person Ojay   schedule 16.04.2021AVPlayer
из своего метода stackoverflow.com/a/30988140/2303865 - person Leo Dabus   schedule 29.04.2021let urlStr = Bundle.main.path(forResource: "TryToHaveANiceDay-20210322", ofType: "mov")
, он работает нормально, однако, когда я использую этот метод,let video2 = SKVideoNode(url: chosenVideoSceneUse1!)
он не работает. Метод video2 получает URL-адрес от моего метода phpicker. Я считаю, что это как-то связано с конфиденциальностью библиотеки фотографий, но не могу найти работающее решение. - person Ojay   schedule 30.04.2021