AVPlayer持续时间为NAN与Twilio

时间:2015-09-08 07:16:04

标签: ios iphone swift twilio avplayer

class Testing{ public static void main(String[] args) { Animal d = new Dog(); /*This is totally legal, calling the method run is no problem because it is defined inside the Animal class: */ d.run(); /*Compliler Error! Calling the method bark results in an error because it is not defined in the Animal class: */ d.bark(); } } 的{​​{1}}属性始终使用 Twilio 音频网址返回duration。但是,音频播放正常。

我能够获得除Twilio之外的所有其他音频网址的AVPlayer.currentItem属性。

测试此问题的网址示例:

NAN

以下是我尝试过的不同方法:

duration

对此有任何帮助表示赞赏。

我已通过浏览器请求http://api.twilio.com/2010-04-01/Accounts/AC1db6911efe574fc890ee332f140f7e8c/Recordings/RE06adfbfd2ad2cfd5d95585ff91cb3b88.mp3 并返回所有详细信息,包括音频持续时间if (avPlayer.currentItem.status.rawValue == AVPlayerStatus.ReadyToPlay.rawValue) { var asset = AVURLAsset(URL: sourceURL, options: nil) var duration: Float64 = CMTimeGetSeconds(asset.duration) println(duration) } if (avPlayer.currentItem.status.rawValue == AVPlayerStatus.ReadyToPlay.rawValue) { var duration: Float64 = CMTimeGetSeconds(self.avPlayer.currentItem.duration) println(duration) } var thePlayerItem = self.avPlayer.currentItem if thePlayerItem.status.rawValue == AVPlayerStatus.ReadyToPlay.rawValue{ println(CMTimeGetSeconds(thePlayerItem.duration)) println(CMTimeGetSeconds(thePlayerItem.asset.duration)) }

GET

响应:

<Duration>37</Duration>

3 个答案:

答案 0 :(得分:7)

我遇到了同样的问题,但我能够通过以下方式获得持续时间:

let timeRange = self.avPlayer.currentItem.loadedTimeRanges[0].CMTimeRangeValue
let duration = CMTimeGetSeconds(timeRange.duration)

希望这有帮助!

答案 1 :(得分:1)

我终于找到了原因。实际上,我试图获得持续时间的歌曲没有设置元数据,这就是为什么它给予Nan持续时间。 AVPlayerItem使用load-asynchronous with keys方法异步加载数据,当数据存在时,您将在avplayer的当前Item属性中获取它。

顺便说一句,使用loadedTimeRanges [0] .rangeValue.duration不是计算总持续时间的正确方法,因为这个值每秒都会更新,直到整个数据都没有加载。对于较短的数据,它有时可以正常工作,因为它一次性加载整个数据,当您使用loadedtimeinranges.rangeValue.duration属性时,它会为您提供正确的结果,但对于较大的数据,这不是正确的解决方案。

如果你想看看你的问题是否与元数据有关,只需流式传输任何在线mp3文件并检查问题是否仍然存在,它应该适用于流式传输任何下载的文件或任何远程文件,如果它有使用它设置的元数据,应该给你正确的持续时间。希望这有助于!!

答案 2 :(得分:0)

嘿,我只是这样做,事实上,当我使用.duration时,使用推荐的 @inga {{1它返回错误的时间。但我改为loadedTimeRanges[0].rangeValue.duration n并开始工作

twilio path without .mp3 extensio