//
// ViewController.swift
// LessonMediaPlayerWithSwift
//
// Created by 挤眼的家雀 on 15/4/9.
// Copyright (c) 2015年 徐栋. All rights reserved.
//
import UIKit
import MediaPlayer
import MobileCoreServices
class ViewController: UIViewController,ChooseFileDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate{
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
NSNotificationCenter.defaultCenter().addObserver(self, selector:"moviePlayerNotificationMethod:", name: MPMoviePlayerDidEnterFullscreenNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "moviePlayerNotificationMethod:", name: MPMoviePlayerDidExitFullscreenNotification, object: nil)
}
var moviewPlayer:MPMoviePlayerController!
var moviewPlayerViewController:MPMoviePlayerViewController!
var volumeSlider:UISlider!
func moviePlayerNotificationMethod(info:NSNotification)
{
print("\(info)")
switch info.name
{
case "MPMoviePlayerDidEnterFullscreenNotification":
moviewPlayer.play()
case "MPMoviePlayerDidExitFullscreenNotification":
moviewPlayer.pause()
default :
moviewPlayer.stop()
}
}
@IBAction func movieButton(sender: AnyObject)
{
switch sender.tag
{
case 101:
self.presentMoviePlayerViewControllerAnimated(moviewPlayerViewController)
case 102:
moviewPlayer.play()
case 103:
moviewPlayer.pause()
case 104:
moviewPlayer.stop()
default:
return
}
}
@IBAction func takeCamera(sender: AnyObject)
{
//a.检查相机是否可用 在用这些来源的时候最好检测以下设备是否支持;
if !UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)
{
print("没有相机")
return
}
else
{
self.imagePickerControllerStatus(UIImagePickerControllerSourceType.Camera)
}
}
// b.获取图片和视频
// UIImagePickerController 是系统提供的用来获取图片和视频的接口;
//
// 用UIImagePickerController 类来获取图片视频,大体分为以下几个步骤:
//
// 1. 初始化UIImagePickerController 类;
//
// 2. 设置UIImagePickerController 实例的数据来源类型(下面解释);
//
// 3. 设置设置代理;
//
// 4. 如果需要做图片修改的话设置allowsEditing =yes。
func imagePickerControllerStatus(imageState:UIImagePickerControllerSourceType)
{
var videoPicker = UIImagePickerController()
videoPicker.delegate = self
videoPicker.sourceType = imageState
videoPicker.mediaTypes = [kUTTypeMovie as String]//UMediaType包含KUTTypeImage,KUTTypeMovie
if imageState == UIImagePickerControllerSourceType.Camera//判断是否获取图片来源方式是否相机?!
{
self.videoRecorderController(videoPicker)//上面设置来源方式为相机,则调用视频录制方法。
}
videoPicker.allowsEditing = true
//上面只是实例了UIImagePickerController及其属性 在需要获取图片的时候需要弹出窗口调用
self.presentViewController(videoPicker, animated: true) { () -> Void in
}
}
func videoRecorderController(imagePick:UIImagePickerController)
{
imagePick.videoMaximumDuration = 30
imagePick.videoQuality = UIImagePickerControllerQualityType.TypeMedium
}
// UIImagePickerControllerMediaType 包含着KUTTypeImage 和KUTTypeMovie
// KUTTypeImage 包含:
//
// const CFStringRef kUTTypeImage ;抽象的图片类型
// const CFStringRef kUTTypeJPEG ;
// const CFStringRef kUTTypeJPEG2000 ;
// const CFStringRef kUTTypeTIFF ;
// const CFStringRef kUTTypePICT ;
// const CFStringRef kUTTypeGIF ;
// const CFStringRef kUTTypePNG ;
// const CFStringRef kUTTypeQuickTimeImage ;
// const CFStringRef kUTTypeAppleICNS
// const CFStringRef kUTTypeBMP;
// const CFStringRef kUTTypeICO;
//
// KUTTypeMovie 包含:
//
// const CFStringRef kUTTypeAudiovisualContent ;抽象的声音视频
// const CFStringRef kUTTypeMovie ;抽象的媒体格式(声音和视频)
// const CFStringRef kUTTypeVideo ;只有视频没有声音
// const CFStringRef kUTTypeAudio ;只有声音没有视频
// const CFStringRef kUTTypeQuickTimeMovie ;
// const CFStringRef kUTTypeMPEG ;
// const CFStringRef kUTTypeMPEG4 ;
// const CFStringRef kUTTypeMP3 ;
// const CFStringRef kUTTypeMPEG4Audio ;
// const CFStringRef kUTTypeAppleProtectedMPEG4Audio;
//
//我们还需要代理来获取我们选中的图片
//- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;当用户取消选取时调用;
//- (void)imagePickerController:(UIImagePickerController *)picker
// didFinishPickingMediaWithInfo:(NSDictionary *)info;
//当用户选取完成后调用;
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]){
// }
// func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject])
// {
let paths:NSArray = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
let documentsPath:String = paths[0] as! String
var filePath = documentsPath.stringByAppendingString("/video.mov")
let infoDic:NSDictionary = info as NSDictionary
let stateStr:NSString = infoDic.objectForKey(UIImagePickerControllerMediaType) as! NSString
if stateStr.isEqualToString(kUTTypeMovie as String)//判断是否视频文件!
{
var movieUrl:NSURL!
let mediaUrl:NSURL = (infoDic.objectForKey(UIImagePickerControllerMediaURL) as? NSURL)!
let mediaUrlStr = mediaUrl.absoluteString
movieUrl = infoDic.objectForKey(UIImagePickerControllerMediaURL) as? NSURL
let movieData = NSData(contentsOfURL: movieUrl)
var error:NSError?
if NSFileManager.defaultManager().fileExistsAtPath(filePath)
{
var dateFormat:NSDateFormatter = NSDateFormatter()
dateFormat.dateFormat = "yyyy-MM-dd-HH-mm"
var dateStr = dateFormat.stringFromDate(NSDate())
var fileName = "/video-\(dateStr).mov"
filePath = documentsPath.stringByAppendingString(fileName)
}
// 选取的信息都在info中,info 是一个字典。
// 字典中的键:
// NSString *const UIImagePickerControllerMediaType ;指定用户选择的媒体类型(文章最后进行扩展)
// NSString *const UIImagePickerControllerOriginalImage ;原始图片
// NSString *const UIImagePickerControllerEditedImage ;修改后的图片
// NSString *const UIImagePickerControllerCropRect ;裁剪尺寸
// NSString *const UIImagePickerControllerMediaURL ;媒体的URL
// NSString *const UIImagePickerControllerReferenceURL ;原件的URL
// NSString *const UIImagePickerControllerMediaMetadata;当来数据来源是照相机的时候这个值才有效
//
// 因为第一次运行,该路径并不存在,所以,写入方法需写在判断文件是否存在的外面
do {
try movieData?.writeToFile(filePath, options: NSDataWritingOptions.DataWritingAtomic)
self.moviewPlayer.contentURL = NSURL.fileURLWithPath(filePath)
}catch{
let alter:UIAlertController = UIAlertController(title: "Warning", message: "当前movie发生错误", preferredStyle: UIAlertControllerStyle.Alert)
}
// movieData?.writeToFile("\(filePath)", options: NSDataWritingOptions.DataWritingAtomic, error: &error)
// if error != nil
// {
// let alter:UIAlertController = UIAlertController(title: "警告", message: "当前movie发生错误", preferredStyle: UIAlertControllerStyle.Alert)
//
// }
// else
// {
// self.moviewPlayer.contentURL = NSURL.fileURLWithPath(filePath)
// self.moviewPlayer.play()
// }
self.dismissViewControllerAnimated(true, completion: { () -> Void in
})
}
}
@IBAction func chooseVideoforLibrary(sender: AnyObject)
{
self.imagePickerControllerStatus(UIImagePickerControllerSourceType.PhotoLibrary)
}