繁体   English   中英

AVPlayer持续时间为NAN与Twilio

[英]AVPlayer Duration is NAN with Twilio

AVPlayer.currentItemduration属性始终使用Twilio音频URL返回NAN 但是,音频播放正常。

我能够获得除Twilio之外的所有其他音频网址的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>

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)

希望这可以帮助!

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

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

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

嘿,我只是这样做,事实上,当我使用.duration时,使用mp3扩展程序从twilio录制的内容并不适合我,当使用建议的@inga loadedTimeRanges[0].rangeValue.duration它会返回错误的时间。 但是我改为twilio path without .mp3 extensio n它开始工作

if let playerItem = player.currentItem, playerItem.status == AVPlayerItemStatus.readyToPlay {
    let durationTime = playerItem.duration 
   //playerItem.loadedTimeRanges[0].timeRangeValue.duration
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM