视频播放器AVPlayer

AVPro Video费版vs收费版深度对比:Unity视频播放插件到底值不值得买? 本文深度对比了Unity视频播放插件AVPro Video的费版与Ultra Edition收费版。核心差异在于商业许可、性能与功能:费版带水印且功能基础;Ultra Edition不仅无水印,更提供硬件加速解码、多线程渲染、360°视频支持及多平台深度优化,是商业项目及高性能视频应用的理想选择。 阅读详情
1、采用AVPlayer进行封装
2、通过单例视频管理类全局控制视屏的播放暂停和移除视频view
3、播放视图和工具条独立封装,完全解耦

4、封装独立的弹框视图,可加网络判断来是否继续播放

github地址:https://github.com/Janko0/JKAVPlayer


播放器使用

//
//  ViewController.m
//  JKPlayer
//
//  Created by 杨可 on 2016/12/23.
//  Copyright © 2016年 Janko. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()<JKPlayerViewDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UIButton *playBtn = [[UIButton alloc] init];
    playBtn.frame = CGRectMake(100, 400, 100, 100);
    [playBtn setTitle:@"播放" forState:UIControlStateNormal];
    [playBtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    [self.view addSubview:playBtn];
    [playBtn addTarget:self action:@selector(playVideo) forControlEvents:UIControlEventTouchUpInside];
    
   
    
 
//    [[TTPlayerViewMananger playerViewMananger] replaceSuperView:self.view];
//    [[TTPlayerViewMananger playerViewMananger] setTopView:self.topView playerDeleagte:self];
    
}
- (void)playVideo {
    [[JKPlayerViewMananger playerViewMananger] removePlayer];
    if ([JKPlayerViewMananger playerViewMananger].playerView == nil) {
        [[JKPlayerViewMananger playerViewMananger] setPlayerViewFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_WIDTH * (9 / 16.0)) topView:nil selfSuperView:self.view delegate:self];
    }
    [JKPlayerViewMananger playerViewMananger].playerView.showBackBtn = YES;
    if ([JKPlayerViewMananger playerViewMananger].playerView.indicatorView.isAnimating) {
        [[JKPlayerViewMananger playerViewMananger].playerView.indicatorView startAnimation];
    }
    //http://baobab.cdn.wandoujia.com/14468618701471.mp4
    [[JKPlayerViewMananger playerViewMananger] playWithVideoUrlString:@"http://test.bjrenrentong.com/hls/host1-d5fbb6440bea7f29c7edf23f6bc7b89c.mov/m3u8"];
}

- (CGRect)getHalfScreenFrame
{
    return CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_WIDTH * (9 / 16.0));
}

- (void)loadVideoFinish:(BOOL)isLoadSuccess
{
    if (isLoadSuccess)
    {
        [[JKPlayerViewMananger playerViewMananger] playVideo];
    }
    else
    {
        [SVProgressHUD showErrorWithStatus:@"视频出错啦"];
    }
}


@end



播放器管理类实现

//
//  JKPlayerViewMananger.m
//  JKPlayer
//
//  Created by Janko on 16/6/28.
//  Copyright © 2016年 Janko. All rights reserved.
//

#import "JKPlayerViewMananger.h"
@interface JKPlayerViewMananger ()

@end
@implementation JKPlayerViewMananger
static JKPlayerViewMananger *mananger;
static JKPlayerView *playerView;

+ (instancetype)playerViewMananger {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        mananger = [[JKPlayerViewMananger alloc] init];
    });
    return mananger;
}


- (instancetype)setPlayerViewFrame:(CGRect)frame topView:(UIView *)topView selfSuperView:(UIView *)selfSuperView delegate:(id<JKPlayerViewDelegate>)delegate {
    self.playerView = [[JKPlayerView alloc] initWithFrame:frame topView:topView selfSuperView:selfSuperView delegate:delegate];
    if (self.playerView.isFullScreen) {
        [self.playerView changeToHalfScreen];
    }
    return self;
}

- (void)playWithVideoUrlString:(NSString *)videoUrlString selfSuperView:(UIView *)selfSuperView {
    [self.playerView playWithVideoUrlString:videoUrlString selfSuperView:selfSuperView];
}
- (void)seJKopView:(UIView *)topView playerDeleagte:(id<JKPlayerViewDelegate>) delegate {
    [self.playerView seJKopView:topView playerDeleagte:delegate];
}

#pragma mark - 外部接口

- (void)changeToHalfScreen {
    [self.playerView changeToHalfScreen];
}
- (void)playWithVideoUrlString:(NSString *)videoUrlString {
    [self.playerView playWithVideoUrlString:videoUrlString];
}

- (void)releaseSelf {
    [self.playerView releaseSelf];
}

- (void)replaceSuperView:(UIView *)selfSuperView {
    [self.playerView replaceSuperView:selfSuperView];
}
- (void)removePlayer {
    [self.playerView removePlayer];
    [self.playerView.selfSuperView removeFromSuperview];
    self.playerView = nil;
}

- (void)pauseVideo {
    [self.playerView pauseVideo];
}

- (void)playVideo {
    [self.playerView playVideo];
}

@end

具体实现内容到GitHub上下载源代码github地址:https://github.com/Janko0/JKAVPlayer,有什么问题欢迎提出(麻烦给个star)

ios 使用AVPlayer自定义视频播放器 iOS有一个类MPMoviePlayer可以用来实现视频的播放,但是用这个类不能对视频播放器对样式和功能做自定义。所以用AVplayer类来做自定义的视频播放器视频是在一个view上显示的,我自定义了一个View,基于UIView #import #import #import @interface VideoPlayerView : UIView @ 阅读详情

相关推荐

OC 使用AVPlayer 简单的实现一个视频播放器

1.使用类PlayView来实现,代码如下: #import &amp;lt;UIKit/UIKit.h&amp;gt; @interface PlayView : UIView /**播放的URL*/ - (void)playWith:(NSURL *)url; @end #import &quot;PlayView.h&quot; #import &amp;lt;AVFoundation/AVFoundation.h&amp;gt; /

qq_20933903的博客 4641

iOS AVPlayer视频播放器

iOS 基于AVPlayer视频播放器,实现播放、暂停、全屏、进度条,缓冲条

iOS平台自定义视频播放器实践:以AVPlayer为中心

本文还有配套的精品资源,点击获取 简介:在iOS开发中,自定义视频播放器需求频现。本项目通过AVFoundation框架的AVPlayer类,演示了如何构建一个功能丰富的自定义视频播放器。涵盖从AVPlayerAVPlayerItem、AVPlayerLayer到自定义界面设计、监听更新、缓存机制、错误处理、代码注释和交互反馈等关键实现步骤。旨在帮助开发者掌握使用AVPl...

weixin_31869917的博客 2506

AVPlayer 实现视频播放

利用avfundation框架实现原生视屏播放功能

AVPlayer 播放在线视频和本地文件(数据库)设置

首先使用AVPlayer 必须导入框架: AVFoundation 以及 头文件: #<MediaPlayer/MediaPlayer.h> 两者的主要区别在路径的初始化:1、播放本地视频(数据库数据) titleLabel.text = [NSString stringWithFormat:@"%@",currentMusicModel.audio_name]; [i

timtian008的博客 376万+

20+ 个费和高级的 Web 视频播放器

http://www.php100.com/html/webkaifa/database/Mysql/2011/1212/9466.html

luguo0816的专栏 8万+

ios avplayer 视频播放器

#import <UIKit/UIKit.h> @interface XGGesTuresView : UIView //左下角播放按钮 @property (nonatomic ,strong)UIButton * leftplayerbutton; //最小时间 @property (nonatomic ,strong)UILabel ...

weixin_30699741的博客 4809

iOS 教你使用MP、AVPlayerAVPlayerVC构建一个完整的视频播放器

标题必须要浮夸!要感觉像是一个大新闻。长者如是说。其实是前几天去面试的时候,被要求说必须做过视频播放相关项目。有点闹心之余,就花了点时间在家写了一个简单播放器,基本实现了主流播放器的大致功能。之前项目没有需求用到过视频播放,所以写的时候难会遇到一些坑,花了一些时间解决。苹果在视频播放方面提供了多个框架供我们选择使用。分别为:基于mediaPlayer类库的MPMediaPlayerController(iOS9后遭到废弃,被AVPlayerViewController所替代)

irainsa的博客 1382

AVPlayer: 高性能、易用的视频播放器框架

