一. MediaPlayer

 

1. 导入系统库

// 提供了媒体文件的播放和查找
#import <MediaPlayer/MediaPlayer.h>
/** 提供视频播放的内容, 而不是一个UIView的子类, 9.0后废弃
 用作一个嵌入到其它视图当中的视频播放界面
 */
@property (strong, nonatomic) MPMoviePlayerController *mpc;
 
 
/** 视频播放控制器, 9.0后废弃
 作为独立的播放器来使用, 已经提供了相关的选项, 可以直接使用视图控制器
 */
@property (strong, nonatomic) MPMoviePlayerViewController *mpvc;

 

 

 

2. MPMoviePlayerController 使用方法↓

NSURL *url = [[NSBundle mainBundle] URLForResource:@"***.mp4" withExtension:nil];
 
    // ========== 加载视频的内容 ==========
    _mpc = [[MPMoviePlayerController alloc]  initWithContentURL:url];
    
    // 控制样式
    /**
     MPMovieControlStyleNone,      没有控制    
     MPMovieControlStyleEmbedded,   默认就是嵌入形式    
     MPMovieControlStyleFullscreen, 全屏样式
     */
    _mpc.controlStyle = MPMovieControlStyleNone;
    
    // 内容的填充模式
    /**
     MPMovieScalingModeNone,       不拉伸
     MPMovieScalingModeAspectFit,  保持比例适应 (留空白)
     MPMovieScalingModeAspectFill, 保持比例填充 (有部分内容超出屏幕)
     MPMovieScalingModeFill     不保持比较填充, 会被拉伸
     */
    _mpc.scalingMode = MPMovieScalingModeFill;
    
    // 该视图中包含了`要播放视频的内容`和`相关的控制的控件(如播放等)`
    // 将视频的内容和控制按钮添加到tempView上
    [self.tempView addSubview:_mpc.view];
    // 注意: 要给它配置fream值, 否则是看不到内容的
    [_mpc.view setFrame:self.tempView.bounds];
------------------------------分割线---------------------------
// 它的播放相关的操作的方法定义在协议当中 <MPMediaPlayback>
    // currentPlaybackRate表示当前的播放速率
    // 如果1.0, 正常播放, 0.0表示暂停
    if (_mpc.currentPlaybackRate == 0.0) {
        _mpc.currentPlaybackRate = 1.5;
        [_mpc play];
    } else {
        [_mpc pause];
    }

 

 2. MPMoviePlayerViewController 使用方法↓

NSURL *url = [[NSBundle mainBundle] URLForResource:@"***.mp4" withExtension:nil];
    // 本地视频的URL链接
     MPMoviePlayerViewController *mpvc = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
    [self presentViewController:mpvc animated:YES completion:nil];

 

 

二. AVPlayer

1. 导入系统库

// 支持媒体播放, 控制, 字幕等
#import <AVFoundation/AVFoundation.h>
#import <AVKit/AVKit.h>
/** 媒体播放控制器 */
@property (strong, nonatomic) AVPlayerViewController *pvc;
 
/** 能将`视频内容展示`出来的图层 */
@property (strong, nonatomic) AVPlayerLayer *layer;
 
/** 媒体播放器 */
@property (strong, nonatomic) AVPlayer *player;
 
 
2. AVPlayerViewController 使用方法↓
// ========== 弹出独立的视频播放窗口 ==========
    // 用于`装载AVPlayer`这个播放器的独立的`视图控制器`, 它的播放本质是依赖于AVPlayer这个类
    AVPlayerViewController *pvc = [[AVPlayerViewController alloc] init];
    
    // 关键类: 能够控制或管理`媒体资源`的播放, 暂停, 播放速率, 快进等
    // AVPlayer 是整个AVKit或AVFoundation当中, 用于媒体播放的关键
    // 为pvc配置一个可以播放视频的AVPlayer对象
    pvc.player = [AVPlayer playerWithURL:url];
    
    // 视频的相关控制操作, 都是由AVPlayer来负责
    [pvc.player play];
    
    [self presentViewController:pvc animated:YES completion:nil];

 

3. AVPlayerLayer 使用方法↓

// `AVPlayerLayer`会将`AVPlayer`的内容显示到它的图层上
    AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:_player];
    
    // 注意: 没有设置frame值
    [layer setFrame:self.tempView.bounds];
    [self.tempView.layer addSublayer:layer];

 

4. AVPlayer 使用方法↓

// AVPLayer是进行媒体文件播放的关键类
    AVPlayer *player = [AVPlayer playerWithURL:url];
    // 视频的相关控制操作, 都是由AVPlayer来负责
    // `AVPlayerLayer`会将`AVPlayer`的内容显示到它的图层上
    AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:player];
    // 注意: 没有设置frame值
    [layer setFrame:self.tempView.bounds];
    [self.tempView.layer addSublayer:layer];
---------------分割线----------------
// 当前的播放速率, 0.0表示暂停, 1.0正常播放
    if (_player.rate == 0.0) {
        // 播放
        [_player play];
        // 要先播放, 才能改变播放速率
        _player.rate = 2.0;
    } else {
        // 暂停
        [_player pause];
    }