簡體   English   中英

AVPlayerLayer和AVPlayer

[英]AVPlayerLayer and AVPlayer

我使用AVPlayerLayerAVPlayer在我的應用程序中構建了一個視頻播放器。

當選擇新視頻時,我使用以下方法:

//this to remove the current video
    if (avPlayerLayer) {
            [[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object:[audioPlayer currentItem]];
            [avPlayerLayer.player pause];
            [avPlayerLayer removeFromSuperlayer];
            avPlayerLayer = nil;
    }

//and this is to add a new one
    audioPlayer = [[AVPlayer alloc]initWithURL:[NSURL fileURLWithPath:fileName]];
    avPlayerLayer = [[AVPlayerLayer playerLayerWithPlayer:audioPlayer] retain];
    [avPlayerLayer setFrame:self.view.bounds];

    CGRect frame = avPlayerLayer.frame;
    [avPlayerLayer setFrame:CGRectMake(frame.origin.x, frame.origin.y - 30, frame.size.width, frame.size.height)];

    [[self.view layer] addSublayer:avPlayerLayer];

    [audioPlayer play];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(finishPlayingSong)
                                                     name:AVPlayerItemDidPlayToEndTimeNotification
                                                   object:[audioPlayer currentItem]];
    [audioPlayer release];

現在,有時候我執行此方法時,設備無法開始播放視頻(同時發生,而不是在同一視頻上播放)。 知道為什么會發生嗎? 我該如何處理?

編輯

我注意到播放5首歌曲后會發生這種情況。

您有內存泄漏。 每次您使用alloc: init:創建一個AVPlayer並將其分配給audioPlayer 這使其保留計數為1。然后創建一個AVPlayerLayer ,它再次增加其保留計數。

稍后,您釋放avPlayerLayer ,它會減少audioPlayer上的保留計數,但是它永遠不會回到零,因此永遠不會被釋放。

泄漏很嚴重,但是您也遇到了另一個問題。 iOS中的基礎架構限制為最多4個音頻/視頻渲染管道 創建第五個時,它無法獲取渲染管道,因此播放失敗。

要解決您的問題,請更正內存泄漏。

audioPlayer = [AVPlayer playerWithURL:[NSURL fileURLWithPath:fileName]];

使用playerWithURL:靜態工廠構造函數將隱式執行autorelease:減少該對象的保留計數並避免泄漏。

確實沒有理由僅為了更改輸入而創建新的AVPlayer和AVPlayerLayer實例。 您真正需要的只是一個新的AVPlayerItem。 將其分配給當前的AVPlayer,然后繼續使用現有的AVPlayerLayer。

通常,要自定義MPMovie播放器,最好將AVPlayerLayer與AVPlayer一起使用。

通過使用此自定義播放器,您可以根據需要自定義播放器控件(播放/暫停,后退,前進,停止和音量等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM