iOS-AVPlayer使用
1引入AVFoundation.framework框架
2引入头文件<AVFoundation/AVFoundation.h>,并拖入需要播放的视频文件
代码如下:
自定义播放的View,PlayerView
PlayerView.h
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface PlayerView : UIView
//播放器和当前view进行关联
- (void)setPlayer:(AVPlayer *)player;
@end
PlayerView.m文件代码如下:
#import "PlayerView.h"
@implementation PlayerView
+ (Class)layerClass {
return [AVPlayerLayer class];
}
- (void)setPlayer:(AVPlayer *)player {
[(AVPlayerLayer *)[self layer] setPlayer:player];
}
@end
控制器代码如下:
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
#import "PlayerView.h"
@interface ViewController ()
{
PlayerView* _playerView;
UISlider* _proSlider;
AVPlayer* _player;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
_playerView = [[PlayerView alloc] initWithFrame:CGRectMake(0, 20, 320, 240)];
[self.view addSubview:_playerView];
_proSlider = [[UISlider alloc] initWithFrame:CGRectMake(50, 300, 220, 20)];
_proSlider.minimumValue = 0.0;
_proSlider.maximumValue = 1.0;
_proSlider.value = 0.0;
[_proSlider addTarget:self action:@selector(setProgress) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:_proSlider];
UIButton* playButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
playButton.frame = CGRectMake(110, 340, 100, 40);
[playButton setTitle:@"play" forState:UIControlStateNormal];
[playButton addTarget:self action:@selector(play) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:playButton];
UIButton* stopButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
stopButton.frame = CGRectMake(110, 390, 100, 40);
[stopButton setTitle:@"stop" forState:UIControlStateNormal];
[stopButton addTarget:self action:@selector(stop) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:stopButton];
NSString* path = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"mp4"];
NSURL* url = [NSURL fileURLWithPath:path];
//资源类
AVURLAsset* asset = [AVURLAsset assetWithURL:url];
//加载
[asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler:^{
//得到状态
AVKeyValueStatus status = [asset statusOfValueForKey:@"tracks" error:nil];
if (status == AVKeyValueStatusLoaded) {
//AVPlayer->AVPlayerItem->AVURLAsset
AVPlayerItem* item = [AVPlayerItem playerItemWithAsset:asset];
//播放器
_player = [[AVPlayer alloc] initWithPlayerItem:item];
//播放器进行关联
[_playerView setPlayer:_player];
//进度监听
//CMTime 1帧 1帧/每秒
[_player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:dispatch_get_global_queue(0, 0) usingBlock:^(CMTime time) {
//当前时间 / 总时间
CMTime currentTime = _player.currentItem.currentTime;
CMTime duration = _player.currentItem.duration;
float pro = CMTimeGetSeconds(currentTime) / CMTimeGetSeconds(duration);
dispatch_async(dispatch_get_main_queue(), ^{
[_proSlider setValue:pro animated:YES];
});
}];
}
}];
}
//设置进度
- (void)setProgress{
//总时间 * 进度 = 当前时间
CMTime duration = _player.currentItem.duration;
CMTime currentTime = CMTimeMultiplyByFloat64(duration, _proSlider.value);
//从当前时间播放
[_player seekToTime:currentTime];
}
- (void)play{
[_player play];
}
- (void)stop{
[_player pause];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
iOS-AVPlayer使用的更多相关文章
- iOS AVPlayer视频播放器
代码地址如下:http://www.demodashi.com/demo/11168.html 一.运行效果 二.实现过程 ①.创建播放器avPlayer //创建播放器 url = [url str ...
- iOS - AVPlayer 音视频播放
前言 NS_CLASS_AVAILABLE(10_7, 4_0) @interface AVPlayer : NSObject @available(iOS 4.0, *) public class ...
- iOS AvPlayer AvAudioPlayer音频的后台播放问题
iOS 4开始引入的multitask,我们可以实现像ipod程序那样在后台播放音频了.如果音频操作是用苹果官方的AVFoundation.framework实现,像用AvAudioPlayer,Av ...
- 【转】iOS:AvPlayer设置播放速度不生效的解决办法
现象: 项目有一个需求是实现视频的慢速播放,使用的是封装的AvPlayer,但是设置时发现比如设置rate为0.5,0.1,0.01都是一样的速度,非常疑惑.后来经过查找资料,发现iOS10对这个AP ...
- iOS AVPlayer 学习
1 .使用环境: 在实际开发过程中 有需要展示流媒体的模块 ,需求非常简单 :播放 和 暂停 ,其实这个时候有很多选择 ,可以选择 MPMoviePlayerController(MediaPlaye ...
- iOS AVPlayer 的使用实践
前两天在网上看到一篇博客,介绍AVPlayer的使用,但是只简单介绍了一下单个的本地文件如何播放,心血来潮,就想着做一个类似于播放器的东西,能够实现播放网络歌曲,循环播放多首音乐,下面我们来实现一下 ...
- ios AVPlayer参考
http://www.cnblogs.com/kenshincui/p/4186022.html#avPlayer
- ios avplayer 监控播放进度
var timeObserver = avPlayerVC.player?.addPeriodicTimeObserver(forInterval: CMTime.init(value: , ti ...
- iOS AVKit音视频播放全面详解
公司项目中经常要用到音视频处理,也需要去定制一些东西,然后整理这些音视频处理就显得尤为重要!方便自己和广大朋友学习收藏! 以下参考连接特别重要: 苹果官方:AVKit API 苹果官方:AVFound ...
- iOS 视频全屏功能 学习
项目中,也写过类似"视频全屏"的功能, 前一阵子读到今日头条 的一篇技术文章,详细介绍三种旋转方法差异优劣最终择取.文章从技术角度看写的非常好,从用户角度看,也用过多家有视频功能的 ...
随机推荐
- 进程间的通信----队列queue
import multiprocessing def download_from_web(q): """下载数据""" # 模拟下载数据 d ...
- 14 Vue列表渲染
列表渲染 用 v-for 把一个数组对应为一组元素(for循环) 我们可以用 v-for 指令基于一个数组来渲染一个列表. v-for 指令需要使用 item in items 形式的特殊语法, 其中 ...
- MySQL优化时怎么入手?慢查询怎么优化?
1.数据类型优化 2.创建高性能索引 3.架构底层配置方面 4.硬件 慢查询: 1.定位慢查询 首先先打开慢查询日志设置慢查询时间 2.分析慢查询(使用explain工具分析sql语句) 3.优化慢查 ...
- 第四章 初始CSS
一.引入样式 1.行内样式表 <h1 style="color: red;font-size: 18px;">10-30</h1> 2.内部样式表(在hea ...
- Greenplum 监控segment是否正常
在greenplum运行过程中,Segement很有可能因为压力大出现不可用的情况, 主备Segement发现了切换,或是主备Segement网络断开,数据不同步了.在 默认情况下,如果GreenPl ...
- Wireshark抓取本地回环接口数据包 RawCap.exe
Wireshark提供了winpcap可以抓取远程网卡数据包...但我尝试了不成功.后来发现RawCap.exe不仅可以抓取回环接口数据包,远程跑了拿到pcap文件再打开用起来比winpcap更方便最 ...
- Jquery检验输入值
1.检验邮件 function chkEmail(strEmail) { if (!/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w ...
- SPOJ 2939 QTREE5 LCT
维护信息的方式十分巧妙~ 维护每一棵 splay 中深度最浅,深度最深的点距离最近的白点. 这样非常方便维护,进行区间合并,进行子树维护 很多时候在维护东西的时候最大/最小/深度最小/深度最大会相对容 ...
- 爬虫(十七):scrapy分布式原理
一:scrapy工作流程 scrapy单机架构: 单主机爬虫架构: 分布式爬虫架构: 这里重要的就是我的队列通过什么维护?这里一般我们通过Redis为维护,Redis,非关系型数据库,Key-Valu ...
- 带你了解HTTP协议(一)
本篇文章篇幅比较长,先来个思维导图预览一下. 一张图带你看完本篇文章 一.概述 1.计算机网络体系结构分层 计算机网络体系结构分层 2.TCP/IP 通信传输流 利用 TCP/IP 协议族进行 ...