在 UITableViewCell 中播放视频的最佳方式是什么
What is the best way to play video in UITableViewCell
我正在尝试根据单元格位置在 UITableViewCell 中制作自动播放视频。
我正在使用 AVPlayer
这是我的代码:
__weak typeof(self)this = self;
NSString* videoPath = @"http://test.com/test.mp4";
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:videoPath] options:nil];
NSArray* keys = [NSArray arrayWithObjects:@"playable",nil];
[asset loadValuesAsynchronouslyForKeys:keys completionHandler:^(){
AVPlayerItem* playerItem = [AVPlayerItem playerItemWithAsset:asset];
this.avPlayer = [AVPlayer playerWithPlayerItem:playerItem];
this.avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:this.avPlayer];
this.avPlayerLayer.frame = _videoContent.frame;
dispatch_async(dispatch_get_main_queue(),^{
[this.videoContent.layer addSublayer:this.avPlayerLayer];
[this.avPlayer play];
});
}];
但是当我滚动 table 时,我的 UITableView 被冻结了。
我认为有很多耗时的工作,但最重要的是
[this.avPlayer play]
所以我的问题是 AVPlayer 是这种情况下的最佳方式吗?
有什么方法可以提高性能吗?
您确定创建 AVPlayerItem
、AVPlayer
和 AVPlayerLayer
都可以在主线程之外执行吗?您可能想尝试将它们放在主队列上调度的块中。
使用下面的 link ,这适合你的问题。
我正在尝试根据单元格位置在 UITableViewCell 中制作自动播放视频。
我正在使用 AVPlayer
这是我的代码:
__weak typeof(self)this = self;
NSString* videoPath = @"http://test.com/test.mp4";
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:videoPath] options:nil];
NSArray* keys = [NSArray arrayWithObjects:@"playable",nil];
[asset loadValuesAsynchronouslyForKeys:keys completionHandler:^(){
AVPlayerItem* playerItem = [AVPlayerItem playerItemWithAsset:asset];
this.avPlayer = [AVPlayer playerWithPlayerItem:playerItem];
this.avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:this.avPlayer];
this.avPlayerLayer.frame = _videoContent.frame;
dispatch_async(dispatch_get_main_queue(),^{
[this.videoContent.layer addSublayer:this.avPlayerLayer];
[this.avPlayer play];
});
}];
但是当我滚动 table 时,我的 UITableView 被冻结了。 我认为有很多耗时的工作,但最重要的是
[this.avPlayer play]
所以我的问题是 AVPlayer 是这种情况下的最佳方式吗? 有什么方法可以提高性能吗?
您确定创建 AVPlayerItem
、AVPlayer
和 AVPlayerLayer
都可以在主线程之外执行吗?您可能想尝试将它们放在主队列上调度的块中。
使用下面的 link ,这适合你的问题。