iOS 多媒体 图形图像及动画 iOS Sqlite数据库 iOS 多媒体 内容概述 为多媒体开发做准备 使用AVAudioPlayer类播放音乐 使用AVAudioPlayerDelegate处理播放中断及续播 使用AVAudioRecorder实现录音 使用AVAudioRecorderDelegate代理处理录音的中断和续录 使用MPMoviePlayerController类播放视频 捕获视频缩略图 使用MPMediaPickerController类选择系统音乐 使用UIImagePickerController进行拍照和录像 21.1 为多媒体开发做准备 iOS中的多媒体技术使的设备访问系统的音频、视频成为可能,iOS SDK 为多媒体开发提供了多个开发框架,他们是AVFoundation.framework、CoreMedia.framework、MediaPlayer.framework、MobileCoreServices.framework和AssetsLibrary.framework。这些框架中MediaPlayer.framework用来实现音视频的播放,AVFoundation.framework框架用来实现音视频的录制,AssetsLibrary.framework框架用来访问系统的多媒体文件等等。 在使用这些框架时,首先要将其添加到项目中来,实现步骤如下: 创建一个项目。 选择项目名称右边的"Target",在右边的"Build Phases"中,选择"Link Binary With Libraries"中,点击"+"号添加他们。 如下图21.1所示。 21.2 使用AVAudioPlayer类播放音乐 播放音乐是iOS多媒体中的最基本功能,我们可以使用AVAudioPlayer类来播放音乐。该类在AVFoundation.framework框架中,所以在使用之前需要导入该框架。使用AVAudioPlayer类播放音乐需要知道播放音乐的url路径,所以需要创建NSURL对象。 下面我们创建一个可以播放音乐的项目,该项目在界面上添加两个按钮,分别用来播放和停止音乐,添加一个进度滑块UISlider来控制播放音量。实现步骤如下所示: 创建一个项目,在界面上添加两个按钮和一个UISlider。 在头文件中导入播放器头文件,并添加UISlider属性、AVAudioPlayer属性和播放和停止播放方法。 #import <UIKit/UIKit.h> // 导入头文件 #import <AVFoundation/AVFoundation.h> @interface AmakerViewController : UIViewController{ } // 播放方法 - (IBAction)play:(id)sender; // 停止播放方法 - (IBAction)stop:(id)sender; // 音量控制滑块 @property (strong, nonatomic) IBOutlet UISlider *mySlider; // 音乐播放器类 @property(strong,nonatomic) AVAudioPlayer *myPlayer; @end 在.m中的viewDidLoad方法中,获得播放音乐文件的NSURL路径,并根据它实例化AVAudioPlayer。 - (void)viewDidLoad { [super viewDidLoad]; // 音乐路径 NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"test" ofType:@"mp3"]]; // 实例化音乐播放器 myPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil]; } 分别实现播放方法和停止播放方法,调用AVAudioPlayer的play方法来播放音乐,调用AVAudioPlayer的stop方法来停止播放音乐。通过改变AVAudioPlayer的volume属性来控制音量。 // 播放方法实现 - (IBAction)play:(id)sender { if (myPlayer!=nil) { [myPlayer play]; } } // 停止播放方法实现 - (IBAction)stop:(id)sender { if (myPlayer!=nil) { [myPlayer stop]; } } // 改变音量 - (IBAction)change:(id)sender { if (myPlayer!=nil) { myPlayer.volume = mySlider.value; } } 程序运行结果如下所示。 另外,为了程序更加流畅,我们可以将播放音乐的代码放到另外一个线程中去执行,代码如下所示。 // 播放方法实现 - (IBAction)play:(id)sender { if (myPlayer!=nil) { // 启动另外一个线程来播放,是程序更加流畅 dispatch\_async(dispatch\_get\_global\_queue(DISPATCH\_QUEUE\_PRIORITY\_DEFAULT, 0), ^{ [myPlayer play]; }); } } 21.3 使用AVAudioPlayerDelegate处理播放中断及续播 当我们在播放音乐时,突然打来的电话会中断我们的音乐,我们可以使用AVAudioPlayer的代理类AVAudioPlayerDelegate来处理中断并继续播放。下面我们来看如何实现这一功能。 创建一个项目,在界面上添加两个按钮和一个UISlider。 在头文件中导入播放器头文件,并添加UISlider属性、AVAudioPlayer属性和播放和停止播放方法,是实现AVAudioPlayerDelegate协议。 #import <UIKit/UIKit.h> // 导入框架 #import <AVFoundation/AVFoundation.h> // 实现播放器代理协议 @interface AmakerViewController : UIViewController <AVAudioPlayerDelegate>{ } // 播放方法 - (IBAction)play:(id)sender; // 停止播放方法 - (IBAction)stop:(id)sender; // 音量控制滑块 @property (strong, nonatomic) IBOutlet UISlider *mySlider; // 播放器 @property(retain,nonatomic) AVAudioPlayer *myPlayer; @end 在.m中的viewDidLoad方法中,获得播放音乐文件的NSURL路径,并根据它实例化AVAudioPlayer。并为AVAudioPlayer指定代理。 - (void)viewDidLoad { [super viewDidLoad]; // 音乐路径 NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"test" ofType:@"mp3"]]; // 实例化播放器 myPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil]; // 指定代理 myPlayer.delegate = self; } 分别实现播放方法和停止播放方法,调用AVAudioPlayer的play方法来播放音乐,调用AVAudioPlayer的stop方法来停止播放音乐。通过改变AVAudioPlayer的volume属性来控制音量。 // 播放方法 - (IBAction)play:(id)sender { if (myPlayer!=nil) { // 在另外一个线程中播放音乐 dispatch\_async(dispatch\_get\_global\_queue(DISPATCH\_QUEUE\_PRIORITY\_DEFAULT, 0), ^{ [myPlayer play]; }); } } // 停止播放方法 - (IBAction)stop:(id)sender { if (myPlayer!=nil) { [myPlayer stop]; } } // 调节音量方法 - (IBAction)change:(id)sender { if (myPlayer!=nil) { myPlayer.volume = mySlider.value; } } 实现代理中的中断和唤醒方法,在唤醒方法中继续播放音乐。 // 音乐被中断 - (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player{ NSLog(@"audioPlayerBeginInterruption..."); } // 继续播放 - (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags{ if (flags == AVAudioSessionInterruptionFlags\_ShouldResume && player != nil){ [player play]; } } 程序运行结果如下所示。 21.4 使用AVAudioRecorder实现录音 要实现录音程序需要使用AVFoundation.framework框架中的AVAudioRecorder类,为此需要导入AVFoundation.framework框架。录音程序需要设置录音程序存放的路径,和录音的属性,例如,音质、波特率、声道等属性,这些属性可以通过NSDictionary来封装。下面我们来创建一个可以实现录音并播放录音的程序,步骤如下: 创建一个项目,并导入AVFoundation.framework框架。 在界面上添加三个按钮,分别用来实现录音、停止录音和播放功能。 在.h文件中导入AVFoundation.h头文件,并添加AVAudioPlayer属性和AVAudioRecorder和录音、停止录音和播放事件方法。 #import <UIKit/UIKit.h> // 导入框架 #import <AVFoundation/AVFoundation.h> // 设置代理 @interface AmakerViewController : UIViewController{ } // 播放器属性 @property(nonatomic,strong)AVAudioPlayer *player; // 录音器属性 @property(nonatomic,strong)AVAudioRecorder *recorder; // 录音方法 - (IBAction)record:(id)sender; // 播放方法 - (IBAction)play:(id)sender; // 停止播放方法 - (IBAction)stop:(id)sender; @end 在.m的viewDidLoad方法中设置录音文件的保存路径和录音属性,并实例化AVAudioRecorder和AVAudioPlayer。 - (void)viewDidLoad { [super viewDidLoad]; // 设置录制文件的访问路径 NSArray *dirPath = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); NSString *docPath = [dirPath objectAtIndex:0]; NSString *filePath = [docPath stringByAppendingPathComponent:@"test1.wav"]; // 根据该路径创建NSURL对象 NSURL *soundFileURL = [NSURL fileURLWithPath:filePath]; // 设置录音属性 // 包括:音质、波特率、声道数量等 NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey, [NSNumber numberWithInt:16], AVEncoderBitRateKey, [NSNumber numberWithInt: 2], AVNumberOfChannelsKey, [NSNumber numberWithFloat:44100.0], AVSampleRateKey, nil]; NSError *error = nil; // 创建播放器实例 player = [[AVAudioPlayer alloc]initWithContentsOfURL:soundFileURL error:nil]; // 创建录音器实例 recorder = [[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recordSettings error:&error]; // 判断是否有错误 if (error) { NSLog(@"Error: %@", [error localizedDescription]); } else { // 准备录音 [recorder prepareToRecord]; } } AVAudioRecorder的record方法进行录音,调用stop方法停止录音。调用AVAudioPlayer的play播放录音。 // 录音 - (IBAction)record:(id)sender { if (!recorder.isRecording) { [recorder record]; } } // 播放 - (IBAction)play:(id)sender { player.volume = 1; [player play]; } // 停止录音 - (IBAction)stop:(id)sender { [recorder stop]; } 程序运行结果如下图所示。 21.5 使用AVAudioRecorderDelegate代理处理录音的中断和续录 和播放音乐相同,录音也可能被突然打来的电话的其他任务打断,这种情况下可以通过AVAudioRecorder的代理AVAudioRecorderDelegate来实现录音的中断和继续录音。下面的程序完成了检测录音中断的功能。实现步骤如下: 创建一个项目,并导入AVFoundation.framework框架。 在界面上添加三个按钮,分别用来实现录音、停止录音和播放功能。 在.h文件中导入AVFoundation.h头文件,并添加AVAudioPlayer属性和AVAudioRecorder和录音、停止录音和播放事件方法,并实现AVAudioRecorderDelegate协议。 #import <UIKit/UIKit.h> // 导入框架 #import <AVFoundation/AVFoundation.h> // 设置代理 @interface AmakerViewController : UIViewController<AVAudioRecorderDelegate>{ } // 播放器属性 @property(nonatomic,strong)AVAudioPlayer *player; // 录音器属性 @property(nonatomic,strong)AVAudioRecorder *recorder; // 录音方法 - (IBAction)record:(id)sender; // 播放方法 - (IBAction)play:(id)sender; // 停止播放方法 - (IBAction)stop:(id)sender; @end 在.m的viewDidLoad方法中设置录音文件的保存路径和录音属性,并实例化AVAudioRecorder和AVAudioPlayer。 - (void)viewDidLoad { [super viewDidLoad]; // 设置录制文件的访问路径 NSArray *dirPath = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); NSString *docPath = [dirPath objectAtIndex:0]; NSString *filePath = [docPath stringByAppendingPathComponent:@"test1.wav"]; // 根据该路径创建NSURL对象 NSURL *soundFileURL = [NSURL fileURLWithPath:filePath]; // 设置录音属性 // 包括:音质、波特率、声道数量等 NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey, [NSNumber numberWithInt:16], AVEncoderBitRateKey, [NSNumber numberWithInt: 2], AVNumberOfChannelsKey, [NSNumber numberWithFloat:44100.0], AVSampleRateKey, nil]; NSError *error = nil; // 创建播放器实例 player = [[AVAudioPlayer alloc]initWithContentsOfURL:soundFileURL error:nil]; // 创建录音器实例 recorder = [[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recordSettings error:&error]; // 判断是否有错误 if (error) { NSLog(@"Error: %@", [error localizedDescription]); } else { // 准备录音 [recorder prepareToRecord]; } } AVAudioRecorder的record方法进行录音,调用stop方法停止录音。调用AVAudioPlayer的play播放录音。 // 录音 - (IBAction)record:(id)sender { if (!recorder.isRecording) { [recorder record]; } } // 播放 - (IBAction)play:(id)sender { player.volume = 1; [player play]; } // 停止录音 - (IBAction)stop:(id)sender { [recorder stop]; } 实现AVAudioRecorderDelegate的检测录音中断的方法。 // 代理方法,检测录音是否被中断 - (void)audioRecorderBeginInterruption:(AVAudioRecorder *)recorder{ NSLog(@"audioRecorderBeginInterruption..."); } // 代理方法,检测录音是否中断结束 - (void)audioRecorderEndInterruption:(AVAudioRecorder *)recorder1 withOptions:(NSUInteger)flags{ if (recorder!=nil&&flags==AVAudioSessionInterruptionFlags\_ShouldResume) { [recorder1 record]; } } 程序运行结果如下图所示。 21.6 使用MPMoviePlayerController类播放视频 可以使用MediaPlayer.framework框架中的MPMoviePlayerController类来播放视频。播放视频时需要知道播放视频的URL路径,并设置播放时的一些属性,例如,是否自动播放、是否全屏播放等参数。我们可以将MPMoviePlayerController的view添加到当前view,也可以使用MPMoviePlayerViewController来实现播放视频。下面通过一个案例来演示如何播放视频,实现步骤如下所示。 创建一个项目,并添加MediaPlayer.framework框架到系统中在xib文件中添加一个按钮。 在.h头文件中,导入MediaPlayer.h头文件。添加MPMoviePlayerController属性和一个播放事件方法,并实现MPMediaPickerControllerDelegate协议。 #import <UIKit/UIKit.h> // 导入视频播放器头文件 #import <MediaPlayer/MediaPlayer.h> // 实现MPMediaPickerControllerDelegate协议 @interface AmakerViewController : UIViewController<MPMediaPickerControllerDelegate>{ } // 播放器属性 @property(nonatomic,strong) MPMoviePlayerController *mp; // 播放方法 - (IBAction)play:(id)sender; @end 添加一个MP4文件到程序中。 实现播放方法,获得要播放的视频文件路径,实例化视频播放器,并设置播放器参数。 - (IBAction)play:(id)sender { // 获得播放视频文件路径 NSURL *path = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"syz" ofType:@"mp4"]]; // 实例化视频播放器 self.mp = [[MPMoviePlayerController alloc]initWithContentURL:path]; // 设置控制样式 self.mp.controlStyle = MPMovieControlStyleDefault; // 设置是否自动播放 self.mp.shouldAutoplay = YES; // 添加播放视图到当前视图 [self.view addSubview:self.mp.view]; // 设置全屏 [self.mp setFullscreen:YES animated:YES]; } 覆盖MPMediaPickerControllerDelegate协议的mediaPickerDidCancel方法,在该方法中删除视频播放视图。 // 播放结束删除视图 - (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker{ [self.mp.view removeFromSuperview]; } 程序运行结果如下图所示。 21.7 捕获视频缩略图 有时候需要在播放视频时,截获一张缩略图,这可以通过MPMoviePlayerController的方法来实现它。下面程序演示了如何截获一张缩略图,并使用UIImageView显示。实现步骤如下: 创建一个项目,添加MediaPlayer.framework框架。 在xib文件中添加一个按钮和一个图片视图。 在控制器的.h文件中添加播放事件方法,图片视图属性和播放器属性。 #import <UIKit/UIKit.h> // 导入头文件 #import <MediaPlayer/MediaPlayer.h> @interface AmakerViewController : UIViewController // 播放方法 - (IBAction)play:(id)sender; // 显示缩略图的UIImageView @property (strong, nonatomic) IBOutlet UIImageView *myImage; // 播放器属性 @property(nonatomic,strong)MPMoviePlayerController *player; @end 在控制器的.m文件中实现播放方法,获得视频文件的路径,实例化MPMoviePlayerController,并向通知中心添加观察者,当请求缩略图发出是调用capture方法,设置播放参数,发出截屏请求。 - (IBAction)play:(id)sender { // 视频文件路径 NSString *path = [[NSBundle mainBundle]pathForResource:@"syz" ofType:@"mp4"]; NSURL *url = [NSURL fileURLWithPath:path]; // 实例化MPMoviePlayerController self.player = [[MPMoviePlayerController alloc]initWithContentURL:url]; // 播放 [self.player play]; // 向通知中心添加观察者,当请求缩略图发出是调用capture方法 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(capture:) name:MPMoviePlayerThumbnailImageRequestDidFinishNotification object:self.player]; // 将播放视图添加到当前视图 [self.view addSubview:self.player.view]; // 设置为全屏 [self.player setFullscreen:YES]; // 截屏时间点 NSNumber *thirdSecondThumbnail = [NSNumber numberWithFloat:10.0f]; // 创建数组,只截一张屏 NSArray *requestedThumbnails = [NSArray arrayWithObject:thirdSecondThumbnail]; // 发出截屏请求 [self.player requestThumbnailImagesAtTimes:requestedThumbnails timeOption:MPMovieTimeOptionExact]; } 在capture方法中将截屏图片设置为UIImageView的属性。 // 将截屏图片设置给图片视图 -(void)capture:(NSNotification *)param{ MPMoviePlayerController *controller = [param object]; UIImage *thumbnail = [param.userInfo objectForKey:MPMoviePlayerThumbnailImageKey]; self.myImage.image = thumbnail; } 程序运行结果如下所示。 21.8 使用MPMediaPickerController类选择系统音乐 一个音乐播放器应该具备播放本地视频的的功能,可以使用MPMediaPickerController类来从选择系统音乐。并通过其代理MPMediaPickerControllerDelegate来实现音乐的选择。下面通过一个案例来演示如何通过MPMediaPickerController从系统中选择音乐文件。实现步骤如下: 创建一个项目,并添加MediaPlayer.framework框架。 在界面上添加一个按钮来选择音乐。 在控制器的.h文件中设置代理,并添加选择音乐的事件方法。 #import <UIKit/UIKit.h> // 导入头文件 #import <MediaPlayer/MediaPlayer.h> // 设置代理 @interface AmakerViewController : UIViewController<MPMediaPickerControllerDelegate> // 选择方法 - (IBAction)pick:(id)sender; @end 在控制器的.m文件中实现选择音乐事件方法,实例化MPMediaPickerController,设置代理和其他参数,并跳转到该控制器。 // 选择音乐方法 - (IBAction)pick:(id)sender { // 实例化MPMediaPickerController MPMediaPickerController *mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeAny]; // 设置代理 mediaPicker.delegate = self; // 允许一次选择多个音乐文件 mediaPicker.allowsPickingMultipleItems = YES; mediaPicker.prompt = @"请选择要播放的音乐文件"; // 显示该视图控制器 [self presentModalViewController:mediaPicker animated:YES]; } 覆盖两个代理方法,获得选择的音乐。 // 代理方法,当选择音乐后触发该方法 - (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection{ if (mediaItemCollection.count>0) { NSArray *array = mediaItemCollection.items; // 遍历该数组 } } // 当前取消选择时触发该方法 - (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker{ } 21.9 使用UIImagePickerController进行拍照和录像 UIImagePickerController可以进行拍照和录像,通过设置UIImagePickerController的sourceType属性来控制是拍照还是录像,设置好属性后,我们只是跳转到该控制器即可实现拍照或录像。下面我们首先实现一个拍照程序,在界面上添加一个按钮和一个图片视图。拍照后的图片使用图片视图来显示。程序实现步骤如下所示: 创建一个项目,添加MobileCoreServices.framework和AssetsLibrary.framework两个框架。 在界面上添加一个按钮和一个图片视图控件,单击按钮进行拍照,拍照后的照片显示在图片视图中。 在.h控制器头文件中,实现UIImagePickerControllerDelegate和UINavigationControllerDelegate协议,并添加拍照事件方法和显示照片的图片视图。 #import <UIKit/UIKit.h> #import <MobileCoreServices/MobileCoreServices.h> #import <AssetsLibrary/AssetsLibrary.h> @interface AmakerViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate> // 拍照 - (IBAction)take:(id)sender; // 显示照片 @property (strong, nonatomic) IBOutlet UIImageView *pic; @end 在.m的拍照事件方法中实现拍照功能,实例化UIImagePickerController,并设置图片源类型为照相机输入源,设置代理,并跳转到拍照视图控制器。 - (IBAction)take:(id)sender { // 实例化UIImagePickerController UIImagePickerController *controller = [[UIImagePickerController alloc] init]; // 设置图片源类型为照相机输入源 controller.sourceType = UIImagePickerControllerSourceTypeCamera; // 媒体类型 NSString *requiredMediaType = (\_\_bridge NSString *)kUTTypeImage; // 设置媒体类型 controller.mediaTypes = [[NSArray alloc] initWithObjects:requiredMediaType, nil]; // 是否运行编辑 controller.allowsEditing = YES; // 设置代理 controller.delegate = self; // 跳转到该控制器 [self presentViewController:controller animated:YES completion:nil]; } 在代理方法中获得照片并显示。 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ NSLog(@"info=%@",info); // 获得拍照的图片 UIImage *myImage = [info objectForKey: UIImagePickerControllerOriginalImage]; // 设置UIImageView的属性 self.pic.image = myImage; // 取消显示 [picker dismissViewControllerAnimated:YES completion:nil]; } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;{ NSLog(@"imagePickerControllerDidCancel"); } 程序运行结果如下所示。 在上一节我们学习了如何使用UIImagePickerController如何进行拍照,下面我们来学习如何使用UIImagePickerController来实现录像功能。实现步骤如下所示: 创建一个项目,并添加MediaPlayer.framework、MobileCoreServices.framework、CoreMedia.framework和AssetsLibrary.framework框架。 在xib文件中添加两个按钮,分别来实现录像和播放功能。 在控制器的.h头文件中添加类库,并实现代理,声明录像和播放事件方法,声明视频播放器属性和当前url路径属性。 #import <UIKit/UIKit.h> #import <AssetsLibrary/AssetsLibrary.h> #import <MobileCoreServices/MobileCoreServices.h> #import <MediaPlayer/MediaPlayer.h> @interface AmakerViewController : UIViewController<UINavigationControllerDelegate,UIImagePickerControllerDelegate> // 录像事件方法 - (IBAction)start:(id)sender; // 播放事件方法 - (IBAction)play:(id)sender; // 视频播放器属性 @property(nonatomic,strong)MPMoviePlayerController *mPlayer; // 当前url路径 @property(nonatomic,strong)NSURL *currentURL; @end 实现录像事件方法,实例化UIImagePickerController,并设置媒体源类型为录像以及其他参数,然后跳转到该控制器。 - (IBAction)start:(id)sender { // 实例化UIImagePickerController UIImagePickerController *controller = [[UIImagePickerController alloc] init]; // 设置媒体源类型为录像 controller.sourceType = UIImagePickerControllerSourceTypeCamera; NSString *requiredMediaType = (\_\_bridge NSString *)kUTTypeMovie; controller.mediaTypes = [[NSArray alloc] initWithObjects:requiredMediaType, nil]; // 设置是否允许编辑 controller.allowsEditing = YES; // 设置代理 controller.delegate = self; // 录制质量 controller.videoQuality = UIImagePickerControllerQualityTypeHigh; // 最大录制时间 controller.videoMaximumDuration = 30.0f; // 跳转到该控制器 [self presentViewController:controller animated:YES completion:nil]; } 在代理的方法中获得视频保存的url路径。 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ NSLog(@"info=%@",info); // 获得媒体类型 NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType]; // 判断媒体类型是否是视频 if ([mediaType isEqualToString:(\_\_bridge NSString *)kUTTypeMovie]){ // 获得视频的路径 NSURL *urlOfVideo = [info objectForKey:UIImagePickerControllerMediaURL]; self.currentURL = urlOfVideo; } [picker dismissViewControllerAnimated:YES completion:nil]; } 根据上面的url路径来播放录制的视频。 - (IBAction)play:(id)sender { self.mPlayer = [[MPMoviePlayerController alloc]initWithContentURL:self.currentURL]; // 设置控制样式 self.mPlayer.controlStyle = MPMovieControlStyleDefault; // 设置是否自动播放 self.mPlayer.shouldAutoplay = YES; // 添加播放视图到当前视图 [self.view addSubview:self.mPlayer.view]; // 设置全屏 [self.mPlayer setFullscreen:YES animated:YES]; } 程序运行结果如下图所示。 图形图像及动画 iOS Sqlite数据库