14

ビデオ再生用に AVPlayer からカスタム プレーヤーを作成します。Apple docs によると、ビデオレイヤーを設定します。

    self.player = [IPLPlayer new];
    self.player.playerLayer = (AVPlayerLayer *)self.playerView.layer;

self.playerView は、これらのドキュメントの通常のクラスです。

    @implementation PlayerView

+ (Class) layerClass {
    return [AVPlayerLayer class];
}

- (AVPlayer *)player {
    return [(AVPlayerLayer *)[self layer] player];
}

- (void)setPlayer:(AVPlayer *) player {
    [(AVPlayerLayer *) [self layer] setPlayer:player];
}

問題は、アプリ (ホーム ボタン) を閉じるか、画面をブロックすると、ビデオの再生が停止し、オーディオ再生のみを再開すると、画面上の画像はブロック画面の前のもののままです。完全に静的であり、変更フレームに注意してください。

画面がブロックされた後にビデオの再生を再開する方法は?

通知を登録する必要があるようです。アプリがアクティブになったら、ビデオ レイヤーを再開します。

    -(void)registerNotification
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(willEnterBackground)
                                                 name:UIApplicationWillResignActiveNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didEnterForeground)
                                                 name:UIApplicationDidBecomeActiveNotification object:nil];
}

-(void)unregisterNotification
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}


-(void)willEnterBackground
{
    NSLog(@"willEnterBackground");
    [self.playerView willEnterBackground];
}

-(void)didEnterForeground
{
    NSLog(@"didEnterForeground");
    [self.playerView didEnterForeground];
}
4

5 に答える 5

3

も使用してくださいUIApplicationWillEnterForegroundNotification。これにより、アプリがアクティブになり、ユーザーに表示されることがわかります。

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(appEnteredForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];
于 2013-05-14T23:44:16.373 に答える
2

秘訣は、アプリがバックグラウンドに入ったときにすべてのビデオ レイヤーをプレーヤーから切り離し、アプリ再びアクティブになったときにそれらを再接続することです。

したがって、-applicationDidEnterBackground:結果として生じるメカニズムをトリガーする必要があります

avPlayerLayer.player = nil;

そして、あなた-applicationDidBecomeActive:のようにプレーヤーを再接続します

avPlayerLayer.player = self.avPlayer;

Appleのこの Tech Note ( QA1668 ) も参照してください。

于 2014-04-02T17:50:32.363 に答える