7

AVPlayerを使用して音楽ストリーミングアプリを作成しています。すべてが正常に機能している、音楽がバックグラウンドで再生され続けるなど。私の問題は、電話で接続損失をシミュレートする場合(セルラーデータをオフにし、ストリームが停止するのを待ってから元に戻す)、約2分かかることです。 3Gネットワ​​ークが存在する場合でもバッファを埋めるためのアプリ(その間にWebサーフィンをすることができます)。

すべてがシミュレーターで機能していますが、デバイスでは機能していません。2分待つと、適切なplaybackLikelyToKeepUp通知が届きます。それ以降はすべて問題ありませんが、再バッファリングは数秒で完了します。ルーターの帯域幅制御をオフにして低帯域幅をシミュレートする場合は問題ありませんが、セルラーデータをオフにして、その長さに戻すことでキャリアの変更をシミュレートする場合は問題ありません。

「playbackBufferEmpty」でbeginInterruptionを呼び出し、「playbackLikelyToKeepUp」でendInterruptionを呼び出しています。主な問題は、「playbackLikelyToKeepUp」の到着が遅すぎることです。

- (void)beginInterruption {
self.backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
}

- (void)endInterruptionWithFlags:(NSUInteger)flags {
    [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskIdentifier];
    self.backgroundTaskIdentifier = UIBackgroundTaskInvalid;
    if(self.interrupted) [self play];
    self.interrupted = NO;
}

何か案は?私はこの問題で一日を過ごし、すべてをグーグルで検索しましたが、行き詰まっています。前もって感謝します。

4

1 に答える 1

2

私は数ヶ月前に同じ状況に陥りました.私の結論は「playbackLikelyToKeepUpは信頼できない」です.

私の解決策は、バッファリングされた TimeRange を手動でチェックしています。

参考までに、リモート メディア再生用の AVPlayer クラスを作成しました - HysteriaPlayer 直接使用することも、.m ファイルを検索することもできます。

お役に立てれば。

于 2013-04-02T10:41:15.253 に答える