AudioStreamer没有显示正确的播放时间

时间:2011-10-31 10:17:08

标签: objective-c ios audiostreamer

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

有谁知道为什么会这样?

非常感谢!

2 个答案:

答案 0 :(得分:5)

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

- (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;
}

答案 1 :(得分:0)