Воспроизведение удаленного файла MP3 через HTTP в iOS 5 - PullRequest
0 голосов
/ 24 января 2012

Я пытаюсь воспроизвести удаленный файл MP3 в своем проекте XCode, однако приведенная ниже реализация с использованием MPMoviePlayerController не работает для меня и вызывает исключение.

AVPlayerItem был освобожден, в то время как наблюдатели значения ключа были все еще зарегистрировано.

Мой .h файл

#import <MediaPlayer/MediaPlayer.h>

@property (nonatomic, strong) MPMoviePlayerController *moviePlayer;

Мой .m файл

@synthesize moviePlayer = _moviePlayer;

- (void)playEnglish
{
 NSURL *url = [NSURL URLWithString:_audioUrlEnglish];
 _moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];

 [[NSNotificationCenter defaultCenter] addObserver:self
 selector:@selector(moviePlayBackDidFinish:)
 name:MPMoviePlayerPlaybackDidFinishNotification
 object:_moviePlayer];

 _moviePlayer.controlStyle = MPMovieControlStyleDefault;
 _moviePlayer.shouldAutoplay = YES;
 [self.view addSubview:_moviePlayer.view];
 [_moviePlayer setFullscreen:YES animated:YES]; 
}


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

 if ([player
 respondsToSelector:@selector(setFullscreen:animated:)])
 {
 [player.view removeFromSuperview];
 }
}

1 Ответ

1 голос
/ 24 января 2012

Вы указали синтезированное свойство для своего игрока, но затем назначаете его непосредственно на ивар.

Вместо:

__moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];

Вы должны:

MPMoviePlayer *aPlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
[self setMoviePlayer:aPlayer];

Это обеспечит правильное сохранение вашего объекта (если вы используете автоматический подсчет ссылок). Без этого кажется, что ваш игрок не удерживается, и это объяснило бы вашу ошибку.

Кроме того, вы назначаете / обращаетесь к переменным экземпляра в нескольких других местах вашего кода. Лучшая практика в Какао вообще избегает прямого прикосновения к иварам (есть некоторые исключения, однако при использовании ARC их еще меньше, и я не вижу здесь примеров, которые бы заслуживали прямого назначения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...