视频播放

//

//  VideoViewController.m

//  LIBAOZHENG0826

//

//  Created by 张艳锋 on 15/8/30.

//  Copyright (c) 2015年 张艳锋. All rights reserved.

//

#import "VideoViewController.h"

@interface VideoViewController ()

{

    AVPlayer *player;

    UISlider *_slider;

    UILabel *timeLabel;

    AVPlayerItem *playeritem;

    UISlider *volumeSlider;

}

@property (weak, nonatomic) IBOutlet UIButton *doJumpbutton;

@property (weak, nonatomic) IBOutlet UIButton *doBackbutton;

- (IBAction)doBackButton:(UIButton *)sender ;

- (IBAction)doJump:(id)sender;

@end

@implementation VideoViewController

static int z=0;

- (void)viewDidLoad {

    [super viewDidLoad];

    NSLog(@"FWERW");

    NSString *urlPath=[[NSBundle mainBundle]pathForResource:@"hhh.mp4" ofType:nil];

    

    NSURL *url=[[NSURL alloc]initFileURLWithPath:urlPath];

    

    //AVURLAsset继承自AVAset,表示媒体的抽象类

    AVURLAsset *movieAsset=[[AVURLAsset alloc]initWithURL:url options:nil];

    //资源管理对象以及演示设置(资源缓冲状态)

    playeritem=[AVPlayerItem playerItemWithAsset:movieAsset];

    

    //添加通知

    [playeritem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:NULL];

    

    //播放器

    player=[AVPlayer playerWithPlayerItem:playeritem];

    [player setAllowsExternalPlayback:YES];

    AVPlayerLayer *layer=[AVPlayerLayer playerLayerWithPlayer:player];

//投影规格

    layer.frame=CGRectMake(58, 40, 450,240);

//

    layer.videoGravity=AVLayerVideoGravityResizeAspect;

    [self.view.layer addSublayer:layer];

    

    

    

    

    

    _slider=[[UISlider alloc]initWithFrame: CGRectMake(58, 300, 450, 20)];

    

    _slider.backgroundColor=[UIColor clearColor];

    _slider.value=0;

    _slider.minimumValue=0;

    _slider.maximumValue=1;

    [_slider setMaximumTrackImage:[UIImage imageNamed:@"播放进度条"] forState:UIControlStateNormal];

    [_slider setMinimumTrackImage:[UIImage imageNamed:@"播放进度条2"] forState:UIControlStateNormal];

    [_slider setThumbImage:[UIImage imageNamed:@"进度滑块"] forState:UIControlStateNormal];

    [_slider setThumbImage:[UIImage imageNamed:@"进度滑块"] forState:UIControlStateHighlighted];

    //注意这里要加UIControlStateHightlighted的状态,否则当拖动滑块时滑块将变成原生的控件

    [_slider addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];

    [_slider addTarget:self action:@selector(sliderDragUp:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:_slider];

    

    

}

-(void)viewWillAppear:(BOOL)animated{

    

    

    

}

//返回按钮事件

- (IBAction)doBackButton:(UIButton *)sender {

    //返回上一视图

    [player pause];

//返回上一视图控制器控制的视图

    [self dismissViewControllerAnimated:YES completion:nil];

    

}

- (IBAction)doJump:(id)sender {

    //跳向指定视图

    //方法 1.根据指定的类 创建视图控制器    2.借用presentViewController方法跳向指定视图

  ChartsViewController *chartsVC=[[ChartsViewController   alloc]initWithNibName:@"ChartsViewController" bundle:nil];

    [self presentViewController:chartsVC animated:YES completion:nil];

    

}

 //移除通知,防止跳出或退出此视图时程序崩溃

-(void)dealloc{

    [playeritem removeObserver:self forKeyPath:@"status" context:NULL];

}

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

{

    if ([keyPath isEqualToString:@"status"]) {

        if (AVPlayerItemStatusReadyToPlay == player.currentItem.status) {

            [player play];

            //添加计时器。

            [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showMovieTime:) userInfo:nil repeats:YES];

        }

    }

}

//返回视频的总时间

-(NSTimeInterval)playerDuration

{

    AVPlayerItem *item=player.currentItem;//获取资源管理者

    if (item.status == AVPlayerItemStatusReadyToPlay) {

        return CMTimeGetSeconds(player.currentItem.duration);

    }

    else{

        return (CMTimeGetSeconds(kCMTimeInvalid));

        

    }

}

//返回当前播放时间

-(NSTimeInterval)playerCurrentime

{

    AVPlayerItem *item=player.currentItem;//获取资源管理者

    if (item.status == AVPlayerItemStatusReadyToPlay) {

        if (CMTimeGetSeconds(player.currentItem.currentTime)==CMTimeGetSeconds(player.currentItem.duration)) {

            NSLog(@"end");

        }

        return CMTimeGetSeconds(player.currentItem.currentTime);

    }

    else{

        return (CMTimeGetSeconds(kCMTimeInvalid));

    }

}

//显示播放时间 

-(void)showMovieTime:(NSTimer *)timer{

    float duration=[self playerDuration];

    float current=[self playerCurrentime];

    float sliderNum=current/duration;

    NSLog(@"%f",sliderNum);

    _slider.value=sliderNum;

    

    int a=(int)current/60;

    int b=(int)current%60;

    int c=(int)duration/60;

    int d=(int)duration%60;

    

    NSString *timeString=[NSString stringWithFormat:@"%02d:%02d/%02d:%02d",a,b,c,d];

    timeLabel.text=timeString;

    

    _slider.value=current/duration;

    if (current>=duration) {

        [timer invalidate];

        [player pause];

    }

}

-(void)sliderDragUp:(UISlider *)slider1

{

    NSLog(@"slider:11111");

}

 //改变滑动条值

-(void)sliderValueChanged:(UISlider *)slider2

{

        float sliderValue=slider2.value;

        float allTime=[self playerDuration];

        

        CMTime changeTime=CMTimeMake(sliderValue*allTime, 1);

        [player.currentItem seekToTime:changeTime];

}

//点击按钮隐藏,点击按钮显现 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

    if (z==0) {

        self.view.backgroundColor=[UIColor blackColor];

        _doBackbutton.hidden=YES;

        _doJumpbutton.hidden=YES;

        _slider.hidden=YES;

        z=1;

    }

    else {

        

        self.view.backgroundColor=[UIColor whiteColor];

        _doBackbutton.hidden=NO;

        _doJumpbutton.hidden=NO;

        _slider.hidden=NO;

        z=0;

    }

}

@end

原文地址:https://www.cnblogs.com/OIMM/p/4786591.html