如何在 ipad 应用程序中播放文档文件夹中的视频文件
Posted
技术标签:
【中文标题】如何在 ipad 应用程序中播放文档文件夹中的视频文件【英文标题】:how to play video file from documents folder in ipad application 【发布时间】:2013-04-17 08:37:07 【问题描述】:我正在录制视频并将其保存到文档文件夹,我想稍后使用视频路径再次播放,但它没有播放我正在使用以下代码获取文档文件夹中文件的路径,然后播放它
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"dd-MM-yyyy||HH:mm:SS"];
NSDate *now = [[[NSDate alloc] init] autorelease];
NSDate* theDate = [dateFormat stringFromDate:now];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"Default Album"];
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
[[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:nil];
NSString *videopath= [[[NSString alloc] initWithString:[NSString stringWithFormat:@"%@/%@.mov",documentsDirectory,theDate]] autorelease];
NSLog(@"Vide Path %@",videopath);
NSString *path = [[NSBundle mainBundle] pathForResource:videopath ofType:@"mov" inDirectory:nil];
NSURL *movieURL = [NSURL fileURLWithPath:path];
player= [[ MPMoviePlayerViewController alloc] initWithContentURL:movieURL];
[self presentMoviePlayerViewControllerAnimated:player];
你能帮帮我吗,谢谢。
【问题讨论】:
从您的代码中您没有保存您的视频。 @Vedchi 我正在从 ipad 录制视频,然后我按下使用按钮而不是保存 @Vedchi 你能帮我解决这个问题吗 然后使用您在文档目录中保存视频的路径,而不是上面构建的路径。使用 NSDateFormatter 和 NSDate,您正在创建一个实际上不存在于文档目录中的新路径。 【参考方案1】:而不是这个
NSString *videopath = [[[NSString alloc] initWithString:[NSString stringWithFormat:@"%@/%@.mov",documentsDirectory,theDate]] autorelease];
您可以尝试不使用.mov
扩展名。因为你会在这一行告诉扩展。
NSString *path = [[NSBundle mainBundle] pathForResource:videopath ofType:@"mov" inDirectory:nil];
注意:在这一行
player = [[MPMoviePlayerViewController alloc] initWithContentURL:movieURL];
如果播放器有保留属性,会导致内存泄漏..
【讨论】:
由于未捕获的异常 'NSInvalidArgumentException' 导致错误终止应用程序,原因:'*** -[NSURL initFileURLWithPath:]: nil string parameter' 视频路径 NSLOg 是视频路径 /Users/malikwahajahmed/Library/Application Support/iPhone Simulator/4.2/Applications/18A4A444-9F5D-4910-91EE-237918F46CD0/Documents/17-04-2013|| 14:10:44.mov 用这个stringWithFormat:@"%@/%@.mov"
代替这个stringWithFormat:@"%@/%@.mov"
。而且我看不到编辑过的代码,你用旧代码恢复了吗?
评论这一行NSString *path = [[NSBundle mainBundle] pathForResource:videopath ofType:@"mov" inDirectory:nil];
并再试一次..并在[NSURL initFileURLWithPath:]
中将path
替换为videopath
最后一次尝试。 [dateFormat setDateFormat:@"dd-MM-yyyy||HH:mm:SS"];
,将格式化程序更改为@"dd-MM-yyyy_HH:mm:SS"
【参考方案2】:
首先你需要在你的项目中添加mediaplayer框架,然后添加import语句
#import <MediaPlayer/MediaPlayer.h>
然后按照下面的代码进行
MPMoviePlayerViewController *playerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:aVideoUrl]];
// Register this class as an observer instead
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieFinishedCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:playerVC.moviePlayer];
// Set the modal transition style of your choice
//playerVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentMoviePlayerViewControllerAnimated:playerVC];
[playerVC.moviePlayer prepareToPlay];
[playerVC.moviePlayer play];
[playerVC.moviePlayer setControlStyle:MPMovieControlStyleFullscreen];
- (void)movieFinishedCallback:(NSNotification*)aNotification
// Obtain the reason why the movie playback finished
NSNumber *finishReason = [[aNotification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];
// Dismiss the view controller ONLY when the reason is not "playback ended"
if ([finishReason intValue] != MPMovieFinishReasonPlaybackEnded)
MPMoviePlayerController *moviePlayer = [aNotification object];
// Remove this class from the observers
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:moviePlayer];
// Dismiss the view controller
[self dismissModalViewControllerAnimated:YES];
【讨论】:
以上是关于如何在 ipad 应用程序中播放文档文件夹中的视频文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Ionic 4 中通过 Airplay 在 iPad 和电视上播放视频