【问题标题】:Using audioqueue to stream audio. How to get the length of the audio file before playback ends?使用音频队列流式传输音频。如何在播放结束前获取音频文件的长度?
【发布时间】:2009-08-24 21:43:22
【问题描述】:

已经完成了播放器的实现。我想实现进度条。但我想知道这是否可能,因为我们正在播放音乐。除非事先向我们提供歌曲的长度。

拜托,我需要你的建议。

【问题讨论】:

    标签: iphone streaming audioqueueservices


    【解决方案1】:

    除非事先为您提供音频文件的大小(或时间长度),否则您无法设置进度条的范围(没有最大值)。

    【讨论】:

      【解决方案2】:

      实际上,我找到了一种方法,并且成功了。您计算歌曲的每个数据包的帧数,以及平均数据包的大小(以字节为单位)。使用 NSHTTPConnection 获取文件大小并使用这个公式:

      totalFrames = (fileSize * framesPerPacket / 平均数据包大小)

      当你有总帧数时,只需将其除以比特率,然后你就得到了 总时间!!

      【讨论】:

      • 这有点不准确,因为它没有考虑元数据、文件头等占用的空间。差异应该很小,但理想情况下会有一种完全消除它的方法。不幸的是,应该提供有用结果的 API (AudioFileStreamGetProperty (stream, kAudioFileStreamProperty_AudioDataPacketCount, ...)) 似乎从来没有真正提供有用的结果,所以除非我还没有找到另一种方法,否则这看起来是最好的选择。
      • 当然,总是有kAudioFileStreamProperty_AudioDataByteCount,如果存在应该是准确的......
      猜你喜欢
      • 2012-03-08
      • 1970-01-01
      • 2016-06-29
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      相关资源
      最近更新 更多