AVPlayer 持续时间是 NAN 与 Twilio
AVPlayer Duration is NAN with Twilio
AVPlayer.currentItem
的 duration
属性 返回 NAN
总是与 Twilio 音频 urls .但是,音频播放正常。
我能够获得除 Twilio 之外的所有其他音频 url 的 duration
属性。
示例 url 以测试此问题:
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>
GET /2010-04-01/Accounts/ACda6f1.../Recordings/RE557ce644e5ab84fa21cc21112e22c485.xml
回复:
HEADERS
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Accept, Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since
Access-Control-Allow-Methods: GET, POST, DELETE, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: ETag
Connection: keep-alive
Content-Length: 550
Content-Type: application/xml
Date: Tue, 08 Sep 2015 06:50:43 GMT
Etag: b1512f..
Last-Modified: Fri, 04 Sep 2015 04:19:20 +0000
Strict-Transport-Security: max-age=15768000
X-Powered-By: AT-5000
X-Shenanigans: none
BODY
view raw
<?xml version='1.0' encoding='UTF-8'?>
<TwilioResponse>
<Recording>
<Sid>RE…</Sid>
<AccountSid>ACda6f1... </AccountSid>
<CallSid>CA3..</CallSid>
<Duration>37</Duration>
<DateCreated>Fri, 04 Sep 2015 04:19:20 +0000</DateCreated>
<ApiVersion>2010-04-01</ApiVersion>
<DateUpdated>Fri, 04 Sep 2015 04:19:20 +0000</DateUpdated>
<Price/>
<Uri>/2010-04-01/Accounts/ACda6f1.../Recordings/RE557ce644e5ab84fa21cc21112e22c485.xml</Uri>
</Recording>
</TwilioResponse>
我遇到了同样的问题,但我可以通过执行以下操作获得持续时间:
let timeRange = self.avPlayer.currentItem.loadedTimeRanges[0].CMTimeRangeValue
let duration = CMTimeGetSeconds(timeRange.duration)
希望对您有所帮助!
嘿,我只是在做,事实上,当我使用 .duration
以及使用建议的 @inga[=17 时,使用 mp3 扩展名从 twilio 录制对我来说并没有用=]loadedTimeRanges[0].rangeValue.duration
那returns时间错了。但是我改为 twilio path without .mp3 extensio
n 并且它开始工作
if let playerItem = player.currentItem, playerItem.status == AVPlayerItemStatus.readyToPlay {
let durationTime = playerItem.duration
//playerItem.loadedTimeRanges[0].timeRangeValue.duration
}
终于找到原因了。实际上,我试图从中获取持续时间的歌曲没有为其设置元数据,这就是它给出 Nan 持续时间的原因。 AVPlayerItem 使用 keys 方法使用 load-asynchronous 异步加载数据,当数据存在时,您将在 avplayer 的当前 Item 属性 中获取它。
顺便说一下,使用 loadedTimeRanges[0].rangeValue.duration 不是计算总持续时间的正确方法,因为它每秒更新一次该值,直到未加载整个数据。对于较短的数据,它有时可以正常工作,因为它一次加载整个数据,当您使用 loadedtimeinranges 时。rangeValue.duration 属性 它会为您提供正确的结果,但对于较大的数据,这不是正确的解决方案。
如果您想查看您的问题是否与元数据有关,只需流式传输任何在线 mp3 文件并检查问题是否仍然存在,它应该可以很好地流式传输任何下载的文件或任何远程文件,如果它是有元数据集,应该给你正确的持续时间。希望这有帮助!!
AVPlayer.currentItem
的 duration
属性 返回 NAN
总是与 Twilio 音频 urls .但是,音频播放正常。
我能够获得除 Twilio 之外的所有其他音频 url 的 duration
属性。
示例 url 以测试此问题:
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>
GET /2010-04-01/Accounts/ACda6f1.../Recordings/RE557ce644e5ab84fa21cc21112e22c485.xml
回复:
HEADERS
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Accept, Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since
Access-Control-Allow-Methods: GET, POST, DELETE, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: ETag
Connection: keep-alive
Content-Length: 550
Content-Type: application/xml
Date: Tue, 08 Sep 2015 06:50:43 GMT
Etag: b1512f..
Last-Modified: Fri, 04 Sep 2015 04:19:20 +0000
Strict-Transport-Security: max-age=15768000
X-Powered-By: AT-5000
X-Shenanigans: none
BODY
view raw
<?xml version='1.0' encoding='UTF-8'?>
<TwilioResponse>
<Recording>
<Sid>RE…</Sid>
<AccountSid>ACda6f1... </AccountSid>
<CallSid>CA3..</CallSid>
<Duration>37</Duration>
<DateCreated>Fri, 04 Sep 2015 04:19:20 +0000</DateCreated>
<ApiVersion>2010-04-01</ApiVersion>
<DateUpdated>Fri, 04 Sep 2015 04:19:20 +0000</DateUpdated>
<Price/>
<Uri>/2010-04-01/Accounts/ACda6f1.../Recordings/RE557ce644e5ab84fa21cc21112e22c485.xml</Uri>
</Recording>
</TwilioResponse>
我遇到了同样的问题,但我可以通过执行以下操作获得持续时间:
let timeRange = self.avPlayer.currentItem.loadedTimeRanges[0].CMTimeRangeValue
let duration = CMTimeGetSeconds(timeRange.duration)
希望对您有所帮助!
嘿,我只是在做,事实上,当我使用 .duration
以及使用建议的 @inga[=17 时,使用 mp3 扩展名从 twilio 录制对我来说并没有用=]loadedTimeRanges[0].rangeValue.duration
那returns时间错了。但是我改为 twilio path without .mp3 extensio
n 并且它开始工作
if let playerItem = player.currentItem, playerItem.status == AVPlayerItemStatus.readyToPlay {
let durationTime = playerItem.duration
//playerItem.loadedTimeRanges[0].timeRangeValue.duration
}
终于找到原因了。实际上,我试图从中获取持续时间的歌曲没有为其设置元数据,这就是它给出 Nan 持续时间的原因。 AVPlayerItem 使用 keys 方法使用 load-asynchronous 异步加载数据,当数据存在时,您将在 avplayer 的当前 Item 属性 中获取它。
顺便说一下,使用 loadedTimeRanges[0].rangeValue.duration 不是计算总持续时间的正确方法,因为它每秒更新一次该值,直到未加载整个数据。对于较短的数据,它有时可以正常工作,因为它一次加载整个数据,当您使用 loadedtimeinranges 时。rangeValue.duration 属性 它会为您提供正确的结果,但对于较大的数据,这不是正确的解决方案。
如果您想查看您的问题是否与元数据有关,只需流式传输任何在线 mp3 文件并检查问题是否仍然存在,它应该可以很好地流式传输任何下载的文件或任何远程文件,如果它是有元数据集,应该给你正确的持续时间。希望这有帮助!!