0

私のアプリケーションでは、AVPlayer を使用して、HCYoutubeParser ライブラリを使用して YouTube ビデオを再生しています。

私の質問は、新しいView Controllerをロードしても、再生されたビデオファイルの音が聞こえるということです。

次のビューを 2 つの異なる方法で読み込もうとしましたが、結果は同じでした。

方法 1

FourthViewController *fourthViewCont = [self.storyboard instantiateViewControllerWithIdentifier:@"FourthViewControllerID"];
[self.navigationController pushViewController:fourthViewCont animated:YES];

方法 2

ストーリーボード セグエの使用

viewDidDisappear メソッド内に次のコードを追加することで、この問題を取り除くことができます

[avPlayerLayer removeFromSuperlayer];
avPlayerLayer = nil;

しかし、私が知る必要があるのは、ビューが消えたときでも、なぜ avPlayerLayer インスタンスが参照を持っているのですか?

以下のようにプレーヤーレイヤーを追加しています

[_playerContainerView.layer addSublayer:avPlayerLayer];

_playerContainerView はメインの UIView ではなく、メインの UIView 内にある UIView です。

以下のように、クラス拡張で AVPlayerLayer 変数を宣言しました

@interface PlayerViewController ()
{
    AVPlayerItem *avPlayerItem;
    AVPlayerLayer *avPlayerLayer;
}

また、AVPlayer とコンテナ ビューのリファレンスが弱い

@property (weak, nonatomic) AVPlayer *avPlayer;
@property (weak, nonatomic) IBOutlet UIView *playerContainerView;

PlayerViewController から前のビューに戻ると、プレーヤーはバックグラウンド オーディオ サウンドなしで正しく停止します。

誰でもこの状況を説明できますか?

編集 :

これは、AVPlayerとAVPlayerLayerを初期化する方法です

_avPlayer = [AVPlayer playerWithPlayerItem:avPlayerItem];
avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:_avPlayer];

これらの初期化の後、完了ブロック内にサブレイヤーとこれらすべてのコードを追加しました

[HCYoutubeParser h264videosWithYoutubeURL:youtubeUrl completeBlock:^(NSDictionary *videoDictionary, NSError *error) {
// ...
4

0 に答える 0