// 初始化player 和playerLayer self.player = [[AVPlayer alloc]init]; self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player]; // imageView上添加playerLayer [self.imageView.layer addSublayer:self.playerLayer];
-(void)layoutSubviews
{
[super layoutSubviews];
self.playerLayer.frame = self.imageView.bounds;
}
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/videos/minion_02.mp4"]; self.playerItem = [AVPlayerItem playerItemWithURL:url];
// 设置Slider [self.progressSlider setThumbImage:[UIImage imageNamed:@"thumbImage"] forState:UIControlStateNormal]; [self.progressSlider setMaximumTrackImage:[UIImage imageNamed:@"MaximumTrackImage"] forState:UIControlStateNormal]; [self.progressSlider setMinimumTrackImage:[UIImage imageNamed:@"MinimumTrackImage"] forState:UIControlStateNormal];
//imageView添加手势 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)]; [self.imageView addGestureRecognizer:tap];
// 隐藏遮盖版 self.coverView.hidden = YES; // 设置工具栏状态 self.toolView.alpha = 0; self.isShowToolView = NO; // 设置工具栏播放按钮状态 self.playOrPauseBtn.selected = NO;
- (IBAction)playOrPauseBigBtnClick:(UIButton *)sender {
// 隐藏中间播放按钮,工具栏播放按钮为选中状态
sender.hidden = YES;
self.playOrPauseBtn.selected = YES;
// 替换播放内容
[self.player replaceCurrentItemWithPlayerItem:self.playerItem];
[self.player play];
[self addProgressTimer];
}
/** toolView显示时开始计时,5s后隐藏toolView */
-(void)addShowTime
{
self.showTime = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(upDateToolView) userInfo:nil repeats:NO];
[[NSRunLoop mainRunLoop]addTimer:self.showTime forMode:NSRunLoopCommonModes];
}
/** 将toolView隐藏 */
-(void)upDateToolView
{
self.isShowToolView = !self.isShowToolView;
[UIView animateWithDuration:0.5 animations:^{
self.toolView.alpha = 0;
}];
}
/**移除定时器*/
-(void)removeShowTime
{
[self.showTime invalidate];
self.showTime = nil;
}
/** imageView的tap手势方法 */
-(void)tapAction:(UITapGestureRecognizer *)tap
{
// 当未播放状态,点击imageView等同于点击中间播放按钮,开始播放视频
if (self.player.status == AVPlayerStatusUnknown) {
[self playOrPauseBigBtnClick:self.playOrPauseBigBtn];
return;
}
// 记录底部工具栏显示或隐藏的状态
self.isShowToolView = !self.isShowToolView;
// 如果需要工具栏显示,添加动画显示
if (self.isShowToolView){
[UIView animateWithDuration:0.5 animations:^{
self.toolView.alpha = 1;
}];
// 工具栏的播放按钮为播放状态的时候,添加计时器,5秒钟之后工具栏隐藏
if (self.playOrPauseBtn.selected) {
[self addShowTime];
}
// 如果需要隐藏工具栏,移除计时器,并将工具栏隐藏
}else{
[self removeShowTime];
[UIView animateWithDuration:0.5 animations:^{
self.toolView.alpha = 0;
}];
}
}
/** slider定时器添加 */
-(void)addProgressTimer
{
self.progressTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateProgressInfo) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop]addTimer:self.progressTimer forMode:NSRunLoopCommonModes];
}
/** 移除slider定时器 */
-(void)removeProgressTimer
{
[self.progressTimer invalidate];
self.progressTimer = nil;
}
/** 更新slider和timeLabel */
- (void)updateProgressInfo
{
NSTimeInterval currentTime = CMTimeGetSeconds(self.player.currentTime);
NSTimeInterval durationTime = CMTimeGetSeconds(self.player.currentItem.duration);
self.timeLabel.text = [self timeToStringWithTimeInterval:currentTime];
self.allTimeLabel.text = [self timeToStringWithTimeInterval:durationTime];
self.progressSlider.value = CMTimeGetSeconds(self.player.currentTime) / CMTimeGetSeconds(self.player.currentItem.duration);
if (self.progressSlider.value == 1) {
[self removeProgressTimer];
self.coverView.hidden = NO;
}
}
/** 转换播放时间和总时间的方法 */
-(NSString *)timeToStringWithTimeInterval:(NSTimeInterval)interval;
{
NSInteger Min = interval / 60;
NSInteger Sec = (NSInteger)interval % 60;
NSString *intervalString = [NSString stringWithFormat:@"ld:ld",Min,Sec];
return intervalString;
}
/** toolView上暂停按钮的点击事件 */
- (IBAction)playOrPauseBtnClick:(UIButton *)sender {
// 播放状态按钮selected为YES,暂停状态selected为NO。
sender.selected = !sender.selected;
if (!sender.selected) {
self.toolView.alpha = 1;
[self removeShowTime];
[self.player pause];
[self removeProgressTimer];
}else{
[self addShowTime];
[self.player play];
[self addProgressTimer];
}
}
/** slider拖动和点击事件 */
- (IBAction)touchDownSlider:(UISlider *)sender {
// 按下去 移除监听器
[self removeProgressTimer];
[self removeShowTime];
}
- (IBAction)valueChangedSlider:(UISlider *)sender {
// 计算slider拖动的点对应的播放时间
NSTimeInterval currentTime = CMTimeGetSeconds(self.player.currentItem.duration) * sender.value;
self.timeLabel.text = [self timeToStringWithTimeInterval:currentTime];
}
- (IBAction)touchUpInside:(UISlider *)sender {
[self addProgressTimer];
//计算当前slider拖动对应的播放时间
NSTimeInterval currentTime = CMTimeGetSeconds(self.player.currentItem.duration) * sender.value;
// seekToTime:播放跳转到当前播放时间
[self.player seekToTime:CMTimeMakeWithSeconds(currentTime, NSEC_PER_SEC) toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];
[self addShowTime];
}
/** 重播按钮点击 */
- (IBAction)repeatBtnClick:(UIButton *)sender {
self.progressSlider.value = 0;
[self touchUpInside:self.progressSlider];
self.coverView.hidden = YES;
[self playOrPauseBigBtnClick:self.playOrPauseBigBtn];
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
return YES;
}
/** 全屏按钮点击事件 */
- (IBAction)fullViewBtnClick:(UIButton *)sender {
sender.selected = !sender.selected;
[self videoplayViewSwitchOrientation:sender.selected];
}
/** 弹出全屏播放器 */
- (void)videoplayViewSwitchOrientation:(BOOL)isFull
{
if (isFull) {
[self.contrainerViewController presentViewController:self.fullVc animated:NO completion:^{
[self.fullVc.view addSubview:self];
self.center = self.fullVc.view.center;
[UIView animateWithDuration:0.15 delay:0.0 options:UIViewAnimationOptionLayoutSubviews animations:^{
self.frame = self.fullVc.view.bounds;
} completion:nil];
}];
} else {
[self.fullVc dismissViewControllerAnimated:NO completion:^{
[self.contrainerViewController.view addSubview:self];
[UIView animateWithDuration:0.15 delay:0.0 options:UIViewAnimationOptionLayoutSubviews animations:^{
self.frame = CGRectMake(0, 200, self.contrainerViewController.view.bounds.size.width, self.contrainerViewController.view.bounds.size.width * 9 / 16);
} completion:nil];
}];
}
}
+ (instancetype)videoPlayView
{
return [[[NSBundle mainBundle]loadNibNamed:@"CLAVPlayerView" owner:nil options:nil]lastObject];
}
-(void)setUrlString:(NSString *)urlString
{
_urlString = urlString;
NSURL *url = [NSURL URLWithString:urlString];
self.playerItem = [AVPlayerItem playerItemWithURL:url];
}
- (void)viewDidLoad {
[super viewDidLoad];
[self setUpVideoPlayView];
self.playView.urlString = @"http://120.25.226.186:32812/resources/videos/minion_02.mp4";
}
-(void)setUpVideoPlayView
{
self.playView = [CLAVPlayerView videoPlayView];
self.playView.frame = CGRectMake(0, 200, self.view.frame.size.width, self.view.frame.size.width * 9 / 16);
self.playView.contrainerViewController = self;
[self.view addSubview:self.playView];
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有