根据最近的信标从网址播放视频

时间:2016-07-09 19:18:48

标签: xcode swift url video ibeacon

我正在使用GitHub的这个项目播放360视频:https://github.com/Aralekk/simple360player_iOS

我想根据最近的信标来播放来自网址的特定视频。我在那里添加了这些属性:

var minorOfClosestBeacon = Int()
var playVideo = String()
let urls = [
    40018: "url1",
    38474: "url2",
    60220: "url3"
]

我的didRangeBeacons功能如下所示:

func beaconManager(manager: KTKBeaconManager, didRangeBeacons beacons: [CLBeacon], inRegion region: KTKBeaconRegion) {
    print("Did ranged \"\(beacons.count)\" beacons inside region: \(region)")
    if beacons.count == 0 {
        userInfoView.hidden = false
    }
    if let closestBeacon = beacons.sort({ $0.0.accuracy < $0.1.accuracy }).first where closestBeacon.accuracy > 0 {
        print("Closest Beacon is M: \(closestBeacon.major), m: \(closestBeacon.minor) ~ \(closestBeacon.accuracy) meters away.")
        minorOfClosestBeacon = closestBeacon.minor.integerValue
        let videoToPlay = self.urls[minorOfClosestBeacon]!
        if playVideo != videoToPlay {
            playVideo = videoToPlay
            play(playVideo)
            print("Playing video: \(playVideo)")
            userInfoView.hidden = true
        } else {
            userInfoView.hidden = true
        }
    }
}

当我在那里打印playVideo时,它会打印出正确的值,但不会播放视频。当第一个最近的信标是urls数组中的第一个时,它只是没有播放,但是当它是第二个或第三个时,它会为url输出正确的值,但在那个致命错误之后:在解开一个Optional值时意外地找到了nil 。 那里应该有什么问题?

1 个答案:

答案 0 :(得分:0)

我怀疑fatal error: unexpectedly found nil while unwrapping an Optional value.是由这行中的爆炸引起的:

let videoToPlay = self.urls[minorOfClosestBeacon]! 

我会将其替换为:

if let videoToPlay = self.urls[minorOfClosestBeacon] {
  // Put the rest of your code here
  ...
}
else {
  print "No video found for minor \(minorOfClosestBeacon)"
}

很难说为什么视频在没有看到play方法的内容的情况下无法播放。也许您需要在主线程上运行它:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
  play(playVideo)
}

我会验证play方法调用本身是否使用硬编码的url,然后才能使用所有beacon逻辑。