Капля звука MPMoviePlayer, при тестировании приложения на устройстве

StackOverflow https://stackoverflow.com/questions/4641514

Вопрос

Я создаю приложение, содержащее корм XML со ссылкой на фильм, который я хотел бы играть всякий раз, когда пользователь нажимает на изображение.

Для этого я использую MPMoviePlayerviewController. Тестирование приложения на симуляторе дало мне ожидаемые результаты до сих пор, однако, когда я проверяю приложение на iPhone, игрок играет правильно, но без звука.

Я посмотрел на интернет, где несколько статей сказали мне, что производительность приложения много отличается от производительности, который симулятор дает вам. Поэтому я сделал тест «Утечка» с инструментами, что сказал мне, что всякий раз, когда я начал играть в фильме, некоторые байты упали или утечки. Может ли это иметь что делать с внезапным каплей звука? Если это так, как бы я это решил?

Это мой первый опыт тестирования приложений на iPhone, поэтому я получил довольно шокирован, увидев, насколько плохо выполнено приложение. Вот код для MoviePlayer-Part.

#pragma mark Video Controls
-(void)playVideo:(id)sender{
    moviePlaying=TRUE;
    MPMoviePlayerViewController *playerViewController;
    playerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:[data objectForKey:@"[att]url"]]];


    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:[playerViewController moviePlayer]];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidExitFullscreen:) name:MPMoviePlayerDidExitFullscreenNotification object:[playerViewController moviePlayer]];
    MPMoviePlayerController *player = [[[MPMoviePlayerController alloc] init] autorelease];
    player = [playerViewController moviePlayer];

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

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

    [moviePlayer.view removeFromSuperview];
    [moviePlayer release];
}
- (void)moviePlayBackDidFinish:(NSNotification*)notification {
    MPMoviePlayerViewController *moviePlayer = [notification object];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerDidExitFullscreenNotification object:moviePlayer];

    moviePlaying=FALSE;
    [moviePlayer.view removeFromSuperview];
    [moviePlayer release];
}
#pragma mark VideoControls End

Я надеюсь, что вы можете зажечь проблему.

Заранее спасибо,

/ BRINCK10.

Это было полезно?

Решение

У тебя здесь очень серьезная путаница. Вы не должны создавать как MPMOVIEPLAYERVIVECONTROLLER и MPMOVIEPLAYERCONTROLLER. Используйте один или другой. И эти линии не имеют смысла:

MPMoviePlayerController *player = 
    [[[MPMoviePlayerController alloc] init] autorelease];
player = [playerViewController moviePlayer];

Вы создаете MPMoviePlayerController и назначаете его игроку, но затем выбросите его, заменив его существующего MPMoviePlayerviewController's MoviePlayer.

Давайте отбросьте десять ярдов и пунт. Легкий способ воспроизвести звук фильма / поток / что угодно использовать MPMoviePlayerviewController. Это контроллер представления, поэтому просто засуните его, где вы будете использовать UIViewController. Простейший - это показать это модально:

NSURL* m = // whatever;
MPMoviePlayerViewController* mpvc = 
    [[MPMoviePlayerViewController alloc] initWithContentURL: m];
[self presentModalViewController:mpvc animated:YES];
[mpvc release];

Это создает MPMoviePlayerController и его мнение и представляет весь Shebang для вас в полноэкранном режиме. Просто и легко. Модальный вид даже уволен для вас, когда пользовательские краны сделаны.

Использование MPMoviePlayerController более вовлечен. Это не UiviewController. Но это имеет вид. Ваша работа, если вы хотите, чтобы пользователь ничего не увидел, - это захватить этот вид, дать ему кадр и приклеить его в свой интерфейс:

NSURL* m = // whatever;
MPMoviePlayerController* mp = 
    [[MPMoviePlayerController alloc] initWithContentURL:m];
self.mpc = mp; // property with retain policy
[mp release];
self.mpc.view.frame = CGRectMake(10, 10, 300, 230);
[self.view addSubview:self.mpc.view];

Это делает вид фильма часть вашего интерфейса. Если фильм является реальным фильмом, он оставляет пользователя свободно переключаться в полноэкранный режим или нет. Если фильм просто звук, у пользователя нет способа сделать это; Есть только кнопка остановки / GO и ползунок.

В любом случае, в истории есть mpmoviePlayerTroller Это, вероятно, причина всех ваших вопросов здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top