KYVedioPlayer
KYVedioPlayer 是基于AVPlayer的封装视频播放器,支持播放mp4、m3u8、3gp、mov等格式;支持网络视频和本地视频播放;支持全屏和小屏幕播放;还在UITableViewCell中播放视频 ;支持横屏竖屏自动播放。
Install / Use
/learn @kingly09/KYVedioPlayerREADME
KYVedioPlayer
KYVedioPlayer 是基于AVPlayer的封装视频播放器,支持播放mp4、m3u8、3gp、mov等格式;支持网络视频和本地视频播放;支持全屏和小屏幕播放;还在UITableViewCell中播放视频 ;支持横屏竖屏自动播放。

安装
要求
- Xcode 7 +
- iOS 7.0 +
KYVedioPlayer播放器的布局依赖Masonry框架,注意工程是否包含Masonry库,如果没有的话,可以使用CocoaPods安装Masonry库。
pod 'Masonry', '~> 1.0.1'
手动安装
下载DEMO后,将子文件夹 KYVedioPlayerLib 拖入到项目中, 导入头文件KYVedioPlayer.h 开始使用.
CocoaPods安装
你可以在 Podfile 中加入下面一行代码来使用 KYAlertView
pod 'KYVedioPlayer'
实现的功能
- 支持播放mp4、m3u8、3gp、mov等格式的视频播放;
- 支持网络视频和本地视频播放;
- 支持全屏和小屏幕播放;
- 支持UITableViewCell中播放视频;
- 支持横屏竖屏自动播放;
如何使用
基本功能
step 1 :创建控制器
在您需要使用KYVedioPlayer播放器功能的类中,import 头文件KYVedioPlayer.h即可 。
设置 KYVedioPlayerDelegate委托代理 代码示例如下:
#import "KYVedioPlayer.h"
@interface KYLocalVideoPlayVC ()<KYVedioPlayerDelegate>{
KYVedioPlayer *vedioPlayer;
CGRect playerFrame;
}
step 2 :初始化
初始化VedioPlayer 初始化需要几个步骤:
- 准备需要视频播放的UIView;
- 新建player;
- 设置url;
- 调用
[vedioPlayer play]开始播放。还可以设置播放器进度条的颜色,关闭按钮是否显示,视频标题等。
新建一个 化VedioPlayer 播放器,代码示例如下:
playerFrame = CGRectMake(0, 0, kScreenWidth, (kScreenWidth)*(0.75));
vedioPlayer = [[KYVedioPlayer alloc]initWithFrame:playerFrame];
vedioPlayer.delegate = self;
vedioPlayer.URLString = _URLString;
vedioPlayer.titleLabel.text = self.title;
vedioPlayer.closeBtn.hidden = NO;
vedioPlayer.progressColor = [UIColor orangeColor];
[self.view addSubview:vedioPlayer];
step 3 :启动播放器和暂停
启动
[vedioPlayer play];
暂停
[vedioPlayer pause];
step 4 :设置监听,屏幕旋转的通知,代码示例如下:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(NotificationDeviceOrientationChange:)
name:UIDeviceOrientationDidChangeNotification
object:nil
];
根据屏幕旋转的通知,是否全屏,是否缩小,代码示例如下:
-(void)NotificationDeviceOrientationChange:(NSNotification *)notification{
if (vedioPlayer == nil|| vedioPlayer.superview==nil){
return;
}
UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
UIInterfaceOrientation interfaceOrientation = (UIInterfaceOrientation)orientation;
switch (interfaceOrientation) {
case UIInterfaceOrientationPortraitUpsideDown:{
NSLog(@"第3个旋转方向---电池栏在下");
}
break;
case UIInterfaceOrientationPortrait:{
NSLog(@"第0个旋转方向---电池栏在上");
if (vedioPlayer.isFullscreen) {
[self setNeedsStatusBarAppearanceUpdate];
[vedioPlayer showSmallScreenWithPlayer:vedioPlayer withFatherView:self.view withFrame:playerFrame];
}
}
break;
case UIInterfaceOrientationLandscapeLeft:{
NSLog(@"第2个旋转方向---电池栏在左");
vedioPlayer.isFullscreen = YES;
[self setNeedsStatusBarAppearanceUpdate];
[vedioPlayer showFullScreenWithInterfaceOrientation:interfaceOrientation player:vedioPlayer withFatherView:self.view];
}
break;
case UIInterfaceOrientationLandscapeRight:{
NSLog(@"第1个旋转方向---电池栏在右");
vedioPlayer.isFullscreen = YES;
[self setNeedsStatusBarAppearanceUpdate];
[vedioPlayer showFullScreenWithInterfaceOrientation:interfaceOrientation player:vedioPlayer withFatherView:self.view];
}
break;
default:
break;
}
}
step 5 :注销播放器,代码示例如下:
/**
* 注销播放器
**/
- (void)releasePlayer
{
[vedioPlayer resetKYVedioPlayer];
vedioPlayer = nil;
}
- (void)dealloc
{
[self releasePlayer];
[[NSNotificationCenter defaultCenter] removeObserver:self];
NSLog(@"KYLocalVideoPlayVC deallco");
}
step 6 :其它操作,如隐藏状态栏,设置播放器进度条的颜色,关闭按钮是否显示,获取正在播放的时间点等,代码示例如下:
- 隐藏状态栏
/**
* 隐藏状态栏
**/
-(BOOL)prefersStatusBarHidden{
return YES;
}
- 设置播放器进度条的颜色
vedioPlayer.progressColor = [UIColor orangeColor];
- 关闭按钮是否显示,NO为显示关闭按钮 ,YES为隐藏关闭按钮
vedioPlayer.closeBtn.hidden = NO;
- 获取正在播放的时间点
[vedioPlayer currentTime];
播放器事件
播放器的几种状态,为KYVedioPlayerState枚举类型
事件ID | 含义说明 ------------------------- | --------------------- KYVedioPlayerStateFailed | 播放失败 KYVedioPlayerStateBuffering | 缓冲中 KYVedioPlayerStatusReadyToPlay | 将要播放 KYVedioPlayerStatePlaying | 播放中 KYVedioPlayerStateStopped | 暂停播放 KYVedioPlayerStateFinished | 播放完毕
播放器回调
播放器所有点击事件的回调都会通过这个KYVedioPlayerDelegate反馈给您的App.
//点击播放暂停按钮代理方法
-(void)kyvedioPlayer:(KYVedioPlayer *)kyvedioPlayer clickedPlayOrPauseButton:(UIButton *)playOrPauseBtn{
NSLog(@"[KYVedioPlayer] clickedPlayOrPauseButton ");
}
//点击关闭按钮代理方法
-(void)kyvedioPlayer:(KYVedioPlayer *)kyvedioPlayer clickedCloseButton:(UIButton *)closeBtn{
NSLog(@"[KYVedioPlayer] clickedCloseButton ");
}
//点击全屏按钮代理方法
-(void)kyvedioPlayer:(KYVedioPlayer *)kyvedioPlayer clickedFullScreenButton:(UIButton *)fullScreenBtn{
NSLog(@"[KYVedioPlayer] clickedFullScreenButton ");
}
//单击WMPlayer的代理方法
-(void)kyvedioPlayer:(KYVedioPlayer *)kyvedioPlayer singleTaped:(UITapGestureRecognizer *)singleTap{
NSLog(@"[KYVedioPlayer] singleTaped ");
}
//双击WMPlayer的代理方法
-(void)kyvedioPlayer:(KYVedioPlayer *)kyvedioPlayer doubleTaped:(UITapGestureRecognizer *)doubleTap{
NSLog(@"[KYVedioPlayer] doubleTaped ");
}
///播放状态
//播放失败的代理方法
-(void)kyvedioPlayerFailedPlay:(KYVedioPlayer *)kyvedioPlayer playerStatus:(KYVedioPlayerState)state{
NSLog(@"[KYVedioPlayer] kyvedioPlayerFailedPlay 播放失败");
}
//准备播放的代理方法
-(void)kyvedioPlayerReadyToPlay:(KYVedioPlayer *)kyvedioPlayer playerStatus:(KYVedioPlayerState)state{
NSLog(@"[KYVedioPlayer] kyvedioPlayerReadyToPlay 准备播放");
}
//播放完毕的代理方法
-(void)kyplayerFinishedPlay:(KYVedioPlayer *)kyvedioPlayer{
NSLog(@"[KYVedioPlayer] kyvedioPlayerReadyToPlay 播放完毕");
}
更多播放器方法
- 重置播放器
[vedioPlayer resetKYVedioPlayer];
- 设置全屏显示播放
/**
* 全屏显示播放
* @param interfaceOrientation 方向
* @param player 当前播放器
* @param fatherView 当前父视图
**/
-(void)showFullScreenWithInterfaceOrientation:(UIInterfaceOrientation )interfaceOrientation player:(KYVedioPlayer *)player withFatherView:(UIView *)fatherView;
- 设置小屏幕显示播放
/**
* 小屏幕显示播放
* @param player 当前播放器
* @param fatherView 当前父视图
* @param playerFrame 小屏幕的Frame
**/
-(void)showSmallScreenWithPlayer:(KYVedioPlayer *)player withFatherView:(UIView *)fatherView withFrame:(CGRect )playerFrame;
高级功能演示DEMO
1.记住上次播放的位置
每次记录播放器注销的时候的该视频的时间点,当下次在播放该视频的时候,先判断一下是否记录了该视频的时间点,如果记录了,就从记录的时间点开始播放,若没有,正常播放即可。
整个例子 在 DEMO 的
KYRememberLastPlayedVC.m文件代码实现如下:
//
// KYRememberLastPlayedVC.m
// KYVedioPlayer
//
// Created by kingly on 16/9/9.
// Copyright © 2016年 https://github.com/kingly09/KYVedioPlayer kingly inc . All rights reserved.
//
#import "KYRememberLastPlayedVC.h"
#define TheUserDefaults [NSUserDefaults standardUserDefaults]
@interface KYRememberLastPlayedVC ()<KYVedioPlayerDelegate>{
KYVedioPlayer *vedioPlayer;
CGRect playerFrame;
NSString *URLString;
}
@end
@implementation KYRememberLastPlayedVC
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
playerFrame = CGRectMake(0, 0, kScreenWidth, (kScreenWidth)*(0.75));
vedioPlayer = [[KYVedioPlayer alloc]initWithFrame:playerFrame];
vedioPlayer.delegate = self;
URLString = @"http://static.tripbe.com/videofiles/20121214/9533522808.f4v.mp4";
if ([TheUserDefaults doubleForKey:URLString]) {//如果有存上次播放的时间点记录,直接跳到上次纪录时间点播放
double time = [TheUserDefaults doubleForKey:URLString];
vedioPlayer.seekTime = time;
}
[vedioPlayer setURLString:URLString];
vedioPlayer.titleLabel.text = self.title;
vedioPlayer.closeBtn.hidden = NO;
vedioPlayer.progressColor = [UIColor orangeColor];
[self.view addSubview:vedioPlayer];
[vedioPlayer play];
}
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidAppear:animated];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
/**
* 注销播放器
**/
- (void)releasePlayer
{
[vedioPlayer resetKYVedioPlayer];
vedioPlayer = nil;
}
- (void)dealloc
{
//记录播放的时间
double time = [vedioPlayer currentTime];
[TheUserDefaults setDouble:time forKey:URLString];
[self releasePlayer];
[[NSNotificationCenter defaultCenter] removeObserver:self];
NSLog(@"KYRememberLastPlayedVC dealloc");
}
/**
* 隐藏状态栏
**/
-(BOOL)prefersStatusBarHidden{
return YES;
}
#pragma mark - KYVedioPlayerDelegate 播放器委托方法
//点击播放暂停按钮代理方法
-(void)kyvedioPlayer:(KYVedioPlayer *)kyvedioPlayer clickedPlayOrPauseButton:(UIButton *)playOrPauseBtn{
NSLog(@"[KYVedioPlayer] clickedPlayOrPauseButton ");
}
//点击关闭按钮代理方法
-(void)kyvedioPlayer:(KYVedioPlayer *)kyvedioPlayer clickedCloseButton:(UIButton *)closeBtn{
NSLog(@"[KYVedioPlayer] clickedCloseButton ");
}
//点击全屏按钮代理方法
-(void)kyvedioPlayer:(KYVedioPlayer *)kyvedioPlayer clickedFullScreenButton:(UIButton *)fullScreenBtn{
NSLog(@"[KYVedioPlayer] clickedFullScreenButton ");
}
//单击WMPlayer的代理方法
-(void)kyvedioPlayer:(KYVedioPlayer *)kyvedioPlayer singleTaped:(UITapGestureRecognizer *)singleTap{
NSLog(@"[KYVedioPlayer] singleTaped ");
}
//双击WMPlayer的代理方法
-(void)k
