使用 Core Audio 找出流的估计持续时间
我使用自定义馈送代码通过网络流式传输 MP3,而不是使用 AudioFileStreamOpen
等 API 的 AVAudioPlayer
(仅适用于 URL)。
有什么方法可以估计流的长度吗?我知道我可以使用以下方法获得“已过”属性:
if(AudioQueueGetCurrentTime(queue.audioQueue, NULL, &t, &b) < 0)
return 0;
return t.mSampleTime / dataFormat.mSampleRate;
但是创建进度条的总持续时间又如何呢?这可能吗?
PS 澄清 - 我确实知道 MP3 文件的实际大小,不知道是否可以使用...我什至会选择只给我一个进度条的解决方案,而不是实际的播放时间/持续时间。
I am streaming a MP3 over network using custom feeding code, not AVAudioPlayer
(which only works with URLs) using APIs like AudioFileStreamOpen
and etc.
Is there any way to estimate a length of the stream? I know that I can get a 'elapsed' property using:
if(AudioQueueGetCurrentTime(queue.audioQueue, NULL, &t, &b) < 0)
return 0;
return t.mSampleTime / dataFormat.mSampleRate;
But what about total duration to create a progress bar? Is that possible?
P.S. Clarification - I do know the actual size of the MP3 file, don't know if that can be used... I'll even settle for solution that just gives me a progress bar, not the actual time of play/duration.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您知道 MP3 文件的总大小,则可以计算每秒的位数,从而计算流的持续时间。如果是 VBR,您可能需要对几个 MPEG 帧进行平均。对于 CBR,您可以简单地使用一个数据包的比特率。
If you know the total size of the MP3 file, you can calculate the bits per second, and therefore calculate the duration of the stream. If it's VBR, you'll probably have to average several MPEG frames. For CBR, you can simply use the bitrate of one packet.