我通过在我的应用程序中缓冲来播放一首歌。
我想播放另一首歌(点击按钮)。
但它一起播放两首歌。即使我试图阻止它,它也不会停止第一首歌。
我提到了matt gallagher tutorial,这是我的代码:
[streamer stop];
- (void)stop
{
@synchronized(self)
{
if (state == AS_WAITING_FOR_DATA || state == AS_STARTING_FILE_THREAD)
return;
if (audioQueue &&
(state == AS_PLAYING || state == AS_PAUSED ||
state == AS_BUFFERING || state == AS_WAITING_FOR_QUEUE_TO_START))
{
self.state = AS_STOPPING;
stopReason = AS_STOPPING_USER_ACTION;
err = AudioQueueStop(audioQueue, true);
if (err)
{
[self failWithErrorCode:AS_AUDIO_QUEUE_STOP_FAILED];
return;
}
}
else if (state != AS_INITIALIZED)
{
self.state = AS_STOPPED;
stopReason = AS_STOPPING_USER_ACTION;
}
seekWasRequested = NO;
}
while (state != AS_INITIALIZED)
{
[NSThread sleepForTimeInterval:0.1];
}
}
这个streamer
调用了缓冲的stop方法。
可能是什么问题?
答案 0 :(得分:1)
我为你创建了一个可以在你开始新流时杀死旧玩家的功能:
- (void)playURL:(NSURL*)url {
if (streamer == nil) {
streamer = [[AudioStreamer alloc] initWithURL:url];
return;
}
if ([streamer isPlaying]) {
[streamer stop];
[streamer release];
}
streamer = [[AudioStreamer alloc] initWithURL:url];
}
在viewcontroller中安装它并使用它而不是原始 [[AudioStreamer alloc] initWithURL:url]