11 12 let avPlayer = AVPlayer(url:movieURL as URL) 13 let avPlayerLayer = AVPlayerLayer(player:avPlayer ) 14 avPlayerLayer.frame = self.view.bounds 15 avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill 16 self.view.layer.addSublayer(avPlayerLayer) 17 18 avPlayer.play() 19 } 20 }
AVKit进行视频播放时我们整理一下我们需要的大致都在这几个类或者协议当中: 1、AVPlayerItem (视频要播放的元素) 2、AVPlayerLayer 2、AVPlayerLayer 它主要负责的就是视频的显示,继承自CALayer,其实你可以把它理解成我们的View。 这三者就基本含括了一个基本的视频播,基于着三者我们总结一下播放一个视频的基本的过程: 首先,得到视频的URL 根据URL创建AVPlayerItem 把AVPlayerItem 提供给 AVPlayer AVPlayerLayer MovieURL]]; self.avPlayer = [[AVPlayer alloc]initWithPlayerItem:self.avPlayerItem]; self.avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:self.avPlayer]; self.avPlayerLayer.frame = CGRectMake(10
三、AVPlayerViewController AVPlayerViewController是对AVFoundation中的AVPlayer与AVPlayerLayer的封装,它是一个封装好的视图控制器 (nullable UITraitCollection *)traitCollection; //构造方法 - (nullable instancetype)initWithPlayerLayer:(AVPlayerLayer *)playerLayer; //播放器视图 @property (nonatomic, readonly) AVPlayerLayer *playerLayer; //代理 @property (nonatomic
自动判断文件路径和网址路径 @property (nonatomic,strong) AVPlayer *player; //播放类 @property (nonatomic,strong) AVPlayerLayer 添加项.png 使用AVPlayer播放视频就必须用到AVPlayerlayer用来显示播放视图。 //加载显示层 - (AVPlayerLayer*)playerlayer { if (! _playerlayer) { _playerlayer = [AVPlayerLayer playerLayerWithPlayer:self.player]; _playerlayer.bounds
Writing a Custom Video View With AVPlayerLayer 您需要熟悉的第一个类是 AVPlayerLayer。 现在您可以将 AVPlayerLayer 融入其中。 UIView 只是 CALayer 的包装器。 它提供触摸处理和辅助功能,但不是子类。 相反,它拥有并管理底层图层属性。 : AnyClass { return AVPlayerLayer.self } 由于您将播放器层包装在视图中,因此您需要公开player属性。 为此,请添加以下计算属性,这样您就无需一直投射您的图层子类: var playerLayer: AVPlayerLayer { return layer as! AVPlayerLayer } 为了能够在 SwiftUI 中使用此视图,您需要使用 UIViewRepresentable 创建一个包装器。
playerItemWithAsset:movieAsset]; AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem]; AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player]; playerLayer.frame = self.view.layer.bounds
self.player.delegate = nil; self.player = nil; } } 关于音频的播放 #播放一个视屏 self.playerLayer = [[AVPlayerLayer resultView.width-Scale_X(20), _resultView.height-Scale_X(20)); [_resultView.layer addSublayer:self.playerLayer]; AVPlayerLayer YES completion:NULL]; } 关于视频的播放 #import <AVFoundation/AVFoundation.h> @property (nonatomic,strong)AVPlayerLayer *playerLayer;//播放器layer,用于录制完视频后播放视频 //视频 self.playerLayer = [[AVPlayerLayer alloc]init]; self.playerLayer.frame
单独使用AVPlayer是无法显示视频的,要把它添加到AVPlayerLayer里才行。 AVPlayerLayerView是自定义的UIView,用于AVPlayer播放,其layerClass是AVPlayerLayer: // AVPlayer m_player = [AVPlayer AVPlayerLayerView alloc] initWithFrame:self.bounds]; [self addSubview:m_playerView]; // 把AVPlayer添加到AVPlayerLayer [(AVPlayerLayer*)[m_playerView layer] setPlayer:m_player]; // 观察AVPlayerItem播放结束的通知 [[NSNotificationCenter
但是AVPlayer本身是不能直接显示视频的,必须创建一个播放层AVPlayerLayer并将其添加到其他的视图Layer上才能显示。 1. AVURLAsset对象 AVPlayerItem:一个媒体资源管理对象,用于管理视频的基本信息和状态,一个AVPlayerItem对应一个视频资源 AVPlayer:负责视频播放、暂停、时间控制等操作 AVPlayerLayer self.currentPlayerItem = playerItem; self.player = [[AVPlayer alloc] initWithPlayerItem:playerItem]; //第四步:创建显示视频的AVPlayerLayer AVLayerVideoGravityResizeAspectFill等比例铺满,宽或高有可能出屏幕 AVLayerVideoGravityResizeAspect 等比例 默认 AVLayerVideoGravityResize 完全适应宽高 */ AVPlayerLayer *avLayer = [AVPlayerLayer playerLayerWithPlayer:self.player]; avLayer.videoGravity = AVLayerVideoGravityResizeAspect
第二部分,围绕AVPlayerLayer展开,涉及网络视频边播放边下载、UITableView控制多个视频源播放。
创建一个视频播放图层 //创建一个视频播放图层 AVPlayerLayer * playLayer = [AVPlayerLayer playerLayerWithPlayer:player
AVFoundation.AVPlayerItemMediaDataCollector import AVFoundation.AVPlayerItemOutput import AVFoundation.AVPlayerItemTrack import AVFoundation.AVPlayerLayer AVPlayerItemMediaDataCollector音视频播放器元素媒体数据收集器 AVPlayerItemOutput播放器元素输出类 AVPlayerItemTrack播放器元素的分轨 AVPlayerLayer
本次演讲中会探索 AVPlayer 和相关 AVPlayerLayer 接口的使用。 Core Video 是一个为数字视频提供管道模型的框架。它通过将流程划分为离散的步骤来简化处理视频的方式。 对于不同的应用场景,我们可以选择不同的框架来实现: 简单的播放 HDR 视频,可以使用 AVKit 和 AVFoundation; 在指定的 layer 上播放 HDR 视频,可以使用 AVPlayerLayer AVKit 和 AVFoundation 如果需要简单的播放 HDR 视频媒体渲染到 EDR,可以使用 AVPlayerViewController 渲染 AVPlayer,也可以使用 AVPlayer 和 AVPlayerLayer AVPlayer 的用法 示例代码如下: AVPlayerViewController 使用示例 AVPlayer+AVPlayerLayer 使用示例 如果需要实现实时视频效果,比如: 特效: Color
1.AVPlayer (负责视频操作,例如播放,暂停,声音的大小,跳到指定的时间) 2.AVPlayerLayer(负责视频的可视化区域,视频的播放模式,注意是CALayer,不能接手触摸) 3.AVPlayItem
{ didSet { playerLayer = AVPlayerLayer(player: player) } } private var playerLayer : AVPlayerLayer? { super.viewDidLoad() guard let playerLayer = playerLayer else { fatalError("Missing AVPlayerLayer
初始化AVPlayer和AVPlayerLayer,并将AVPlayerLayer添加到imageView的layer上,在layoutSubviews中设置playerLayer的frame // 初始化player 和playerLayer self.player = [[AVPlayer alloc]init]; self.playerLayer = [AVPlayerLayer playerLayerWithPlayer
AVFoundation.AVPlayerItemMediaDataCollector import AVFoundation.AVPlayerItemOutput import AVFoundation.AVPlayerItemTrack import AVFoundation.AVPlayerLayer
这个类只要初始化一次就可以了) @property (nonatomic,strong) AVPlayer *avPlayer;//播放器对象 @property (nonatomic,strong) AVPlayerLayer ]; self.avPlayer = [AVPlayer playerWithPlayerItem:self.playerItem]; self.playerLayer = [AVPlayerLayer
概念 AVPlayer 视频播放类,本身不显示视频,需创建一个AVPlayerLayer层,添加到视图 AVAssetTrack 资源轨道,包括音频轨道和视频轨道 AVAsset 媒体信息 AVURLAsset
strong) NSString *liveId;@property (nonatomic, strong) AVPlayer *player;@property (nonatomic, strong) AVPlayerLayer / 视频播放器 self.player = [AVPlayer playerWithURL:[NSURL URLWithString:@""]]; self.playerLayer = [AVPlayerLayer