webentwicklung-frage-antwort-db.com.de

MPMoviePlayerController zeigt einen schwarzen leeren Bildschirm

Ich benutze MPMoviePlayerController, um eine lokale Datei in meinem Anwendungsdokumentordner abzuspielen, die ich als Server-URL heruntergeladen habe:

itemMoviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];
 [self.view addSubview:itemMoviePlayerController.view];
 itemMoviePlayerController.fullscreen = YES;
 itemMoviePlayerController.movieSourceType = MPMovieSourceTypeFile;
 itemMoviePlayerController.initialPlaybackTime = -1.0;
 [itemMoviePlayerController play];

Wenn ich .mov-Datei direkt nach dem Herunterladen wiedergebe, wird ein schwarzer leerer Bildschirm angezeigt. Die Benutzeroberfläche der App ist unbrauchbar. Wenn ich jedoch beim nächsten Mal dieselbe lokale Datei wiedergibt, wird sie einwandfrei abgespielt. Ich habe das sogar überprüft playState & localState für MPMoviePlayerController scheint sie in Ordnung zu sein. Was könnte Grund für einen schwarzen leeren Bildschirm sein?

25
Ritika

Dieses Problem scheint behoben zu sein, nachdem das Gerät iOS 5.0 auf 5.0 aktualisiert wurde.
Scheint bei der vorherigen Version ein Problem mit dem iOS SDK zu sein

0
Ritika

Sie müssen Ihre Instanz von MPMoviePlayerController, d. H. Als Eigenschaft oder Instanzvariable, beibehalten. Der Verweis auf den Movie-Player geht verloren, wenn Sie ihn nicht beibehalten.

31

Sie könnten versuchen, [itemMoviePlayerController prepareToPlay]; Vor den [itemMoviePlayerController play]; zu setzen.

Die von Apple bevorzugte Darstellung eines einzigen Vollbildvideos ist die Darstellung einer modalen MPMoviePlayerViewController (wie Hollance sagte). Um es darzustellen, sollten Sie Folgendes verwenden:

 moviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:fileURL];
 [self presentMoviePlayerViewControllerAnimated:moviePlayerViewController];
 [itemMoviePlayerController play];

Dies ist von Apple hier dokumentiert

Sie können dort lesen, dass Sie einen Verweis auf Ihre MPMoviePlayerViewController behalten sollten, um ihn später mit zu verwerfen

[self dismissMoviePlayerViewControllerAnimated:moviePlayerViewController].

15
dulgan

Ich habe dies durch Putten behoben 

@property (strong, nonatomic) MPMoviePlayerController *moviePlayer; 

in meiner .h-Datei und Aufruf von self.moviePlayer in meinem gesamten Code und es hat funktioniert!

13
mattblessed

Sie müssen stattdessen MPMoviePlayerViewController verwenden. Beachten Sie das Wort "Ansicht" dort.

7
Hollance

Ich hoffe das wird helfen. Ich habe dieses Problem in meinem Projekt gelöst

 -(void)startPlayingMovie
{
    NSLog(@"startPlayingMovie");
    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                         pathForResource:@"Start_video" ofType:@"mov"]];
    moviePlayer =  [[MPMoviePlayerViewController alloc]
                    initWithContentURL:url];
    moviePlayer.view.frame = CGRectMake(0, 0, self.view.bounds.size.height, self.view.bounds.size.width);
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(moviePlayBackDidFinish:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:moviePlayer.moviePlayer];

moviePlayer.moviePlayer.controlStyle = MPMovieControlStyleNone;
moviePlayer.moviePlayer.shouldAutoplay = YES;
[self presentMoviePlayerViewControllerAnimated:moviePlayer];
[moviePlayer.moviePlayer setFullscreen:YES animated:NO];

NSLog(@"endPlayingMovie");

}
3
Jerin4info24x7

Dasselbe ist mir passiert. Es stellte sich heraus, dass ich versucht hatte, den Film abzuspielen, während UIImagePickernoch nicht abgewiesen wurde. 

In meinem UIImagePickerDelegatemusste ich zuerst das UIImagePickerPopup-Fenster schließen und dann den ViewControlleröffnen, um den MPMediaPlayerControllerzu verwalten:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)infoDict
{
    //the first thing to do: dismiss the media picker
    if ([ipPop isPopoverVisible])
    {
        [ipPop dismissPopoverAnimated:ANIMATION_SETTING];
    }

    myMediaPlayerViewController * playerVC = [[myMediaPlayerViewController alloc] initWithMediaDict:infoDict];
    [self.navigationController pushViewController:playerVC animated:ANIMATION_SETTING];
}
2
cayeric

