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
.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
AVPlayer的使用本地视频的更多相关文章
- iOS 本地视频和网络视频流播放
需求:最近公司需要做一个楼宇对讲的功能:门口机(连接WIFI)拨号对室内机(对应的WIFI)的设备进行呼叫,室内机收到呼叫之后将对收到的数据进行UDP广播的转发,手机(连接对应的WIFI)收到视频流之 ...
- octopress 如何添加youku视频和本地视频(octopress how to add a youku video or a local video)
用octopress 官方的video tag 可以添加视频,但是由于国内经常使用的是youku,所以下面是如何添加youku视频到octopress的教程. 首先添加youku.rb文件到路径:oc ...
- iOS Dev (21) 用 AVPlayer 播放一个本地音频文件
iOS Dev (21) 用 AVPlayer 播放一个本地音频文件 作者:CSDN 大锐哥 博客:http://blog.csdn.net/prevention 前言 这篇文章与上一篇极其相似,要注 ...
- Swift - 使用Media Player播放本地视频,在线视频
Media Player框架用于播放本地视频.音频,也可以在线播放视频和音频. 1,播放器MPMovieControlStyle样式有如下几种: (1)None: 没有播放控制控件 (2)Embedd ...
- UIImagePickerController拍照/相册/录像/本地视频
1.导入系统库 #import <MobileCoreServices/MobileCoreServices.h> 2.遵守协议 <UIImagePickerControllerDe ...
- Android 跳转系统选择本地视频的功能
今天在项目开发的过程中产品要求添加选择本地视频的功能,于是就翻阅和查找各种资料,进行功能的开发,但是在开发过程中发现,各种不同的品牌的手机跳转至系统选择本地视频的功能结果不太一样,所以我就对一些主流的 ...
- video.js不能控制本地视频或者音频播放时长
问题: 把视频放到本地,然后对视频进行测试,想要控制视频或者音频的播放时长,没办法做到,每次拉动进度条,都会使得本地视频重新播放 原因: 所有浏览器默认js无法访问本地地址,也就是说js不能对本地文件 ...
- potplayer 网页调用potplayer播放本地视频
网页调用potplayer播放本地视频 CreateTime--2018年1月3日10:36:24 Author:Marydon 源码展示: <!DOCTYPE html> <h ...
- 照相、从相册上取照片、播放音频、播放本地视频、播放网络视频、MPMoviePlayerController
一.照相.从相册上去照片 1. 先判断是否支持照相功能 *判断当前设备是否支持照相功能,支持返回YES 否则返回NO 注意:模拟器不支持照相功能 把握一个原则只要是物理硬件相关的功能模拟器都不支持 例 ...
随机推荐
- PHP扩展开发相关总结
1.线程安全宏定义 在TSRM/TSRM.h文件中有如下定义 #define TSRMLS_FETCH() void ***tsrm_ls = (void ***) ts_resource_ex(0, ...
- mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
本人开发项目时,在从一个服务器导出数据库到另一服务器时,存储过程中,报Incorrect DECIMAL value: '0' for column '' at row -1错误. 原因: 存储过程中 ...
- 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息
第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...
- Git :fatal: 错误提示解决办法
1-fatal: remote origin already exists. 1.先 $ git remote rm origin 2.再 $ git remote add origin git@g ...
- mysql日志类型
在MySQL中共有4中日志:错误日志.二进制日志.查询日志和慢查询日志 一.错误日志 错误日志名 host_name.err,并默认在参数DATADIR指定的目录中写入日志文件.可使用 --log-e ...
- openwrt简单ipk生成及Makefile解释
前言 类似的文章其实网上比较多了,我写这个的目的: 1,网上文章良莠不齐,有些自己都没实际动手操作,随便复制粘贴,实际操作不可行. 2,基本只讲了操作,我当时最关心的Makefile文件的解释没有. ...
- html不使用cache数据
<HEAD> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> &l ...
- Hive UDF’S addMonths
our project use hive 0.10 , and in the hiveql , we need use addMonths function builtin in hive-0.11. ...
- Hadoop学习之SecondaryNameNode
在启动Hadoop时,NameNode节点上会默认启动一个SecondaryNameNode进程,使用JSP命令可以查看到.SecondaryNameNode光从字面上理解,很容易让人认为是NameN ...
- 孙鑫视频学习:VS2010中找不到【Tab order】菜单项
在学习孙鑫视频中,修改Tab顺序时,找不到VC6.0中提到的[Layout]->[Tab order]菜单项,但VC2010中可以用Ctrl+D调出来Tab顺序,或者[格式]->[Tab键 ...