微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 SKVideoNode 从 url 播放视频?

如何解决如何使用 SKVideoNode 从 url 播放视频?

我正在使用 PHPickerViewControllerDelegate 获取 url。我已经确认我的 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()
        
    }

    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。