한 번 동영상을 재생 한 후 왜 검은 화면이 깜박 거리는 지 알아 내려고합니다. 로드 상태가 MPMovieLoadStatePlayable 일 때 검은 색 화면이없고 비디오가 부드럽게 재생된다는 것을 알았습니다. 그러나 비디오가 한 번 재생되면로드 상태는 MPMovieLoadStateUnknown이됩니다. 로드 상태를 알 수 없을 때 검정색 화면이 깜박이고, 아마도 prepareToPlay를 먼저 호출해야하기 때문일 것입니다.동영상을 한 번 재생 한 후 IOS 무비 플레이어가 알려지지 않은로드 상태입니다. MPMoviePlayerController
- (void)didTapVideoPlayButtonAction:(UIButton *)sender{
[self.playButton setHidden:YES];
[self.moviePlayer prepareToPlay];
[self.moviePlayer requestThumbnailImagesAtTimes:@[ @0.1f, @1.0f ] timeOption:MPMovieTimeOptionExact];
[self.moviePlayer play];
}
-(void)movieFinishedCallBack{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.moviePlayer];
}
-(void)loadStateDidChange:(NSNotification *)notification{
//NSLog(@"loadStateDidChange: %@",notification);
if (self.moviePlayer.loadState == MPMovieLoadStatePlayable) {
NSLog(@"loadState... MPMovieLoadStatePlayable");
}
if (self.moviePlayer.loadState == MPMovieLoadStatePlaythroughOK) {
NSLog(@"loadState... MPMovieLoadStatePlaythroughOK");
}
if (self.moviePlayer.loadState == MPMovieLoadStateStalled) {
NSLog(@"loadState... MPMovieLoadStateStalled");
}
if (self.moviePlayer.loadState == MPMovieLoadStateUnknown) {
NSLog(@"loadState... MPMovieLoadStateUnknown");
//[self.moviePlayer prepareToPlay];
}
}
-(void)moviePlayerStateChange:(NSNotification *)notification{
//NSLog(@"moviePlayerStateChange: %@",notification);
if (self.moviePlayer.playbackState == MPMoviePlaybackStatePlaying){
[self.imageView addSubview:self.moviePlayer.view];
}
if (self.moviePlayer.playbackState == MPMoviePlaybackStateStopped){
NSLog(@"moviePlayer... Stopped");
[self.playButton setHidden:NO];
//[self.moviePlayer.view removeFromSuperview];
[self.moviePlayer prepareToPlay];
}
if (self.moviePlayer.playbackState == MPMoviePlaybackStatePaused){
NSLog(@"moviePlayer... Paused");
[self.moviePlayer stop];
}
f (self.moviePlayer.playbackState == MPMoviePlaybackStateInterrupted){
NSLog(@"moviePlayer... Interrupted");
[self.moviePlayer stop];
}
if (self.moviePlayer.playbackState == MPMoviePlaybackStateSeekingForward){
NSLog(@"moviePlayer... Forward");
}
if (self.moviePlayer.playbackState == MPMoviePlaybackStateSeekingBackward){
NSLog(@"moviePlayer... Backward");
}
}
내가 솔루션이 될 것이라고 생각, 문장 내에서 prepareToPlay 전화 : 여기
- (void)setVideo:(PFObject *)aVideo {
video = aVideo;
if(self.moviePlayer) {
self.moviePlayer = nil;
}
// Get the profile image
PFUser *user = [self.video objectForKey:kFTPostUserKey];
PFFile *profilePictureSmall = [user objectForKey:kFTUserProfilePicSmallKey];
NSString *authorName = [user objectForKey:kFTUserDisplayNameKey];
// Get the video file
PFFile *videoFile = [video objectForKey:kFTPostVideoKey];
NSURL *url = [NSURL URLWithString:videoFile.url];
self.moviePlayer = [[MPMoviePlayerController alloc] init];
[self.moviePlayer.view setFrame:CGRectMake(0.0f,0.0f,320.0f,320.0f)];
[self.moviePlayer setControlStyle:MPMovieControlStyleNone];
[self.moviePlayer setScalingMode:MPMovieScalingModeAspectFill];
[self.moviePlayer setMovieSourceType:MPMovieSourceTypeFile];
[self.moviePlayer setContentURL:url];
[self.moviePlayer requestThumbnailImagesAtTimes:@[ @0.1f, @1.0f ] timeOption:MPMovieTimeOptionExact];
[self.moviePlayer setShouldAutoplay:NO];
[self.moviePlayer.view setBackgroundColor:[UIColor clearColor]];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieFinishedCallBack)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.moviePlayer];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayerStateChange:)
name:MPMoviePlayerPlaybackStateDidChangeNotification
object:self.moviePlayer];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(loadStateDidChange:)
name:MPMoviePlayerLoadStateDidChangeNotification
object:self.moviePlayer];
}
이 기능은 다음과 같습니다 다음
내가 내 동영상을 설정하고있다 방법 if (self.moviePlayer.loadState == MPMovieLoadStateUnknown)
나는 이것을 시도했지만 게임을 준비하지 못했습니다. 어떤 생각/조언/도움이 필요합니까?
이 코드는 잘못되었습니다. 'self.moviePlayer.loadState == // ...'이는로드 상태가 어떻게되는지를 결정하는 방법이 아닙니다. ! 로드 상태는 비트 마스크입니다. 특정 마스크에 대해 bitwise-and를 사용해야하고 0 또는 0이 아닌지 확인해야합니다. – matt
실제 문제에 관해서는,'MPMovieLoadStateUnknown'은 대개 파일이 URL에서 발견되지 않는다는 것을 의미합니다. 콘텐츠 URL을 결정하는 방법에 대해 더 많이 보여줄 수 있습니까? – matt
나는이 함수를 추가했다.비디오가 포함 된 PFObject를 전달하고 PFFile * videoFile = [video objectForKey : kFTPostVideoKey]와 같은 비디오 파일을 설정합니다. – SuperKevin