gpt4 book ai didi

ios - 预加载 AVPlayer 流式视频

转载 作者:可可西里 更新时间:2023-11-01 05:02:18 40 4
gpt4 key购买 nike

我正在尝试使用 AVPlayer 播放流媒体视频而没有任何网络延迟。幸运的是,我们的应用程序在播放视频的屏幕之前有一个进度屏幕。我希望利用这个进度屏幕上的一些时间来预加载视频,以便它在下一个屏幕上播放时不会延迟。

我想出的最有前途的方法是使用 AVQueuePlayer 播放 2 个视频,第一个是我在屏幕外播放的视频(所以你看不到它)并且是静音的,所以你别听根据我在 SO 上阅读的内容,当第 n 个视频接近完成时,AVQueuePlayer 缓冲第 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 中)我的真实视频不会立即播放。

为了确保我的 URL 正确,我在列表中颠倒了 blackVideoItem 和 realVideoItem,我确实听到了我“真实”视频的配乐。

我搜索了很多,似乎没有一种方法可以毫不延迟地播放流媒体视频。我宁愿错了。

最佳答案

您可以在没有 AVQueuePlayer 的情况下执行此操作。

  • 尽早使用远程 Assets 创建 AVPlayer。
  • 观察 AVPlayerItem(播放缓冲区等)以确保它缓冲了足够的数据以在开始时流畅地播放。 (参见:Preloading video to play without delay)
  • 显示您的进度屏幕。
  • 播放器项目准备就绪后,移除进度屏幕

根据网络连接,您可能无法体验到全程流畅的播放,但如果您的播放器正在缓冲,监控播放器项目应该可以让您显示一些 UI。

关于ios - 预加载 AVPlayer 流式视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26413348/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com