我正在制作无线电流媒体应用程序,我的应用程序运行正常。我的屏幕上有两个用于播放的按钮,另一个用于暂停,还有一个标签,用于指示播放器的状态。我没有问题,这个标签显示状态“播放”或“暂停”我的问题是,当我按下播放按钮时,有一个时间缓冲区正在收集信息,我无法想出一种方式来显示“缓冲...“播放器开始播放音频之前的标签。
这是Im用于流式传输电台的代码。
NSString *url = [NSString stringWithFormat:@"http://66.7.218:8816"];
player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:url]];
player.movieSourceType = MPMovieSourceTypeStreaming;
player.view.hidden = YES;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance]setActive:YES error:nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[player prepareToPlay];
[player play];
我使用的是一个名为changeStatus的函数,每秒调用一次该函数来识别播放器的状态。
-(void)changeStatus
{
if (player.loadState == MPMovieLoadStateUnknown) {
status.text = @"Buffering...";
}
if(player.playbackState == MPMoviePlaybackStatePlaying)
{
status.text = @"Playing.";
}
if(player.playbackState == MPMoviePlaybackStatePaused)
{
status.text = @"Paused";
}
}
我真的需要解决这个问题,我已尽力解决这个问题。希望你能帮我!提前谢谢。
答案 0 :(得分:0)
我实现了解决问题的方法。缺少的部分是if子句,它只在玩家准备玩的时候才会开始播放信号。没有它,播放器在缓冲区完全加载之前开始播放,因此它不播放音频。这就是我的Play标签立即显示而不是缓冲的原因。
NSString *url = [NSString stringWithFormat:@"http://66.7.218:8816"];
player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:url]];
player.movieSourceType = MPMovieSourceTypeStreaming;
player.view.hidden = YES;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance]setActive:YES error:nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[player prepareToPlay];
if(player.isPreparedToPlay)
{
[player play];
}
另外,MPMoviePlaybackStateInterrupted指的是在执行流时的缓冲过程。因此,如果您想在缓冲过程中发生某些事情,请参阅此方法。
-(void)changeStatus
{
if(player.playbackState == MPMoviePlaybackStatePlaying)
{
status.text = @"Playing.";
}
if(player.playbackState == MPMoviePlaybackStateInterrupted)
{
status.text = @"Buffering...";
}
}
非常感谢那帮我解决这个问题的用户。
答案 1 :(得分:0)
实际上有一个名为
的通知MPMediaPlaybackIsPreparedToPlayDidChangeNotification
观察员在准备好比赛后会收到通知。它或多或少具有相同的效果,但具有不同的机制。