2019独角兽企业重金招聘Python工程师标准>>> hot3.png

//
//  ViewController.m
//  UIImagePickerController

//  Created by Kenshin Cui on 14/04/05.
//  Copyright (c) 2014年 cmjstudio. All rights reserved.
//AVFoundation.framework
//MediaPlayer.framework
//MobileCoreSevices.framework

#import "ViewController.h"
#import <MobileCoreServices/MobileCoreServices.h>
#import <AVFoundation/AVFoundation.h>

@interface ViewController ()<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
@property (assign,nonatomic) int isVideo;//是否录制视频,如果为1表示录制视频,0代表拍照
@property (strong,nonatomic) UIImagePickerController *imagePicker;
@property (weak, nonatomic) IBOutlet UIImageView *photo;//照片展示视图
@property (strong ,nonatomic) AVPlayer *player;//播放器,用于录制完视频后播放视频

@end

@implementation ViewController

#pragma mark - 控制器视图事件
- (void)viewDidLoad {
    [super viewDidLoad];
    //通过这里设置时拍照还是录制视频
    _isVideo=YES;
}

#pragma mark - UI事件
//点击拍照按钮
- (IBAction)takeClick:(UIButton *)sender {
    [self presentViewController:self.imagePicker animated:YES completion:nil];
}

#pragma mark - UIImagePickerController代理方法
//完成
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    NSString *mediaType=[info objectForKey:UIImagePickerControllerMediaType];
    if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {//如果时拍照
        UIImage *image;
        //如果允许编辑则获得编辑后的照片,否则获取原始照片
        if (self.imagePicker.allowsEditing) {
            image=[info objectForKey:UIImagePickerControllerEditedImage];//获取编辑后的照片
        }else{
            image=[info objectForKey:UIImagePickerControllerOriginalImage];//获取原始照片
        }
        [self.photo setImage:image];//显示照片
        UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);//保存到相簿
    }else if([mediaType isEqualToString:(NSString *)kUTTypeMovie]){//如果是录制视频
        NSLog(@"video...");
        NSURL *url=[info objectForKey:UIImagePickerControllerMediaURL];//视频路径
        NSString *urlStr=[url path];
        if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(urlStr)) {
            //保存视频到相簿,注意也可以使用ALAssetsLibrary来保存
            UISaveVideoAtPathToSavedPhotosAlbum(urlStr, self, @selector(video:didFinishSavingWithError:contextInfo:), nil);//保存视频到相簿
        }
        
    }

[self dismissViewControllerAnimated:YES completion:nil];
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
    NSLog(@"取消");
}

#pragma mark - 私有方法
-(UIImagePickerController *)imagePicker{
    if (!_imagePicker) {
        _imagePicker=[[UIImagePickerController alloc]init];
        _imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera;//设置image picker的来源,这里设置为摄像头
        _imagePicker.cameraDevice=UIImagePickerControllerCameraDeviceRear;//设置使用哪个摄像头,这里设置为后置摄像头
        if (self.isVideo) {
            _imagePicker.mediaTypes=@[(NSString *)kUTTypeMovie];
            _imagePicker.videoQuality=UIImagePickerControllerQualityTypeIFrame1280x720;
            _imagePicker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModeVideo;//设置摄像头模式(拍照,录制视频)
            
        }else{
            _imagePicker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModePhoto;
        }
        _imagePicker.allowsEditing=YES;//允许编辑
        _imagePicker.delegate=self;//设置代理,检测操作
    }
    return _imagePicker;
}

//视频保存后的回调
- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
    if (error) {
        NSLog(@"保存视频过程中发生错误,错误信息:%@",error.localizedDescription);
    }else{
        NSLog(@"视频保存成功.");
        //录制完之后自动播放
        NSURL *url=[NSURL fileURLWithPath:videoPath];
        _player=[AVPlayer playerWithURL:url];
        AVPlayerLayer *playerLayer=[AVPlayerLayer playerLayerWithPlayer:_player];
        playerLayer.frame=self.photo.frame;
        [self.photo.layer addSublayer:playerLayer];
        [_player play];
        
    }
}
@end

转载于:https://my.oschina.net/BurningOC/blog/523294