Ich hatte das gleiche Problem und es machte mich verrückt. Es würde funktionieren auf einem View Controller fein (Audio und Video), aber auf einem anderen nicht funktionieren (schwarzer Bildschirm nur mit Audio). Am Ende war alles, was ich tat, ÄNDERN DER ORDNUNG der Anrufe: Ich habe einfach gewartet, bis ich mit der Konfiguration des Movie-Players fertig war, bevor er ihn der Ansicht hinzufügte. Mit anderen Worten, ich habe "addSubview" in der Zeile kurz vor dem Aufruf "play" angerufen.

2
ghostatron

Dies ist der Code, den ich zum Abspielen einer Datei von der URL verwende:

MPMoviePlayerViewController *movieViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:contentUrl]];
movieViewController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[self presentMoviePlayerViewControllerAnimated:movieViewController];
[movieViewController release];

Es scheint gut für mich zu funktionieren. Zwei Notizen:

  • Einige Simulatoren (wie das aktuelle iOS 5.0) stürzen beim Abspielen eines Films ab, funktionieren aber auf einem echten Gerät
  • Wenn Sie den Teil movieSourceType weglassen, wird etwa eine Sekunde lang ein schwarzer Bildschirm angezeigt, bevor der Film beginnt
1
talkol

das muss man mit CGRectMake (0, 0, 0, 0) im fertigen Callback machen!

-(void)playMovieAtURL:(NSURL*)theURL

{
    MPMoviePlayerController* theMovie=[[MPMoviePlayerController alloc] initWithContentURL:theURL];
    theMovie.scalingMode=MPMovieScalingModeAspectFill;

    theMovie.view.frame = CGRectMake(2, 246, 317, 70);
    [self.view addSubview:theMovie.view];

    // Register for the playback finished notification. 

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(myMovieFinishedCallback:) 
                                                 name:MPMoviePlayerPlaybackDidFinishNotification 
                                               object:theMovie];

    // Movie playback is asynchronous, so this method returns immediately. 
    [theMovie play];
} 

// When the movie is done,release the controller. 
-(void)myMovieFinishedCallback:(NSNotification*)aNotification 
{
    MPMoviePlayerController* theMovie=[aNotification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                    name:MPMoviePlayerPlaybackDidFinishNotification 
                                                  object:theMovie];

    theMovie.view.frame = CGRectMake(0, 0, 0, 0);
    // Release the movie instance created in playMovieAtURL
    [theMovie release];

}
0
plop

Wenn Sie HTTP-URLs verwenden, stellen Sie sicher, dass Sie App Transport Security in Ihren Projekten * .plist deaktivieren. Es wird auch ein schwarzer Bildschirm verursacht.

Füge folgenden Code hinzu:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>

Hier:

   [INSERT CODE ABOVE HERE]
  </dict>
</plist>
----- BOTTOM OF PLIST FILE
0
Fostah

Ich hatte das gleiche Problem. Es wurde das Problem behoben, durch das die Erweiterung der gerade wiedergegebenen Datei von .mpg in .mp4 geändert wurde. Offenbar erwartet MPMoviePlayerController eine korrekte Erweiterung, obwohl mir aus der Dokumentation nicht klar ist, dass dies eine Voraussetzung ist:

http://developer.Apple.com/library/ios/#documentation/mediaplayer/reference/MPMoviePlayerController_Class/Reference/Reference.html

Unterstützte Formate In dieser Klasse werden alle unter iOS unterstützten Film- oder Audiodateien Wiedergegeben. Dies umfasst sowohl gestreamte Inhalte als auch Dateien mit fester Länge. Für Filmdateien bedeutet dies normalerweise Dateien mit den Erweiterungen .mov, .Mp4, .mpv und .3gp und die eine der folgenden Komprimierungsstandards :

0

Ich hatte ein ähnliches Problem. Nach der Wiedergabe erscheint ein leerer Bildschirm, der die erneute Wiedergabe von Videos verhindert. Nun, hier ist meine Arbeit. Auf diese Weise verschwindet die Play-Taste nicht.

[self.movieController stop]; 
[self.movieController prepareToPlay];
[self.movieController pause];
0