2013-09-27 3 views
1

Я пытаюсь воспроизвести видео в формате .mp4 в cocos2d. См. Мой код ниже. Видео не воспроизводится, появляется только черный фон, покрывающий чуть более трети экрана.Cocos2d .mp4 видео не играет

Instructions.m:

#import "Instructions.h" 

@implementation Instructions 

- (id)init 
{ 
    self = [super init]; 
    if (self != nil) 
    { 
     [self playInstructionsVideo]; 
    } 
    return self; 
} 

- (void)playInstructionsVideo 
{ 
    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Instructions" ofType:@"mp4"]]; 
    MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url]; 

    // Register to receive a notification when the movie has finished playing. 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlayBackDidFinish:) 
               name:MPMoviePlayerPlaybackDidFinishNotification 
               object:moviePlayer]; 

    if ([moviePlayer respondsToSelector:@selector(setFullscreen:animated:)]) 
    { 
     // Use the new 3.2 style API 
     moviePlayer.controlStyle = MPMovieControlStyleNone; 
     moviePlayer.shouldAutoplay = YES; 
     // This does blows up in cocos2d, so we'll resize manually 
     // [moviePlayer setFullscreen:YES animated:YES]; 
     [moviePlayer.view setTransform:CGAffineTransformMakeRotation((float)M_PI_2)]; 
     CGSize winSize = [[CCDirector sharedDirector] winSize]; 
     moviePlayer.view.frame = CGRectMake(0, 0, winSize.height, winSize.width); // width and height are swapped after rotation 
     [[[CCDirector sharedDirector] view] addSubview:moviePlayer.view]; 
    } 
    else 
    { 
     // Use the old 2.0 style API 
     moviePlayer.controlStyle = MPMovieControlStyleNone; 
     [moviePlayer play]; 
    } 
} 

- (void)moviePlayBackDidFinish:(NSNotification *)notification 
{ 
    MPMoviePlayerController *moviePlayer = [notification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                name:MPMoviePlayerPlaybackDidFinishNotification 
                object:moviePlayer]; 

    // If the moviePlayer.view was added to the openGL view, it needs to be removed 
    if ([moviePlayer respondsToSelector:@selector(setFullscreen:animated:)]) 
    { 
     [moviePlayer.view removeFromSuperview]; 
    } 

    [moviePlayer release]; 
} 

@end 

Пожалуйста, помогите мне, я не уверен, что является причиной аномального поведения.

+0

Что такое winSize.height & winSize.width, прежде чем устанавливать размер кадра видео? –

+0

@MichaelDautermann: извините, я не видел ваш комментарий раньше. Мне удалось воспроизвести видео, но ориентация обращена к левой половине экрана ([см. Снимок экрана] (http://imgur.com/4IekvPa)). Я поставил CCLOG, чтобы проверить winSize.width и winSize.height и получил соответственно 568.0 и 320.0 для ширины и высоты. Как я могу решить эту проблему? – NSologistic

ответ

2

У меня такое чувство, что вы просто скопировали этот код. В любом случае, из снимка экрана видно, что изменение ориентации является результатом setTransform. Снятие линии

[moviePlayer.view setTransform:CGAffineTransformMakeRotation((float)M_PI_2)]; 

должен решить проблему ориентации.

Смежные вопросы