Schalt-Videos in AVPlayer Erzeugt Flash Beim Wechsel

Ich bin mit AVFoundation ist AVPlayer zu spielen 2 video-clips aus 1 längeres video (also das Ende des ersten matches am Anfang des zweiten)

Wenn das erste video endet und der Benutzer tippt, erstelle ich einen neuen AVPlayer, und weisen Sie es auf meine PlayerView, und spielen Sie den zweiten clip.

Das alles funktioniert, aber es ist ein Prominente Bildschirm "flimmern".

Meine Vermutung ist, dass dies verursacht wird durch die player-Ansicht entfernen des ersten Clips und dann mit dem zweiten clip.

Was ich brauche, ist für dieses flackern nicht zu erscheinen, so daß man zwischen den beiden clips ist nahtlos.

Tun, wer weiß, ob es ist ein Weg, dies zu stoppen flickr, entweder über die AVPlayer* Klassen, oder einen Weg zu "fälschen", indem Sie Folgendes tun etwas zu machen, so dass dieser nicht sichtbar ist.

Dank

Unten ist der code von meinem laden und spielen Methode:

- (void)loadAssetFromFile
{
    NSURL *fileURL = nil;

    switch (playingClip)
    {
        case 1:
            fileURL = [[NSBundle mainBundle] URLForResource:@"wh_3a" withExtension:@"mp4"];
        break;

        case 2:
            fileURL = [[NSBundle mainBundle] URLForResource:@"wh_3b" withExtension:@"mp4"];
        break;

        case 3:
            fileURL = [[NSBundle mainBundle] URLForResource:@"wh_3c" withExtension:@"mp4"];
        break;

        case 4:
            fileURL = [[NSBundle mainBundle] URLForResource:@"wh_3d" withExtension:@"mp4"];
        break;

        default:
            return;
        break;
    }

    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:fileURL options:nil];
    NSString *tracksKey = @"tracks";

    [asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:tracksKey] completionHandler:
 ^{
     //The completion block goes here.
     NSError *error = nil;
     AVKeyValueStatus status = [asset statusOfValueForKey:tracksKey error:&error];

     if (status == AVKeyValueStatusLoaded)
     {
         self.playerItem = [AVPlayerItem playerItemWithAsset:asset];

         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:playerItem];

         self.player = [AVPlayer playerWithPlayerItem:playerItem];
         [playerView setPlayer:player];

         [self.player seekToTime:kCMTimeZero];

         [self play];
     }
     else {
         //Deal with the error appropriately.
         NSLog(@"The asset's tracks were not loaded:\n%@", [error localizedDescription]);
     }
 }];
}
  • Haben Sie versuchen, nur die Einstellung der Hintergrundfarbe der Blick hinter die AVPlayerLayer zu, sagen wir, schwarz statt weiß? Du tust das richtige in der Einstellung der playerView von der alten Spieler auf den neuen, im Gegensatz zu " entfernen/readding es. Die player-Ansicht leer sein irgendwann, da Sie die Festlegung auf das neue player-Instanz vor der Instanz ist bereit zu spielen. Sie könnten versuchen, die Einstellung nur die playerView über, wenn seine status ist AVPlayerStatusReadyToPlay?
  • waren Sie in der Lage, dieses Problem zu beheben ?
  • Siehe die Kommentare für diese Antwort für eine tatsächliche Arbeitszeit impl: stackoverflow.com/a/33335884/763355
InformationsquelleAutor kdbdallas | 2011-08-30
Schreibe einen Kommentar