私はこの問題を数日間実行しています。カメラ ロールからビデオを選択し、アプリで直接再生する必要があります。私が知りたいのは単純です:それは可能ですか?以下の私のコードは、カメラロールから選択した後にビデオを再生しないため、再生する前にビデオをローカルに保存する必要があるとは思えません。
私の関連コードは以下の通りです:
//...
if (CFStringCompare((CFStringRef)mediaType, kUTTypeMovie, 0)==kCFCompareEqualTo) {
NSString *moviePath=[[info objectForKey:UIImagePickerControllerMediaURL]path];
NSURL *movieURL=[NSURL URLWithString:moviePath];
self.mpController=[[MPMoviePlayerController alloc]initWithContentURL:movieURL];
NSLog(@"%@",moviePath);
[[NSNotificationCenter defaultCenter]addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.mpController];
self.mpController.movieSourceType=MPMovieSourceTypeStreaming;
self.mpController.controlStyle=MPMediaTypeMusicVideo;
[self.mpController prepareToPlay];
[self.mpController.view setFrame:self.view.bounds];
[self.mpController setFullscreen:YES animated:YES];
[self.view addSubview:self.mpController.view];
[self.mpController play];
}
[[picker presentingViewController] dismissViewControllerAnimated:YES completion:NULL];
//...
-(void)moviePlayBackDidFinish:(NSNotification*)notification{
NSLog(@"moviePlayBAckDidFinish");
MPMoviePlayerController *player = [notification object];
[[NSNotificationCenter defaultCenter]
removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:player];
if ([player
respondsToSelector:@selector(setFullscreen:animated:)])
{
player.fullscreen=NO;
[player.view removeFromSuperview];
}
}
PSmoviePlayBackDidFinish
:ビデオの圧縮後に通知ハンドラが常に呼び出され、空白の画面が表示されます。また、moviePath
変数をログに記録すると、次のようなパスが得られました。
/private/var/mobile/Applications/5912AED1-S1DE-25EF-A8B-EF7AD21E3R65/tmp//trim.uUcGJU.MOV
私が言ったように、カメラロールから直接ビデオを再生することは不可能だと思います. しかし、確認してもらいたい。ありがとう。