yur*_*.ku 10 objective-c avfoundation ios avqueueplayer
我AVQueuePlayer用来播放从URL加载的一系列电影.
我尝试使用AVPlayerItems我需要播放的所有数组来初始化播放器实例.
player = [[AVQueuePlayer queuePlayerWithItems:playerItemsArray]
Run Code Online (Sandbox Code Playgroud)
但在这种情况下AVQueuePlayer,AVPlayerItem在开始播放之前加载每个初始部分.它导致令人沮丧的冻结,应用程序几秒钟内没有响应.
有可能只添加第一个AVPLayerItem到玩家的队列,观察它的状态并且只在第一个到达结束时在队列中添加第二个项目,但是在这种情况下,由于初始化和缓冲第二个项目而导致两个项目的回放之间存在间隙AVPlayerItem.
有没有办法在没有冻结的情况下组织几个视频的无间隙播放?
我应该为此目的使用其他玩家吗?
提前致谢.
yur*_*.ku 17
找到解决方案.
当添加新AVPlayerItem的队列中的AVQueuePlayer玩家将同步等待玩家项目的初始部分将被缓冲.
因此,在这种情况下,播放器项应该异步缓冲,然后可以将其添加到队列中.
它可以使用[AVURLAsset loadValuesAsynchronouslyForKeys: completionHandler:]
例如:
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:url options:nil];
NSArray *keys = [NSArray arrayWithObject:@"playable"];
[asset loadValuesAsynchronouslyForKeys:keys completionHandler:^()
{
dispatch_async(dispatch_get_main_queue(), ^
{
AVPlayerItem *playerItem = [[[AVPlayerItem alloc] initWithAsset:asset] autorelease];
[player insertItem:playerItem afterItem:nil];
});
}];
Run Code Online (Sandbox Code Playgroud)
使用AVQueuePlayer的此解决方案队列可以填充没有任何间隙和冻结的项目.
| 归档时间: |
|
| 查看次数: |
9178 次 |
| 最近记录: |