私のアプリケーションでは、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) {
// ...