AVPlayer: 高性能、易用的视频播放器框架 是一个高性能、易用的视频播放器框架,适用于 iOS 和 macOS 平台。它基于 Apple 的 AVFoundation 框架构建,提供了一种简单的方式来实现高质量的视频播放功能。 项目简介 AVPlayer 是一个开源的项目,由开发者 Jackarain 编写并维护。该项目的目标是为开发者提供一个易于使用的、高效的视频播放解决方案,以满足各种应...

gitblog_00008的博客 2297

FWPlayer:基于AVPlayeriOS视频播放器SDK

FWPlayer:基于AVPlayeriOS视频播放器SDK 项目介绍 FWPlayer是一款专为iOS平台设计的视频播放器SDK,它建立在Apple的AVPlayer之上,提供丰富的播放功能与高度的自定义能力。此框架支持横竖屏播放、屏幕自动旋转、全屏与迷你播放模式切换,并允许用户自由拖拽迷你播放器位置。此外,它还具备网络及本地视频播放、播放时下载缓存、滑动手势快进/后退、音量与亮度调节等功能。...

gitblog_00030的博客 885

AVPlayer自定制视频播放器(1)——视频播放器基本实现

iOS多媒体开发过程中,经常会用到视频播放器,简单是视频播放器,直接使用苹果提供好的MPMoviePlayerController和MPMoviePlayerViewController就可以实现了,但是,多数情况下,都需要自定制视频播放器,这时,就要使用神器AVPlayer来进行开发了。下面,就讲述一下AVPlayer的使用。先列出两篇比较好的博客,供大家参考: iOS开发系列--音频播放、

天下皆白唯我独黑的博客 6万+

iOSAVPlayer的在线播放和播放进度条,音量条以及AVPlayer的后台播放

//以下代码用storyboard托控件实现 //导入头文件 #import @interface OnlineViewController() //播放器 @property (nonatomic,strong)AVPlayer *avPlayer; //监控进度 @property (nonatomic,st

wakice的博客 104万+

AVPlayer 播放在线视频和本地文件的设置区别

依赖框架都是AVFoundation 需要da

Mr.xiaoma.wen 337万+

【白嫖系列】费永久45G大容量WebDAV协议费日本老牌网盘InfiniCLOUD(原TeraCloud)

TeraCloud是日本老牌费网盘 ,服务器地址位于日本,速度还不错,文件上传下载流量无限制。并且,服务器采用 Oracle Solaris 11 ZFS,支持ZFS快照,最重要的是支持通用WebDAV协议,Windows/Mac/Linux等操作系统可直接挂载,无需第三方软件,iOS/Android有大量的第三方APP支持该协议,亦可挂载到VPS或者NAS上。国内网盘仅有“坚果云”支持该协议,但有上传(每月1G)和下载(每月3G)的限制。自我管理的一体化云存储,可保护您的数据。

深度学习 30万+

三款费杀毒软件+clamAV

第一款antivir PE---完全费。。。。http://www.free-av.com/软件厂商: H+BEDV Datentechnik GmbH 软件主页: http://www.free-av.com/ 厂商邮件: virus@free-av.com 【软体名称】AntiVir PE Classic V7.0【软体语言】英文【软体简介】AntiVir PE Classi

ak47mig的网志(自家用,谢绝无聊斗鸡) 22万+

AVFoundation编程指南2-用AVPlayer播放视频

原文链接:chenjiang3的技术博客控制assets的播放,你可以使用AVPlayer对象。在播放的过程中,你可以使用AVPlayerItem对象来管理asset的呈现,AVPlayerItemTrack来管理track。要显示视频,需要使用AVPlayerLayer。 播放Assets 一个播放器就是控制asset播放的对象,比如开...

weixin_33698043的博客 896

基于AVpro视频播放器的展馆视频播放

using System.Collections; using System.Collections.Generic; using UnityEngine; using RenderHeads.Media.AVProVideo; 脚本不需要赋值,挂在物体上即可 public class VideoShowOne : MonoBehaviour { public static VideoShowOne showOne;bool IsPlay = false; private void Awa

kvkZzzz的博客 24万+
上一篇: iOS 内存分配(栈和堆)
下一篇: 深入NSTimer(iOS)
Janko_
博客等级 码龄10年 2粉丝 7原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值