3

我有一个 ios 应用程序,它通过流媒体播放音乐并使用 mattgallagher AudioStreamer 库它不显示真正的播放时间并且永远不会在 0 秒时停止播放......

有谁知道为什么会这样??

非常感谢!

4

2 回答 2

5

我经历过类似的事情。看看AudioStreamer.m中的progress方法

- (double)progress
{
    @synchronized(self)
    {
        if (sampleRate > 0) && ![self isFinishing])
        {
            if (state != AS_PLAYING && state != AS_PAUSED && state != AS_BUFFERING)
            {
                return lastProgress;
            }
    ...
        }
    }

    return lastProgress;
}

现在,无法正确显示进度的原因在于两个 if 语句。当您AudioStreamer快要完成时(可能是在加载所有数据时),它isFinishing变为 true,这使得它返回缓存的进度值。此外,流媒体状态变为AS_STOPPING,这使得第二个 if 语句返回lastProgress. 您真正想要的是在流媒体停止之前更新进度。

我对代码的以下修改做到了这一点,它似乎工作正常。然而,鉴于 AudioStreamer 的一般质量以及它是由 Matt Gallagher 开发的事实,这些 if 语句可能是有原因的。到目前为止,我修改后的代码没有遇到任何崩溃或类似情况,但您应该在您的应用程序中对其进行彻底测试。请注意,一旦流媒体完成,我不再查询进度。如果你这样做,请测试它是否有效:)

- (double)progress
{
    @synchronized(self)
    {
        if (sampleRate > 0))
        {
            if (state != AS_PLAYING && state != AS_PAUSED && state != AS_BUFFERING && state != AS_STOPPING)
            {
                return lastProgress;
            }
    ...
        }
    }

    return lastProgress;
}
于 2011-10-31T10:58:25.200 回答
0

该问题已解决:

https://github.com/mattgallagher/AudioStreamer/issues/39

于 2014-04-07T11:05:54.277 回答