两种视频播放形式和 视频截图
2015-07-21 19:57
274 查看
#import "ViewController.h"
#import <MediaPlayer/MediaPlayer.h>
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()
@property(nonatomic,weak)UIImageView *image;
@property(nonatomic,strong)MPMoviePlayerController*controll;
@property(nonatomic,weak) UIView *avView;
@property(nonatomic,strong)AVAssetImageGenerator*gener;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *btn=[[UIButton alloc]init];
[btn setTitle:@"model出视频控制器" forState:UIControlStateNormal];
btn.backgroundColor=[UIColor grayColor];
btn.frame=CGRectMake(10, 50, 150, 50);
[self.view addSubview:btn];
[btn addTarget:self action:@selector(btnModelController) forControlEvents:UIControlEventTouchUpInside];
UIButton *btn1=[[UIButton alloc]init];
[btn1 setTitle:@"视图上显示视频" forState:UIControlStateNormal];
btn1.backgroundColor=[UIColor grayColor];
btn1.frame=CGRectMake(200, 50, 150, 50);
[self.view addSubview:btn1];
[btn1 addTarget:self action:@selector(btnShowInCurrentController) forControlEvents:UIControlEventTouchUpInside];
UIButton *btn2=[[UIButton alloc]init];
[btn2 setTitle:@"点击截图" forState:UIControlStateNormal];
btn2.backgroundColor=[UIColor grayColor];
btn2.frame=CGRectMake(self.view.bounds.size.width/2+20, 110, 100,100);
[self.view addSubview:btn2];
[btn2 addTarget:self action:@selector(cutImage) forControlEvents:UIControlEventTouchUpInside];
UIImageView *image=[[UIImageView alloc]init];
image.frame=CGRectMake(0, 110, self.view.bounds.size.width/2, self.view.bounds.size.width/2);
[self.view addSubview:image];
image.backgroundColor=[UIColor grayColor];
self.image=image;
UIView *avView=[[UIView alloc]init];
avView.frame=CGRectMake(0, 110+ self.view.bounds.size.width/2,self.view.bounds.size.width ,self.view.bounds.size.height-110-self.view.bounds.size.width/2);
avView.backgroundColor=[UIColor greenColor];
[self.view addSubview:avView];
self.avView=avView;
}
//model出来的控制器
-(void)btnModelController
{
NSURL *url=[NSURL fileURLWithPath: [[NSBundle mainBundle]pathForResource:@"Alizee_La_Isla_Bonita.mp4" ofType:nil]];
MPMoviePlayerViewController *vc=[[MPMoviePlayerViewController alloc]initWithContentURL:url];
[self presentViewController:vc animated:YES completion:nil];
}
-(void)btnShowInCurrentController
{
NSURL *url=[NSURL fileURLWithPath: [[NSBundle mainBundle]pathForResource:@"Alizee_La_Isla_Bonita.mp4" ofType:nil]];
self.controll=[[MPMoviePlayerController alloc]initWithContentURL:url];
[self.avView addSubview:self.controll.view];
self.controll.view.frame=self.avView.bounds;
//播放
[self.controll play];
}
//截图视频中某一时刻的图片
-(void)cutImage
{
NSURL *url=[NSURL fileURLWithPath: [[NSBundle mainBundle]pathForResource:@"Alizee_La_Isla_Bonita.mp4" ofType:nil]];
//获取资源
AVAsset *asset=[AVAsset assetWithURL:url];
//建立图片生成器
AVAssetImageGenerator*gener=[[AVAssetImageGenerator alloc]initWithAsset:asset];
self.gener=gener;
//获取此刻播放进度
NSTimeInterval time= [self.controll currentPlaybackTime];
CMTime cTime=CMTimeMake(time, 1.0);
NSValue *value=[NSValue valueWithCMTime:cTime];
//截图
[gener generateCGImagesAsynchronouslyForTimes:@[value] completionHandler:^(CMTime requestedTime, CGImageRef images, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error) {
//添加到主队列有问题,主线程没问题
dispatch_async(dispatch_get_main_queue(), ^{
UIImage *needImage=[UIImage imageWithCGImage:images];
[self.image setImage:needImage];
});
}];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end
#import <MediaPlayer/MediaPlayer.h>
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()
@property(nonatomic,weak)UIImageView *image;
@property(nonatomic,strong)MPMoviePlayerController*controll;
@property(nonatomic,weak) UIView *avView;
@property(nonatomic,strong)AVAssetImageGenerator*gener;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *btn=[[UIButton alloc]init];
[btn setTitle:@"model出视频控制器" forState:UIControlStateNormal];
btn.backgroundColor=[UIColor grayColor];
btn.frame=CGRectMake(10, 50, 150, 50);
[self.view addSubview:btn];
[btn addTarget:self action:@selector(btnModelController) forControlEvents:UIControlEventTouchUpInside];
UIButton *btn1=[[UIButton alloc]init];
[btn1 setTitle:@"视图上显示视频" forState:UIControlStateNormal];
btn1.backgroundColor=[UIColor grayColor];
btn1.frame=CGRectMake(200, 50, 150, 50);
[self.view addSubview:btn1];
[btn1 addTarget:self action:@selector(btnShowInCurrentController) forControlEvents:UIControlEventTouchUpInside];
UIButton *btn2=[[UIButton alloc]init];
[btn2 setTitle:@"点击截图" forState:UIControlStateNormal];
btn2.backgroundColor=[UIColor grayColor];
btn2.frame=CGRectMake(self.view.bounds.size.width/2+20, 110, 100,100);
[self.view addSubview:btn2];
[btn2 addTarget:self action:@selector(cutImage) forControlEvents:UIControlEventTouchUpInside];
UIImageView *image=[[UIImageView alloc]init];
image.frame=CGRectMake(0, 110, self.view.bounds.size.width/2, self.view.bounds.size.width/2);
[self.view addSubview:image];
image.backgroundColor=[UIColor grayColor];
self.image=image;
UIView *avView=[[UIView alloc]init];
avView.frame=CGRectMake(0, 110+ self.view.bounds.size.width/2,self.view.bounds.size.width ,self.view.bounds.size.height-110-self.view.bounds.size.width/2);
avView.backgroundColor=[UIColor greenColor];
[self.view addSubview:avView];
self.avView=avView;
}
//model出来的控制器
-(void)btnModelController
{
NSURL *url=[NSURL fileURLWithPath: [[NSBundle mainBundle]pathForResource:@"Alizee_La_Isla_Bonita.mp4" ofType:nil]];
MPMoviePlayerViewController *vc=[[MPMoviePlayerViewController alloc]initWithContentURL:url];
[self presentViewController:vc animated:YES completion:nil];
}
-(void)btnShowInCurrentController
{
NSURL *url=[NSURL fileURLWithPath: [[NSBundle mainBundle]pathForResource:@"Alizee_La_Isla_Bonita.mp4" ofType:nil]];
self.controll=[[MPMoviePlayerController alloc]initWithContentURL:url];
[self.avView addSubview:self.controll.view];
self.controll.view.frame=self.avView.bounds;
//播放
[self.controll play];
}
//截图视频中某一时刻的图片
-(void)cutImage
{
NSURL *url=[NSURL fileURLWithPath: [[NSBundle mainBundle]pathForResource:@"Alizee_La_Isla_Bonita.mp4" ofType:nil]];
//获取资源
AVAsset *asset=[AVAsset assetWithURL:url];
//建立图片生成器
AVAssetImageGenerator*gener=[[AVAssetImageGenerator alloc]initWithAsset:asset];
self.gener=gener;
//获取此刻播放进度
NSTimeInterval time= [self.controll currentPlaybackTime];
CMTime cTime=CMTimeMake(time, 1.0);
NSValue *value=[NSValue valueWithCMTime:cTime];
//截图
[gener generateCGImagesAsynchronouslyForTimes:@[value] completionHandler:^(CMTime requestedTime, CGImageRef images, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error) {
//添加到主队列有问题,主线程没问题
dispatch_async(dispatch_get_main_queue(), ^{
UIImage *needImage=[UIImage imageWithCGImage:images];
[self.image setImage:needImage];
});
}];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end
相关文章推荐
- [USACO 2012OPEN] Balanced Cow Subsets(meet in the middle + DFS)
- 大数模板
- 基于NodeJS进行前后端分离
- mongo配置副本集(replicaSet)
- Objective-C的对象模型和runtime机制
- 百练2755 神奇的口袋 背包水
- C语言 数组、函数应用实例篇
- Mac下修改环境变量
- Laravel 5基础教程(一)安装与部署 - 表严肃
- hdoj-2709-Sumsets【规律】
- 计算机网络基础知识(笔试题)
- 文件的写与读
- Maven通过命令创建web项目
- 2015 Multi-University Training Contest 1 Hdu 5289 Assignment
- 关于跨域问题
- Terminal
- 工作经验之-分页查询
- 工作经验之-分页查询
- Gym 100463A Crossings 逆序对
- js刷新窗口 (父窗口,以及点确定后的当前窗口) 一般用于页面数据刷新重新加载