使用 Core Audio 找出流的估计持续时间

发布于 2024-08-26 23:11:50 字数 443 浏览 3 评论 0原文

我使用自定义馈送代码通过网络流式传输 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

递刀给你 2024-09-02 23:11:50

如果您知道 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文