转自:http://blog.csdn.net/mr_lucien/article/details/51153433
+(BOOL)authorizationCamera { NSString *mediaType = AVMediaTypeVideo; AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType]; if(authStatus == AVAuthorizationStatusDenied) { [self alerTitle:@"Please allow xxx to\n access your device's camera\n in\"Settings\"->\"Privacy\"->\n\"Camera\"." cancelStr:@"OK" okStr:nil massage:nil]; return NO; } return YES; }下面先来看一下MPMusicPlayerController的常用属性和方法:
属性 说明 @property (nonatomic, readonly) MPMusicPlaybackState playbackState 播放器状态,枚举类型: MPMusicPlaybackStateStopped:停止播放 MPMusicPlaybackStatePlaying:正在播放 MPMusicPlaybackStatePaused:暂停播放 MPMusicPlaybackStateInterrupted:播放中断 MPMusicPlaybackStateSeekingForward:向前查找 MPMusicPlaybackStateSeekingBackward:向后查找 @property (nonatomic) MPMusicRepeatMode repeatMode 重复模式,枚举类型: MPMusicRepeatModeDefault:默认模式,使用用户的首选项(系统音乐程序设置) MPMusicRepeatModeNone:不重复 MPMusicRepeatModeOne:单曲循环 MPMusicRepeatModeAll:在当前列表内循环 @property (nonatomic) MPMusicShuffleMode shuffleMode 随机播放模式,枚举类型: MPMusicShuffleModeDefault:默认模式,使用用户首选项(系统音乐程序设置) MPMusicShuffleModeOff:不随机播放 MPMusicShuffleModeSongs:按歌曲随机播放 MPMusicShuffleModeAlbums:按专辑随机播放 @property (nonatomic, copy) MPMediaItem *nowPlayingItem 正在播放的音乐项 @property (nonatomic, readonly) NSUInteger indexOfNowPlayingItem 当前正在播放的音乐在播放队列中的索引 @property(nonatomic, readonly) BOOL isPreparedToPlay 是否准好播放准备 @property(nonatomic) NSTimeInterval currentPlaybackTime 当前已播放时间,单位:秒 @property(nonatomic) float currentPlaybackRate 当前播放速度,是一个播放速度倍率,0表示暂停播放,1代表正常速度 类方法 说明 + (MPMusicPlayerController *)applicationMusicPlayer; 获取应用播放器,注意此类播放器无法在后台播放 + (MPMusicPlayerController *)systemMusicPlayer 获取系统播放器,支持后台播放 对象方法 说明 - (void)setQueueWithQuery:(MPMediaQuery *)query 使用媒体队列设置播放源媒体队列 - (void)setQueueWithItemCollection:(MPMediaItemCollection *)itemCollection 使用媒体项集合设置播放源媒体队列 - (void)skipToNextItem 下一曲 - (void)skipToBeginning 从起始位置播放 - (void)skipToPreviousItem 上一曲 - (void)beginGeneratingPlaybackNotifications 开启播放通知,注意不同于其他播放器,MPMusicPlayerController要想获得通知必须首先开启,默认情况无法获得通知 - (void)endGeneratingPlaybackNotifications 关闭播放通知 - (void)prepareToPlay 做好播放准备(加载音频到缓冲区),在使用play方法播放时如果没有做好准备回自动调用该方法 - (void)play 开始播放 - (void)pause 暂停播放 - (void)stop 停止播放 - (void)beginSeekingForward 开始向前查找(快进) - (void)beginSeekingBackward 开始向后查找(快退) - (void)endSeeking 结束查找 通知 说明 (注意:要想获得MPMusicPlayerController通知必须首先调用beginGeneratingPlaybackNotifications开启通知) MPMusicPlayerControllerPlaybackStateDidChangeNotification 播放状态改变 MPMusicPlayerControllerNowPlayingItemDidChangeNotification 当前播放音频改变 MPMusicPlayerControllerVolumeDidChangeNotification 声音大小改变 MPMediaPlaybackIsPreparedToPlayDidChangeNotification 准备好播放在iOS中播放视频可以使用MediaPlayer.framework种的MPMoviePlayerController类来完成,它支持本地视频和网络视频播放。这个类实现了MPMediaPlayback协议,因此具备一般的播放器控制功能,例如播放、暂停、停止等。但是MPMediaPlayerController自身并不是一个完整的视图控制器,如果要在UI中展示视频需要将view属性添加到界面中。下面列出了MPMoviePlayerController的常用属性和方法:
属性 说明 @property (nonatomic, copy) NSURL *contentURL 播放媒体URL,这个URL可以是本地路径,也可以是网络路径 @property (nonatomic, readonly) UIView *view 播放器视图,如果要显示视频必须将此视图添加到控制器视图中 @property (nonatomic, readonly) UIView *backgroundView 播放器背景视图 @property (nonatomic, readonly) MPMoviePlaybackState playbackState 媒体播放状态,枚举类型: MPMoviePlaybackStateStopped:停止播放 MPMoviePlaybackStatePlaying:正在播放 MPMoviePlaybackStatePaused:暂停 MPMoviePlaybackStateInterrupted:中断 MPMoviePlaybackStateSeekingForward:向前定位 MPMoviePlaybackStateSeekingBackward:向后定位 @property (nonatomic, readonly) MPMovieLoadState loadState 网络媒体加载状态,枚举类型: MPMovieLoadStateUnknown:位置类型 MPMovieLoadStatePlayable: MPMovieLoadStatePlaythroughOK:这种状态如果shouldAutoPlay为YES将自动播放 MPMovieLoadStateStalled:停滞状态 @property (nonatomic) MPMovieControlStyle controlStyle 控制面板风格,枚举类型: MPMovieControlStyleNone:无控制面板 MPMovieControlStyleEmbedded:嵌入视频风格 MPMovieControlStyleFullscreen:全屏 MPMovieControlStyleDefault:默认风格 @property (nonatomic) MPMovieRepeatMode repeatMode; 重复播放模式,枚举类型: MPMovieRepeatModeNone:不重复,默认值 MPMovieRepeatModeOne:重复播放 @property (nonatomic) BOOL shouldAutoplay 当网络媒体缓存到一定数据时是否自动播放,默认为YES @property (nonatomic, getter=isFullscreen) BOOL fullscreen 是否全屏展示,默认为NO,注意如果要通过此属性设置全屏必须在视图显示完成后设置,否则无效 @property (nonatomic) MPMovieScalingMode scalingMode 视频缩放填充模式,枚举类型: MPMovieScalingModeNone:不进行任何缩放 MPMovieScalingModeAspectFit:固定缩放比例并且尽量全部展示视频,不会裁切视频 MPMovieScalingModeAspectFill:固定缩放比例并填充满整个视图展示,可能会裁切视频 MPMovieScalingModeFill:不固定缩放比例压缩填充整个视图,视频不会被裁切但是比例失衡 @property (nonatomic, readonly) BOOL readyForDisplay 是否有相关媒体被播放 @property (nonatomic, readonly) MPMovieMediaTypeMask movieMediaTypes 媒体类别,枚举类型: MPMovieMediaTypeMaskNone:未知类型 MPMovieMediaTypeMaskVideo:视频 MPMovieMediaTypeMaskAudio:音频 @property (nonatomic) MPMovieSourceType movieSourceType 媒体源,枚举类型: MPMovieSourceTypeUnknown:未知来源 MPMovieSourceTypeFile:本地文件 MPMovieSourceTypeStreaming:流媒体(直播或点播) @property (nonatomic, readonly) NSTimeInterval duration 媒体时长,如果未知则返回0 @property (nonatomic, readonly) NSTimeInterval playableDuration 媒体可播放时长,主要用于表示网络媒体已下载视频时长 @property (nonatomic, readonly) CGSize naturalSize 视频实际尺寸,如果未知则返回CGSizeZero @property (nonatomic) NSTimeInterval initialPlaybackTime 起始播放时间 @property (nonatomic) NSTimeInterval endPlaybackTime 终止播放时间 @property (nonatomic) BOOL allowsAirPlay 是否允许无线播放,默认为YES @property (nonatomic, readonly, getter=isAirPlayVideoActive) BOOL airPlayVideoActive 当前媒体是否正在通过AirPlay播放 @property(nonatomic, readonly) BOOL isPreparedToPlay 是否准备好播放 @property(nonatomic) NSTimeInterval currentPlaybackTime 当前播放时间,单位:秒 @property(nonatomic) float currentPlaybackRate 当前播放速度,如果暂停则为0,正常速度为1.0,非0数据表示倍率 对象方法 说明 - (instancetype)initWithContentURL:(NSURL *)url 使用指定的URL初始化媒体播放控制器对象 - (void)setFullscreen:(BOOL)fullscreen animated:(BOOL)animated 设置视频全屏,注意如果要通过此方法设置全屏则必须在其视图显示之后设置,否则无效 - (void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option 获取在指定播放时间的视频缩略图,第一个参数是获取缩略图的时间点数组;第二个参数代表时间点精度,枚举类型: MPMovieTimeOptionNearestKeyFrame:时间点附近 MPMovieTimeOptionExact:准确时间 - (void)cancelAllThumbnailImageRequests 取消所有缩略图获取请求 - (void)prepareToPlay 准备播放,加载视频数据到缓存,当调用play方法时如果没有准备好会自动调用此方法 - (void)play 开始播放 - (void)pause 暂停播放 - (void)stop 停止播放 - (void)beginSeekingForward 向前定位 - (void)beginSeekingBackward 向后定位 - (void)endSeeking 停止快进/快退 通知 说明 MPMoviePlayerScalingModeDidChangeNotification 视频缩放填充模式发生改变 MPMoviePlayerPlaybackDidFinishNotification 媒体播放完成或用户手动退出,具体完成原因可以通过通知userInfo中的key为MPMoviePlayerPlaybackDidFinishReasonUserInfoKey的对象获取 MPMoviePlayerPlaybackStateDidChangeNotification 播放状态改变,可配合playbakcState属性获取具体状态 MPMoviePlayerLoadStateDidChangeNotification 媒体网络加载状态改变 MPMoviePlayerNowPlayingMovieDidChangeNotification 当前播放的媒体内容发生改变 MPMoviePlayerWillEnterFullscreenNotification 将要进入全屏 MPMoviePlayerDidEnterFullscreenNotification 进入全屏后 MPMoviePlayerWillExitFullscreenNotification 将要退出全屏 MPMoviePlayerDidExitFullscreenNotification 退出全屏后 MPMoviePlayerIsAirPlayVideoActiveDidChangeNotification 当媒体开始通过AirPlay播放或者结束AirPlay播放 MPMoviePlayerReadyForDisplayDidChangeNotification 视频显示状态改变 MPMovieMediaTypesAvailableNotification 确定了媒体可用类型后 MPMovieSourceTypeAvailableNotification 确定了媒体来源后 MPMovieDurationAvailableNotification 确定了媒体播放时长后 MPMovieNaturalSizeAvailableNotification 确定了媒体的实际尺寸后 MPMoviePlayerThumbnailImageRequestDidFinishNotification 缩略图请求完成之后 MPMediaPlaybackIsPreparedToPlayDidChangeNotification 做好播放准备后下面看一下在iOS如何拍照和录制视频。在iOS中要拍照和录制视频最简单的方法就是使用UIImagePickerController。UIImagePickerController继承于UINavigationController,前面的文章中主要使用它来选取照片,其实UIImagePickerController的功能不仅如此,它还可以用来拍照和录制视频。首先看一下这个类常用的属性和方法:
属性 说明 @property(nonatomic) UIImagePickerControllerSourceType sourceType 拾取源类型,sourceType是枚举类型: UIImagePickerControllerSourceTypePhotoLibrary:照片库 ,默认值 UIImagePickerControllerSourceTypeCamera:摄像头 UIImagePickerControllerSourceTypeSavedPhotosAlbum:相簿 @property(nonatomic,copy) NSArray *mediaTypes 媒体类型,默认情况下此数组包含kUTTypeImage,所以拍照时可以不用设置;但是当要录像的时候必须设置,可以设置为kUTTypeVideo(视频,但不带声音)或者kUTTypeMovie(视频并带有声音) @property(nonatomic) NSTimeInterval videoMaximumDuration 视频最大录制时长,默认为10 s @property(nonatomic) UIImagePickerControllerQualityType videoQuality 视频质量,枚举类型: UIImagePickerControllerQualityTypeHigh:高清质量 UIImagePickerControllerQualityTypeMedium:中等质量,适合WiFi传输 UIImagePickerControllerQualityTypeLow:低质量,适合蜂窝网传输 UIImagePickerControllerQualityType640x480:640*480 UIImagePickerControllerQualityTypeIFrame1280x720:1280*720 UIImagePickerControllerQualityTypeIFrame960x540:960*540 @property(nonatomic) BOOL showsCameraControls 是否显示摄像头控制面板,默认为YES @property(nonatomic,retain) UIView *cameraOverlayView 摄像头上覆盖的视图,可用通过这个视频来自定义拍照或录像界面 @property(nonatomic) CGAffineTransform cameraViewTransform 摄像头形变 @property(nonatomic) UIImagePickerControllerCameraCaptureMode cameraCaptureMode 摄像头捕获模式,捕获模式是枚举类型: UIImagePickerControllerCameraCaptureModePhoto:拍照模式 UIImagePickerControllerCameraCaptureModeVideo:视频录制模式 @property(nonatomic) UIImagePickerControllerCameraDevice cameraDevice 摄像头设备,cameraDevice是枚举类型: UIImagePickerControllerCameraDeviceRear:前置摄像头 UIImagePickerControllerCameraDeviceFront:后置摄像头 @property(nonatomic) UIImagePickerControllerCameraFlashMode cameraFlashMode 闪光灯模式,枚举类型: UIImagePickerControllerCameraFlashModeOff:关闭闪光灯 UIImagePickerControllerCameraFlashModeAuto:闪光灯自动 UIImagePickerControllerCameraFlashModeOn:打开闪光灯 类方法 说明 + (BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType 指定的源类型是否可用,sourceType是枚举类型: UIImagePickerControllerSourceTypePhotoLibrary:照片库 UIImagePickerControllerSourceTypeCamera:摄像头 UIImagePickerControllerSourceTypeSavedPhotosAlbum:相簿 + (NSArray *)availableMediaTypesForSourceType:(UIImagePickerControllerSourceType)sourceType 指定的源设备上可用的媒体类型,一般就是图片和视频 + (BOOL)isCameraDeviceAvailable:(UIImagePickerControllerCameraDevice)cameraDevice 指定的摄像头是否可用,cameraDevice是枚举类型: UIImagePickerControllerCameraDeviceRear:前置摄像头 UIImagePickerControllerCameraDeviceFront:后置摄像头 + (BOOL)isFlashAvailableForCameraDevice:(UIImagePickerControllerCameraDevice)cameraDevice 指定摄像头的闪光灯是否可用 + (NSArray *)availableCaptureModesForCameraDevice:(UIImagePickerControllerCameraDevice)cameraDevice 获得指定摄像头上的可用捕获模式,捕获模式是枚举类型: UIImagePickerControllerCameraCaptureModePhoto:拍照模式 UIImagePickerControllerCameraCaptureModeVideo:视频录制模式 对象方法 说明 - (void)takePicture 编程方式拍照 - (BOOL)startVideoCapture 编程方式录制视频 - (void)stopVideoCapture 编程方式停止录制视频 代理方法 说明 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 媒体拾取完成 - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 取消拾取 扩展方法(主要用于保存照片、视频到相簿) 说明 UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo) 保存照片到相簿 UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(NSString *videoPath) 能否将视频保存到相簿 void UISaveVideoAtPathToSavedPhotosAlbum(NSString *videoPath, id completionTarget, SEL completionSelector, void *contextInfo) 保存视频到相簿