Видео не будет воспроизводиться в симуляторе iPad - PullRequest
0 голосов
/ 01 июля 2010

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

Я использую MPMoviePlayerController для воспроизведения файла фильма

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

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

Ответы [ 2 ]

3 голосов
/ 07 октября 2010

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

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

Получение MPMoviePlayerController для работы с iOS4, 3.2 (iPad) и более ранними версиями 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

Основное использование с использованием 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];

}
0 голосов
/ 01 июля 2010

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

...