2010-07-01 4 views
0

Я пытаюсь загрузить короткий файл фильма (.m4v) до запуска приложения Однако, когда я использую симулятор ipad, воспроизводится только звук. Видео не работает. Если я сменю симулятор на симулятор iphone, видео будет просто отлично.Видео не будет воспроизводиться в iPad-симуляторе

Я использую MPMoviePlayerController, чтобы воспроизвести файл фильма

Я даже скачал пример медиаплеера от Apple, а результат тот же. С образцом файла фильма (.m4v) симулятор iphone может воспроизводить фильм, но симулятор ipad не может

Пожалуйста, помогите!

ответ

0

Почти наверняка это ошибка/ограничение знаний в симуляторе.

+0

Таким образом, вы означало фильм должен играть в iPad-устройстве? – Leo

+0

Да, точно. Вы пробовали его на устройстве? – Dad

+0

В конце концов, я понял это, моя реализация неправильная. – Leo

3

Вот мое решение, если вам это нужно: Решение интегрировано с cocos2d, но его относительно легко изменить независимо.

Пожалуйста, обратитесь к следующему веб-сайт для общего пользования:

Getting MPMoviePlayerController to Work with iOS4, 3.2 (iPad) and Earlier Versions of iPhone SDK

IPad IOS: 3.2.2

@implementation MovieLayer 

/* 
* name: movie file name 
* type: movie file type 
* target: target class to handle the selectors 
* finish: selector called when the movie is finished 
* load: selector called when the movie loading state is changed 
*/ 
+ (id)layerWithMovieName:(NSString*)name type:(NSString*)movieType target:(id)target 
    finish:(SEL)finishSelector load:(SEL)loadSelector 
{ 
return [[[self alloc] initWithMovieName:name type:movieType target:target 
      finish:finishSelector load:loadSelector] autorelease]; 
} 

- (id)initWithMovieName:(NSString*)name type:(NSString*)movieType target:(id)target 
    finish:(SEL)finishSelector load:(SEL)loadSelector 
{ 
if ((self = [super init]) != nil) 
{ 
    NSBundle *bundle = [NSBundle mainBundle]; 
    NSString *moviePath = [bundle pathForResource:name ofType:movieType]; 
    if (moviePath) 
    { 
    NSURL *moviePathURL = [NSURL fileURLWithPath:moviePath]; 
    [self loadMovieAtURL:moviePathURL]; 

    // Movie finish loading notification 
    [[NSNotificationCenter defaultCenter] 
    addObserver:target 
    selector:loadSelector 
    name:MPMoviePlayerLoadStateDidChangeNotification 
    object:nil]; 

    // Movie finish Notification 
    [[NSNotificationCenter defaultCenter] 
    addObserver:target 
    selector:finishSelector 
    name:MPMoviePlayerPlaybackDidFinishNotification 
    object:nil]; 
    } 
} 
return self; 
} 

- (void)dealloc 
{ 

[theMovie.view removeFromSuperview]; 
theMovie.initialPlaybackTime = -1; 
[theMovie stop]; 
[theMovie release]; 

[super dealloc]; 
} 

- (void)loadMovieAtURL:(NSURL*)theURL 
{ 
CGSize size = [[CCDirector sharedDirector] winSize]; 

theMovie = [[MPMoviePlayerController alloc] initWithContentURL:theURL]; 

[theMovie prepareToPlay]; 

// > 3.2 
[theMovie respondsToSelector:@selector(loadState)]; 

theMovie.scalingMode = MPMovieScalingModeAspectFill; 
[theMovie setFullscreen:TRUE animated:TRUE]; 
theMovie.controlStyle = MPMovieControlStyleNone; 

theMovie.view.frame = CGRectMake(0, 0, size.width, size.height); 
theMovie.view.backgroundColor = [UIColor clearColor]; 

// Transform 
theMovie.view.transform = CGAffineTransformMakeRotation(-270.0f * (M_PI/180.0f)); 
theMovie.view.center = [[CCDirector sharedDirector] openGLView].center; 

[[[CCDirector sharedDirector] openGLView] addSubview:theMovie.view]; 
} 

- (void)play 
{ 
[theMovie play]; 
} 

@end 

Basic использования с помощью cocos2d

MovieLayer *player = [MovieLayer layerWithMovieName:LOGO_ANIMATION 
       type:LOGO_ANIMATION_FILE_EXT 
       target:self 
       finish:@selector(myMovieFinishedCallback:) 
       load:@selector(myMovieLoadCallback:)]; 
    [self addChild:player z: 0 tag:1]; 
} 
return self; 
} 

- (void)myMovieLoadCallback:(NSNotification*)notification 
{ 
MPMovieLoadState state = [(MPMoviePlayerController*)notification.object loadState]; 

// Remove observer 
[[NSNotificationCenter defaultCenter] 
    removeObserver:self 
    name:MPMoviePlayerLoadStateDidChangeNotification 
    object:nil]; 

if (state & MPMovieLoadStateUnknown) 
{ 
    [self myMovieFinishedCallback:nil]; 
} 
else if (state & MPMovieLoadStatePlayable) 
{ 
    [(MovieLayer*)[self getChildByTag:1] play]; 
} 
else if (state & MPMovieLoadStatePlaythroughOK) 
{ 
    [(MovieLayer*)[self getChildByTag:1] play]; 
} 
else if (state & MPMovieLoadStateStalled) 
{ 
    [self myMovieFinishedCallback:nil]; 
} 
} 

- (void)myMovieFinishedCallback:(NSNotification*)notification 
{ 
[[NSNotificationCenter defaultCenter] 
    removeObserver:self 
    name:MPMoviePlayerPlaybackDidFinishNotification 
    object:nil]; 

[self removeChildByTag:1 cleanup:YES]; 

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