【iOS】视频播放之AVPlayer

【iOS】视频播放之AVPlayer

iOS平台使用播放视频,可用的选项一般有这四个,他们各自的作用和功能如下:

使用环境 优点 缺点
AVPlayerViewController AVKit 简单易用 不可定制
MPMoviePlayerController MediaPlayer 简单易用 不可定制
IJKPlayer IJKMediaFrameWork 定制度高,可支持流媒体播放 使用复杂
AVPlayer AVFoundation 可定制度高,功能强大 不支持流媒体

由此可以看出,如果我们不做直播功能AVPlayer就是一个最优的选择。

另外AVPlayer是一个可以播放任何格式的全功能影音播放器

支持视频格式: MP4,MOV,M4V,3GP,AVI等。

支持音频格式:MP3,AAC,WAV,AMR,M4A等。

详见AVPlayer支持的视频格式

如何使用

AVPlayer存在于AVFoundation框架,我们使用时需要导入:

#import <AVFoundation/AVFoundation.h>

几个播放相关的参数

在创建一个播放器之前我们需要先了解一些播放器相关的类

AVPlayer:控制播放器的播放,暂停,播放速度

AVURLAsset : AVAsset 的一个子类,使用 URL 进行实例化,实例化对象包换 URL 对应视频资源的所有信息。

AVPlayerItem:管理资源对象,提供播放数据源

AVPlayerLayer:负责显示视频,如果没有添加该类,只有声音没有画面

我们这片文章就围绕这几个参数展开,光说这些你可能还有点不明白,那我们就围绕一个最简单的播放器做起,一点点扩展功能,在具体讲解这几个参数的作用。

最简单的播放器

根据上面描述,我们知道AVPlayer是播放的必要条件,所以我们可以构建的简单播放器就是:

NSURL*url=[NSURLfileURLWithPath:@"视频地址"];

AVPlayerItem*playerItem=[AVPlayerItemplayerItemWithURL:url];

self.player=[AVPlayer playerWithPlayerItem:playerItem];
[self.player addObserver:self forKeyPath:@"status"options:NSKeyValueObservingOptionNew context:nil];
self.player.actionAtItemEnd=AVPlayerActionAtItemEndNone;

self.playerLayer=[AVPlayerLayer playerLayerWithPlayer:self.player];
self.playerLayer.videoGravity=AVLayerVideoGravityResizeAspect;
self.playerLayer.frame=self.view.bounds;
[self.view.layer addSublayer:self.playerLayer];
[self.player play];

为完成这些,我们需要对AVPlayerItem和AVPlayerLayer进一步了解一下。

一、AVPlayer的控制

前面讲过该类是控制视频播放行为的,他的使用比较简单。

播放视频:

[self.player play];

暂停视频:

[self.player pause];

更改速度:

self.player.rate =1.5;//注意更改播放速度要在视频开始播放之后才会生效

还有一下其他的控制,我们可以调转到系统API进行查看

二、AVPlayerItem的控制

AVPlayerItem作为资源管理对象,它控制着视频从创建到销毁的诸多状态。

1. 播放状态 status

typedef NS_ENUM(NSInteger,AVPlayerItemStatus) {
   

                    AVPlayerItemStatusUnknown,//未知

                    AVPlayerItemStatusReadyToPlay,//准备播放

                    AVPlayerItemStatusFailed//播放失败

};

我们使用KVO监测playItem.status,可以获取播放状态的变化

[self.playerItem addObserver:selfforKeyPath:@"status"options:NSKeyValueObservingOptionNewcontext:nil];

在监听回调中:

- (voi
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值