当前位置:   article > 正文

iOS 视频播放(AVPlayer)_不需要播放器的av

不需要播放器的av

文章目录

   一、AVPlayer

   1、简介

   2、视频播放的解决方案

   二、AVPlayer中的MVC

   1、v层 :AVPlayerLayer

   2、m层 :AVPlayerItem

   3、c层 :AVPlayer

   三、实现简单的播放、暂停功能

   1、播放

   2、暂停

   3、视频播放暂停实现
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

一、AVPlayer

1、简介

   OC 提供了三种视频播放解决方案,分别是

   (1)MediaPlayer.framework 框架下的  MPMoviePlayerController,它支持本地视频和网络视频播放。
    (2)  MediaPlayer.framework 框架下的  MPMoviePlayerViewController,它支持本地视频和网络视频播放。
    (3) AVFoundation 框架下的AVPlayer 。
  • 1
  • 2
  • 3
  • 4
  • 5

MPMoviePlayerViewController 继承 UIViewcontroller,其实是对 MPMoviePlayerController的封装,即 MPMoviePlayerViewController.view = MPMoviePlayerController

   MPMoviePlayerController足够强大,几乎不用写几行代码
   就能完成一个播放器,但是正是由于它的高度封装使得要自定义这个播放器
   变得很复杂,甚至是不可能完成。例如有些时候需要自定义播放器的样式,
   那么如果要使用MPMoviePlayerController就不合适了,
   如果要对视频有自由的控制则可以使用AVPlayer。
   AVPlayer存在于AVFoundation中,它更加接近于底层
   ,所以灵活性也更强。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

二、AVPlayer中的MVC

1、view层:对应 AVPlayerLayer 。AVPlayer本身并不能显示视频,而且它也不像MPMoviePlayerController有一个view属性。如果AVPlayer要显示必须创建一个播放器层AVPlayerLayer用于展示,播放器层继承于CALayer,有了AVPlayerLayer之添加到控制器视图的layer中即可。

2、model层 : 对应AVPlayerItem 。我们在它的便利构造器方法中可以看到他需要我们传入一个AVPlayerItem也就是播放单元,所谓的播放单元就是给播放器提供了一个数据的来源。

3、controller层 :对应AVPlayer。 创建AVPlayerLayer的时候,我们需要先有一个AVPlayer,它用MVC来分类的话就相当于MVC中的C层,负责播放单元和播放界面的协调工作。

三、实现简单的播放、暂停功能

 注意:AVPlayer对应着两个方法play、pause来实现。
 但是关键问题是如何判断当前视频是否在播放,在前面的内容中
 无论是音频播放器还是视频播放器都有对应的状态来判断,
 但是AVPlayer却没有这样的状态属性,通常情况下可以
 通过判断播放器的播放速度来获得播放状态。
 如果rate为0说明是停止状态,1是则是正常播放状态。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

1、播放(play)

- (void)play
{
    if (self.avplayer.rate == 0) 
    {
        [self.avplayer play];
    }

}// 播放
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2、暂停(pause)

- (void)pause
{
    if (self.avplayer.rate != 0)
    {
        [self.avplayer pause];
    }

}//暂停
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3、视频播放暂停实现

//
//  MainViewController.m
//  5.视频播放
//
//  Created by cherish on 2018/4/17.
//  Copyright © 2018年 Cherish. All rights reserved.
//

#import "MainViewController.h"
#import <AVFoundation/AVFoundation.h>

#define KScreemWidth  [UIScreen mainScreen].bounds.size.width


#define KScreemHeight  [UIScreen mainScreen].bounds.size.height

@interface MainViewController ()

//视频播放器
@property (nonatomic,strong) AVPlayer *avplayer;

@end

@implementation MainViewController

#pragma mark - ViewController  Life
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.title = @"视频播放";

    [self setUI];

}//视频加载


#pragma mark - Private Methods
- (void)setUI
{

    //初始化视频播放地址
    NSURL *mediaUrl = [NSURL URLWithString:@"http://tdqc-v3.oss-cn-shenzhen.aliyuncs.com/Formal/user/comments/2018/04/07/evenvirmentProtected.mp4"];

    // 初始化播放单元
    AVPlayerItem *item = [AVPlayerItem playerItemWithURL:mediaUrl];

    //初始化播放器对象
    self.avplayer = [[AVPlayer alloc]initWithPlayerItem:item];


    //显示画面
    AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:self.avplayer];


    //视频填充模式
    layer.videoGravity = AVLayerVideoGravityResizeAspect;

    //设置画布frame
    layer.frame = CGRectMake(0, KScreemHeight/2-250/2, KScreemWidth, 250);


    //添加到当前视图
    [self.view.layer addSublayer:layer];


    //设置播放暂停按钮
    NSArray *titles = @[@"播放",@"暂停"];
    CGFloat gap = (KScreemWidth-120)/3.0f;

    for (int i = 0; i < 2; i++) {

        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        [btn setTitle:titles[i] forState:UIControlStateNormal];
        btn.backgroundColor = [UIColor redColor];
        btn.tag = 555+i;
        btn.frame = CGRectMake(gap+i*(gap+60), KScreemHeight-100, 60, 40);
        btn.titleLabel.textAlignment = NSTextAlignmentCenter;
        btn.titleLabel.font = [UIFont systemFontOfSize:16.0f];
        [btn addTarget:self action:@selector(targetAction:) forControlEvents:UIControlEventTouchUpInside];
        [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [self.view addSubview:btn];


    }


}//绘制UI


#pragma mark - Action Methods
- (void)targetAction:(UIButton*)sender
{
    switch (sender.tag) {

        case 555:  //播放

            [self play];
            break;

        case 556:  //暂停

            [self pause];
            break;

        default:
            break;
    }
}


- (void)play
{

    if (self.avplayer.rate == 0) {

        [self.avplayer play];
    }

}// 播放


- (void)pause
{
    if (self.avplayer.rate != 0)
    {
        [self.avplayer pause];
    }

}//暂停

@end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133

视频播放暂停demo

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/138749
推荐阅读
相关标签
  

闽ICP备14008679号