zoukankan      html  css  js  c++  java
  • 视频 AVPlayer

    /**

     *   iOS中视频播放  可以使用AVPlayer

     AVPlayer:不仅可以播放音频,还可播放视频;支持播放网络音频.

     AVAudioPlayer:支持本地音频播放

     */

    - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view.

        //获取播放网址

        NSURL *url = [NSURL URLWithString:@"http://video.weibo.com/show?fid=1034:c2b460554bd8334dcefa9ad4e03a8c79"];

       /*AVPlayerItem 可以获取视频的信息,如播放当前时长,总时长等等

        状态  status属性:

        AVPlayerItemStatusUnknown, 播放器未知问题

        AVPlayerItemStatusReadyToPlay, 代表可以播放 可以调用play

        AVPlayerItemStatusFailed 代表视频无法播放

           loadedTimeRanges: 已缓存的进度

        监测该属性  展示更新UI上的缓存进度.

        */

        //根据网址创建AVPlayerItem

        AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];

        playerItem.status;

        playerItem.loadedTimeRanges;

        //监听item的status属性 KVO

        [playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];

        //创建播放器对象

        _player = [AVPlayer playerWithPlayerItem:playerItem];

        /**

         *   单独使用AVPlayer时无法显示视频的(该类并非真正的视图)

         需要将视图层添加到AVPlayerLayer中

         最后将layer添加到父视图的layer上.

         */

        //1.创建 AVPlayerLayer对象

        AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:_player];

       //2.设置对应属性

       //设置视图层的frame

        layer.frame = CGRectMake(30, 200, self.view.bounds.size.width - 60, 300);

        //设置背景色

        layer.backgroundColor = [UIColor blackColor].CGColor;

        //设置图层的填充方式:

        /** AVLayerVideoGravityResize  视频会被拉伸填充播放界面的边界

         *  AVLayerVideoGravityResizeAspect (默认)保持视频的宽高比,且自动适应播放界面的边界.

        *   AVLayerVideoGravityResizeAspectFill  保持视频的宽高比,填充图层的边界.

         */

        layer.videoGravity = AVLayerVideoGravityResizeAspect;

        //添加到播放界面的layer层

        [self.view.layer addSublayer:layer];

    }

    - (IBAction)handlePlay:(id)sender {

        [self.player play];

    }

    - (IBAction)handlePause:(id)sender {

        [self.player pause];

    }

    #pragma KVO 回调方法

    //监听对象的status属性发生变化时的回调方法

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{

        NSLog(@"%@ %@",object,change);

        //获取播放的资源对象

        AVPlayerItem *item = object;

        //代表可以播放了

        if (item.status == AVPlayerStatusReadyToPlay) {

            //获取总时长 duration  (CMTime类型)

            /*CMTime  

             value:一共多少帧

             timescale:每秒多少帧

             */

            float total = item.duration.value / item.duration.timescale;

            NSLog(@"%f",total);

        }

    }

  • 相关阅读:
    欢天喜地七仙女——Alpha冲刺(11.30)第六天
    欢天喜地七仙女——Alpha冲刺(11.29)第五天
    欢天喜地七仙女——Alpha冲刺(11.28)第四天
    欢天喜地七仙女——Alpha冲刺(11.27)第三天
    欢天喜地七仙女——Alpha冲刺(11.26)第二次
    欢天喜地七仙女——Alpha冲刺(11.25)第一天
    fist-总结随笔
    fist-第十天随笔
    fist-第九天冲刺随笔
    fist-第八天冲刺随笔
  • 原文地址:https://www.cnblogs.com/wukun168/p/6010795.html
Copyright © 2011-2022 走看看