SkillAgentSearch skills...

KYVedioPlayer

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

Install / Use

/learn @kingly09/KYVedioPlayer
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

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'

实现的功能

  1. 支持播放mp4、m3u8、3gp、mov等格式的视频播放;
  2. 支持网络视频和本地视频播放;
  3. 支持全屏和小屏幕播放;
  4. 支持UITableViewCell中播放视频;
  5. 支持横屏竖屏自动播放;

如何使用

基本功能

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
View on GitHub
GitHub Stars123
CategoryDevelopment
Updated5mo ago
Forks24

Languages

Objective-C

Security Score

92/100

Audited on Oct 16, 2025

No findings