Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SKVideoNode中的视频在Xcode模拟器中运行良好,在大多数设备上无法播放_Ios_Swift_Sprite Kit_Avfoundation_Xcode6.4 - Fatal编程技术网

Ios SKVideoNode中的视频在Xcode模拟器中运行良好,在大多数设备上无法播放

Ios SKVideoNode中的视频在Xcode模拟器中运行良好,在大多数设备上无法播放,ios,swift,sprite-kit,avfoundation,xcode6.4,Ios,Swift,Sprite Kit,Avfoundation,Xcode6.4,我正在为Swift和Sprite工具包xCode 6.4开发一个应用程序,目前正在为iOS 8.4开发。我正在使用SKVideoNode和AVPlayer来播放全屏视频。守则如下: let path = NSBundle.mainBundle().pathForResource("SPLASH_x", ofType:"mov") let vUrl = NSURL.fileURLWithPath(path!) let asset = AVAsset.assetWithUR

我正在为Swift和Sprite工具包xCode 6.4开发一个应用程序,目前正在为iOS 8.4开发。我正在使用SKVideoNode和AVPlayer来播放全屏视频。守则如下:

    let path = NSBundle.mainBundle().pathForResource("SPLASH_x", ofType:"mov")
    let vUrl = NSURL.fileURLWithPath(path!)

    let asset = AVAsset.assetWithURL(vUrl) as? AVAsset
    let playerItem = AVPlayerItem(asset: asset)
    let player = AVPlayer(URL: vUrl)
    SplashVideo = SKVideoNode(AVPlayer: player)
    SplashVideo!.xScale = self.size.width / SplashVideo!.size.width
    SplashVideo!.yScale = self.size.height / SplashVideo!.size.height
    SplashVideo!.position = CGPointMake(self.frame.midX, self.frame.midY)
    self.addChild(SplashVideo!)

    var observer: AnyObject? = nil
    observer = player.addPeriodicTimeObserverForInterval(CMTimeMake(1,30), queue: dispatch_get_main_queue(),
        usingBlock: { (time: CMTime) -> Void in
            let secs:Float64 = CMTimeGetSeconds(time)
            println("I think it's playing")
            if (secs > 0.01) {
                self.hideBackground()
                println("I think I'm done observing. Background hidden!")
                player.removeTimeObserver(observer!)
            }
    })
    println("I think I'm playing the splash video:")
    SplashVideo!.play()
如果不清楚,这种情况会发生在didMoveToView中;我已经在文件的顶部导入了基础、AvFunt和SpReTeKIT。

这在模拟器中运行良好;如果我为我的iPad构建并运行什么都没发生,它会显示一个黑屏,或者如果我移除时间观察者,这样背景就不会被隐藏,我只看到了背景,背景是电影的第一帧,在视频播放开始时,我遇到了一个黑色的闪光,我使用时间观察者作为掩蔽技术来隐藏它。我的一个用户报告说,在他升级到iOS9之前,它一直对他有效。另一个用户报告说,他听到了与.mov文件一起的音频,但没有看到视频本身,这更令人担忧。所以我得到了各种各样的非工作行为,这是最好的bug。我所说的最好是指最坏

我尝试过的事情:

各种版本和组合的直接链接在基础,AVFLAST,SRIPITEKIT建设时。 使用AVPlayerLayer而不是SpriteKit对我来说没有行为上的改变,没有部署,所以我不知道它是否对我的测试人员有帮助。 移除时间观察者完全没有改变。 搜索互联网没有帮助。 把我的头发扯下来,哎哟。
所有这些都是无效的。现在我秃顶了。悲哀。

回答我自己的问题:经过多次尝试和错误,似乎无法在iOS9中缩放SKVideoNode,或者可能从未支持过?文件不清楚。不管我做什么,xCode 7的模拟器都不会播放视频,这也是事实,这对事情没有帮助。在任何情况下,您都可以更改节点的size属性,然后让Sprite Kit进行缩放?文档似乎参差不齐,而且似乎有效:

let asset = AVAsset.assetWithURL(vUrl) as? AVAsset
let playerItem = AVPlayerItem(asset: asset)
let player = AVPlayer(URL: vUrl)
SplashVideo = SKVideoNode(AVPlayer: player)
SplashVideo!.size = self.size
SplashVideo!.position = CGPointMake(self.frame.midX, self.frame.midY)
self.addChild(SplashVideo!) 

在ObjC中,我遇到了一个类似的问题,这是因为玩家在开始游戏之前就被释放了。你可以试着让你的玩家成为一个类变量,看看这是否有帮助。我认为这在swift中不是一个问题,但可能不是。我应该补充一点,如果你对x和y的缩放量相同,这并不重要。也就是说,我并没有试图使视频的纵横比与本机视频的纵横比不同,或者通过setScale方法进行设置。在iOS9中似乎没有缩放SKVideoNode的方法可以工作。同样,这可能是有目的的或已知的,但我在文档中找不到任何引用。