• 视频播放


    //

    //  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

  • 相关阅读:
    rustlang入门教程
    中间件日志切割
    Redis非关系型缓存数据库集群部署、参数、命令工具
    SaltStack自动化软件简介及安装
    CentOS根目录下各目录介绍
    Dockerfile书写介绍及构建ssh镜像、tomcat镜像、nginx镜像
    DockerFile执行报错解决
    阿里云CentOS7.2把默认语言修改成中文
    JavaScript 如何判断一个数据的类型
    MongoDB windows 下安装配置
  • 原文地址:https://www.cnblogs.com/OIMM/p/4786591.html
Copyright © 2020-2023  润新知