takePic and Videos相关推荐

  1. 视频分割--Learning to Segment Instances in Videos with Spatial Propagation Network

    Learning to Segment Instances in Videos with Spatial Propagation Network CVPRW2017 https://github.co ...

  2. 人群密度估计--Spatiotemporal Modeling for Crowd Counting in Videos

    Spatiotemporal Modeling for Crowd Counting in Videos ICCV2017 针对视频人群密度估计问题,这里主要侧重视频中的 temporal infor ...

  3. 视频动作识别--Two-Stream Convolutional Networks for Action Recognition in Videos

    Two-Stream Convolutional Networks for Action Recognition in Videos NIPS2014 http://www.robots.ox.ac. ...

  4. 视频中的运动特征--Learning Motion Patterns in Videos

    Learning Motion Patterns in Videos CVPR2017 Torch code: http://thoth.inrialpes.fr/research/mpnet 本文要 ...

  5. 201904:Action recognition based on 2D skeletons extracted from RGB videos

    论文标题:Action recognition based on 2D skeletons extracted from RGB videos 发表时间:02 April 2019 解决问题/主要思想 ...

  6. opencv-Getting Started with Videos

    1.opencv库简单操作视频 # coding = utf-8 # Getting Started with Videos import cv2 import numpy as np # 创建捕获视 ...

  7. fedora30删除 gnome自带的Videos软件

    gnome3自带的Videos粗看感觉听简洁挺流畅的,可是细看不仅电影中文名乱码显示还搞得字幕慢半拍,这一点完全不能忍,太难受了. 还是Vlc牛.而且Videos在应用商店不能卸载,命令行搜索已安装软 ...

  8. Pexels Videos – 可以免费商业使用的短视频

    Pexels 是一个巨大的平台,提供免费的精美照片,很多设计师和博客每天用它来寻找他们的个人和商业项目的照片.现在我们想介绍 Pexels 视频,他是用来帮助你找到免费的视频.所有的 Pexels 视 ...

  9. DanmuVis: Visualizing Danmu Content Dynamics and AssociatedViewer Behaviors in Online Videos

    目录 作者:北京大学可视化与可视分析研究小组,一作陈帅 发表:EuroVis2022 一.弹幕数据的优势与特点 二.本文的切入点 三.工作难点 四.本文解决方案:DanmuVis系统 系统包含数据处理 ...

最新文章

  1. C# Levenshtein计算字符串的相似度
  2. linux内核pwn,[内核pwn] 环境搭建
  3. Coursera课程Python for everyone:Quiz: Multi-Table Relational SQL
  4. javese 5 中的枚举类及单例模式
  5. 【MySql】 BlackHole :黑洞引擎
  6. 基于Python语言使用RabbitMQ消息队列(一)
  7. P2280 [HNOI2003]激光炸弹
  8. angularjs控制器之间的数据共享与通信
  9. SCCM报表点和SQL Server的报表服务集成, 随心所欲创建报表?
  10. 嵌入式组态软件HMImaker(绿色版人机界面组态软件)
  11. Kafka 异步消息也会阻塞?记一次 Dubbo 频繁超时排查过程
  12. widnows监控linux 内存,在windows下监控linux的cpu和内存
  13. 计算机专业学习目标计划怎么写,制定计算机学习计划范文3篇
  14. 彩虹网盘外链程序源码V5.1|网盘外链源码
  15. c语言杖举,形近字组词。直()植()杖()仗()提()题()漫()慢()
  16. 高三学习计划作文计算机专业,高三学习计划作文.docx
  17. Zepeto正加速摆脱“捏脸”应用的传统印象,成为亚洲最大虚拟世界平台
  18. 神奇的 ViewDragHelper,让你轻松定制拥有拖拽能力的 ViewGroup
  19. Unity检测IOS刘海屏
  20. Python——from collections import namedtuple

热门文章

  1. c++怎么将文件中的数据读出并赋值给字符串_web前端开发过程中如何写JavaScript程序?...
  2. 设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别)
  3. 聊聊同步、异步、阻塞与非阻塞
  4. MySQL提高插入数据的效率(结合JDBC)
  5. 你必须知道的CSS盒模型,面试建议
  6. kafka 重新分配节点_Kafka控制器-分区重分配
  7. Python实现三级菜单(字典和列表的使用)
  8. Ubuntu 18.04 下如何配置mysql 及 配置远程连接
  9. django开发商城(提供初始数据,商城首页及购物车)
  10. 51nod 1100:斜率最大