MoviePlayer本地文件

时间:2014-08-08 21:03:31

标签: ios video swift xcode6

所以我一直试图找到这个问题的答案大约16个小时了。看起来应该是这么简单的事情,但苹果公司关于这方面的文件非常糟糕,我不太了解客观C。

所以我有一个SKSpriteNode,我想用它作为一个按钮。单击该按钮时,我想全屏播放mp4视频。听起来很简单吧?

我也是在游戏模板中写这个,因为我学到了很快就知道了,我只在GameScene.swift工作。

我已经进入构建阶段并将视频添加到"复制捆绑资源"。

class GameScene: SKScene {
    var infoButton:SKSpriteNode!
    var moviePlayer: MPMoviePlayerController!
    var url: NSURL!



    override func didMoveToView(view: SKView) {

        // Button
        let infoButtonTexture = SKTexture(imageNamed: "btn_vid")
        infoButton = SKSpriteNode(texture: infoButtonTexture)
        infoButton.position = CGPointMake(backgroundSprite.size.width * 0.393, backgroundSprite.size.height * 0.2437)
        infoButton.userInteractionEnabled = false
        infoButton.name = "infoButton"
        self.addChild(infoButton)

        // Video
        let filePath = NSBundle.mainBundle().pathForResource("hue", ofType: "mp4")
        let bundleURL = NSBundle.mainBundle()!.URLForResource("hue", withExtension: "txt")
        url = NSURL(string: "hue.mp4")

        moviePlayer.contentURL = NSURL.fileURLWithPath(filePath)
        moviePlayer.fullscreen = true
        moviePlayer.shouldAutoplay = true
        moviePlayer.prepareToPlay()
    }


    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {


        /* Called when a touch begins */

        for touch: AnyObject in touches {
            println("Something has Been Touched")
            var location:CGPoint = touch.locationInNode(self)
            var node:SKNode!
            node = self.nodeAtPoint(CGPoint(x: location.x, y: location.y))

            if node.name {
                if node.name == infoButton.name {
                    moviePlayer.play()
                }
            }
        }
    }

我试图删除不相关的代码。

正如您在视频部分中所注意到的,我有三种不同的方法来获取文件路径。我在所有这些上运行了println,它们按如下方式打印出来:

filePath打印为:/ Users / myname / Library / Developer / CoreSimulator / Devices / 954CB013-FB55-4846-A8E0-A2773A3563FF / data / Containers / Bundle / Application / 35DB47D4-FB78-4FBE-898B-A5B3435A0F6C / Kiosk- Wine.app/hue.mp4

bundleURL打印为:file:/// Users / myname / Library / Developer / CoreSimulator / Devices / 954CB013-FB55-4846-A8E0-A2773A3563FF / data / Containers / Bundle / Application / 35DB47D4-FB78-4FBE-898B- A5B3435A0F6C / Kiosk-Wine.app / hue.mp4

url打印为:hue.mp4(你可能已经想到了)

我在每个上面使用了moviePlayer.contentURL = NSURL.fileURLWithPath(x),其中x是filePath,bundleURL或url,错误如下:

filePath:线程:1 EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0) 在“输出”窗口中,它显示: 致命错误:在展开Optional值时意外发现nil (lldb)

bundleURL:这个无法构建:调用中缺少参数isDirectory的参数

url:这个无法构建:在调用中缺少参数isDirectory的参数

我希望我已经为您提供了足够的信息以便对问题有所了解,如果没有,请告诉我,我会发布。

谢谢!

奖金问题:如果有人知道代码以识别"请点击"和"发布"对于一个触摸的精灵节点,这样当有人触摸它时,我可以改变精灵节点的纹理图像,这将是惊人的:)甚至知道我可以在哪里阅读。

1 个答案:

答案 0 :(得分:0)

试试这个:

let url = NSBundle.mainBundle().URLForResource("hue", withExtension: "mp4")

moviePlayer.contentURL = url
moviePlayer.fullscreen = true
moviePlayer.shouldAutoplay = true
moviePlayer.prepareToPlay()

我没有很多文件经验,但这是一个stackoverflow用户在某篇文章中建议的,当时我正在寻找一种在我的应用中播放视频的方法。