我有一个UIViewController
,我在其中使用GPUImage
创建视频。现在,在创建视频后,我将通过NSURL传递到第二个UIViewController
,在此处向我们显示一个AVPlayerViewController
。
我通过以下显示它
- (void)showTheVideo {
/// ----------
/// Show the video
/// ----------
// grab a local URL to our video
NSURL *videoURL = self.completeMovieURL;
// create an AVPlayer
self.player = [AVPlayer playerWithURL:videoURL];
// create a player view controller
AVPlayerViewController *controller = [[AVPlayerViewController alloc]init];
controller.player = self.player;
[controller setShowsPlaybackControls:TRUE];
[controller.view setBackgroundColor:[UIColor clearColor]];
//controller.videoGravity = AVLayerVideoGravityResizeAspectFill;
// show the view controller
[self addChildViewController:controller];
[self.viewVideo addSubview:controller.view];
controller.view.frame = self.viewVideo.frame;
[self.player play];
}
问题是第二个UIViewController上的播放确实命中和错过。有时会加载视频,而其他时候则不会。我检查了self.completeMovieURL
,路径就在那里。
现在要测试是否确实创建了视频,我已经尝试使用将视频保存在第二个控制器上
[PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:self.completeMovieURL];
但是出现错误,但是如果我尝试将其保存在视图控制器上,则可以在其中保存。
请问有人可以解释为什么我可以将视频保存在第一个控制器上,但不能保存在第二个控制器上,并且在播放时遇到问题吗?
答案 0 :(得分:0)
使用以下代码保存您的视频:
#import <AssetsLibrary/ALAsset.h>
#import <AssetsLibrary/ALAssetsLibrary.h>
#import <AssetsLibrary/ALAssetRepresentation.h>
- (void)writeToAlbum:(NSURL *)outputFileURL{
self.library = [[ALAssetsLibrary alloc] init];
if ([_library videoAtPathIsCompatibleWithSavedPhotosAlbum:outputFileURL])
{
[_library writeVideoAtPathToSavedPhotosAlbum:outputFileURL
completionBlock:^(NSURL *assetURL, NSError *error)
{
if (error)
{
dispatch_async(dispatch_get_main_queue(), ^{
// [SVProgressHUD showErrorWithStatus:@"failed"];
});
NSLog(@"fail to saved: %@", error);
}else{
NSLog(@"saved");
dispatch_async(dispatch_get_main_queue(), ^{
// [SVProgressHUD showSuccessWithStatus:@"saved"];
});
}
}];
}}