0

ラジオ ストリーミング アプリケーションを作成しています。私のアプリは完全に動作しています。画面には再生用と一時停止用の 2 つのボタンがあり、プレーヤーの状態を示すラベルもあります。このラベルに「再生中」または「一時停止」の状態を表示しても問題ありません。私の問題は、再生ボタンを押すと、バッファが情報を収集しているときに「」を表示する方法がわからないことです。プレーヤーがオーディオのストリーミングを開始する前に、「バッファリング...」というラベルが表示されます。

これは、ラジオ局のストリーミングに使用するコードです。

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

}

私は本当にこの問題を解決する必要があり、私はそれを解決するためにできる限りのことを試みました. あなたが私を助けてくれることを願っています!前もって感謝します。

4

2 に答える 2

0

問題を解決することができました。欠落していた部分は、プレイヤーがプレイする準備ができたときにのみプレイを開始する合図を与える if 句です。そうしないと、バッファが完全にロードされる前にプレーヤーが再生を開始するため、オーディオは再生されません。それが、バッファリング ラベルではなく、再生中ラベルがすぐに表示された理由です。

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...";
            }

    }

これを解決するのを手伝ってくれたユーザーThat Guyに感謝します。

于 2012-11-20T03:21:28.440 に答える
0

実はお知らせがあります

MPMediaPlaybackIsPreparedToPlayDidChangeNotification

オブザーバーは、プレイする準備ができた後に通知を受け取ります。ほぼ同じ効果ですが、メカニズムが異なります。

于 2013-07-17T02:24:10.253 に答える