Почему не возможно использовать MPMoviePlayerController несколько раз?

Есть попытка поддержать F # в ReSharper через внешний плагин (сам написан на F #). Вы можете найти предварительную информацию здесь .

12
задан Vadim Kotov 3 October 2017 в 14:47
поделиться

3 ответа

MPMoviePlayerController - это синглтон под капотом. Если вы не выполнили должным образом (ObjC) или Dispose () 'd (MonoTouch) и создали второй экземпляр, он либо не будет воспроизводиться, либо будет воспроизводиться только звук.

Кроме того, если вы подписались на MPMoviePlayerScalingModeDidChangeNotification или MPMoviePlayerPlaybackDidFinishNotification или MPMoviePlayerContentPreloadDidFinishNotification, имейте в виду, что опубликованное NSNotification также содержит ссылку на MPMoviePlayerController, поэтому, если вы сохраните его, у вас будет ссылка на игрока.

Хотя сборщик мусора Mono в конечном итоге сработает, это тот случай, когда требуется детерминированное завершение (вы хотите, чтобы ссылка исчезла сейчас , а не исчезла, когда GC решит выполнить сбор).

Вот почему вы хотите вызвать метод Dispose () в контроллере и метод Dispose () в уведомлении.

Например:

// Deterministic termination, do not wait for the GC
if (moviePlayer != null){
    moviePlayer.Dispose ()
    moviePlayer = null;
}

Если вы слушали уведомления, вызовите Dispose в своем уведомлении. обработчик в конце, чтобы освободить ссылку, которую он хранит для вашего MPMoviePlayerController, например:

var center = NSNotificationCenter.DefaultCenter;
center.AddObserver (
    "MPMoviePlayerPlaybackDidFinishNotification"),
    (notify) => { Console.WriteLine ("Done!"); notify.Dispose (); });
17
ответ дан 2 December 2019 в 19:31
поделиться

Секрет заключается в endPlay с установкой: moviePlayer.initialPlaybackTime = -1; перед тем, как выпустить его. Попробовать: :)

-(void)playMovie:(NSString *)urlString{
    movieURL = [NSURL URLWithString:urlString]; 
    moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
    moviePlayer.initialPlaybackTime = 0;
    //Register to receive a notification when the movie has finished playing. 
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(endPlay:) 
                                                 name:MPMoviePlayerPlaybackDidFinishNotification 
                                               object:moviePlayer];

    moviePlayer.scalingMode = MPMovieScalingModeAspectFit; 
    moviePlayer.movieControlMode = MPMovieControlModeDefault;
    moviePlayer.backgroundColor = [UIColor blackColor];

    [moviePlayer play];

}

-(void)endPlay: (NSNotification*)notification{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];
    moviePlayer.initialPlaybackTime = -1;
    [moviePlayer stop];
    [moviePlayer release];
}
0
ответ дан 2 December 2019 в 19:31
поделиться

Не могу видеть ваш код У нас с Ниром нет прав на редактирование, так что вот он снова:

Секрет кроется в конце the: moviePlayer.initialPlaybackTime = -1; перед тем, как его выпустить. Попробуйте: :)

-(void)playMovie:(NSString *)urlString{ movieURL = [NSURL URLWithString:urlString];          
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];    
moviePlayer.initialPlaybackTime = 0; 
//Register to receive a notification when the movie has finished playing. 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endPlay:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];

moviePlayer.scalingMode = MPMovieScalingModeAspectFit; 
moviePlayer.movieControlMode = MPMovieControlModeDefault;
moviePlayer.backgroundColor = [UIColor blackColor];

[moviePlayer play];

}

-(void)endPlay: (NSNotification*)notification{
 [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer]; 
moviePlayer.initialPlaybackTime = -1; 
[moviePlayer stop]; 
[moviePlayer release]; 
} 
1
ответ дан 2 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: