簡體   English   中英

預加載AVPlayer流媒體視頻

[英]Pre-load an AVPlayer streaming video

我正在嘗試使用AVPlayer播放流媒體視頻而沒有任何網絡延遲。 幸運的是,我們的應用程序在播放視頻的屏幕之前有一個進度屏幕。 我希望在這個進度屏幕上使用一些時間來預加載視頻,以便在下一個屏幕上無延遲地播放。

我提出的最有前途的方法是使用AVQueuePlayer播放2個視頻,第一個是我在屏幕上播放的視頻(所以你看不到它)並且是靜音的,所以你不要聽到。 從我在SO AVQueuePlayer上看到的內容,當第n個視頻接近完成時,緩沖第n + 1個視頻。

這是我的代碼:

    NSString *blackVideoPath = [[NSBundle mainBundle] pathForResource:@"black10-counting" ofType:@"MOV"];
    AVPlayerItem *blackVideoItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:blackVideoPath]];

    AVPlayerItem *realVideoItem = [AVPlayerItem playerItemWithURL:_videoWithEffectsURL];

    NSArray *theItems = [NSArray arrayWithObjects:blackVideoItem, realVideoItem, nil];
    AVQueuePlayer *theQueuePlayer = [AVQueuePlayer queuePlayerWithItems:theItems];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playerItemDidReachEnd:)
                                                 name:AVPlayerItemDidPlayToEndTimeNotification
                                               object:[theItems firstObject]];


    AVPlayerLayer* playerLayer = [AVPlayerLayer playerLayerWithPlayer:theQueuePlayer];

    playerLayer.frame = self.view.bounds;
    [self.view.layer addSublayer:playerLayer];

    [theQueuePlayer play];

這確實播放了我的第一個視頻(用於調試我有一個帶有計數音軌的視頻)但是當到達結尾並前進到下一個屏幕(在playerItemDidReachEnd中)時,我的真實視頻不能立即播放。

為了確保我的網址是正確的,我在列表中顛倒了blackVideoItem和realVideoItem,我確實聽到了我的“真實”視頻的配樂。

我搜索了很多,似乎沒有辦法播放流媒體視頻沒有延遲。 我愛是錯的。

您可以在沒有AVQueuePlayer的情況下執行此操作。

  • 盡早使用遠程資產創建AVPlayer。
  • 觀察AVPlayerItem(播放緩沖區等)以確保它已緩沖足夠的數據以便在開始時流暢播放。 (參見: 預加載視頻,立即播放
  • 顯示進度屏幕。
  • 播放器項目准備就緒后,刪除進度屏幕

根據網絡連接的不同,您可能無法在整個過程中體驗流暢的播放,但監控播放器項目應該讓您在播放器緩沖時顯示一些UI。

暫無
暫無

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

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