2011-01-04 3 views
2

Hier ist mein Problem.Problem beim Versuch, (mit MPMoviePlayerViewController) ein Video/Lied zu spielen, das ich heruntergeladen und in einer Datei gespeichert habe

Ich habe eine MPMoviePlayerViewController, die einige Videos, die im Web sind, spielen. Dieser Teil funktioniert.

Aber um sie später zu spielen, ohne Internet-Verbindung, speichere ich sie am Telefon mit diesem Stück Code

NSData * data = [NSData dataWithContentsOfURL:[self dataURL]]; 

    NSArray * documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString * baseDocumentPath = ([documentPaths count] > 0) ? [documentPaths objectAtIndex:0] : nil; 

    [data writeToFile:[baseDocumentPath stringByAppendingPathComponent:_itemId] 
     atomically:YES]; 

Dieser Teil ist in Ordnung, ich die Dateien auf meinem iMac spielen kann, wenn ich nehme sie vom Telefon.

Aber danach, wenn ich

NSArray * documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString * baseDocumentPath = ([documentPaths count] > 0) ? [documentPaths objectAtIndex:0] : nil; 
    videoController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL fileURLWithPath:[baseDocumentPath stringByAppendingPathComponent:file.itemId]]]; 

tun, ist es nur ein graues Fenster im Modal Viewcontroller. Und ich bekomme keine Benachrichtigungen vom Player.

Irgendwelche Ideen?

Danke.

+0

NSLog() die Datei.itemId, wenn es Ihnen zeigt, was Sie erwarten –

+0

Versuchen Sie auch NSFileManager zu verwenden, um die Datei zu öffnen, um zu sehen, ob es ein gültiger Dateipfad ist und die Datei dort erfolgreich gespeichert wurde. Sie sollten wahrscheinlich auch die Ausgabe Ihres 'data writetToFile: atomically:' Aufrufs überprüfen, um zu sehen, ob es OK gespeichert hat. – deanWombourne

+0

Es ist ein gültiger Dateipfad, ich kann zum Beispiel die Datenlänge protokollieren. Ich bin mir sicher, dass es die gute Datei ist. – Zoleas

Antwort

1

Jemand gefunden, was das Problem verursacht.

Der Dateiname hat keine Erweiterung (wie .mp4), also versucht der MPMovieController nicht, es zu lesen (das klingt verrückt nach mir -_-). Wenn ich manuell .mp4 zu meiner Videodatei hätte. Die App kann es lesen ... Ich werde die Erweiterung jeder Datei an ihren Namen anhängen.

Danke trotzdem :)

3

Ich stieß auf dieses Problem heute.

Es scheint, dass iOS keine Mediendateien mit der falschen Dateierweiterung laden wird. IMHO das ist ziemlich dummes Verhalten, wie ich meine Mediendateien mit zufälligen Namen (UUIDs) speichern.

Eine schnelle Abhilfe bestand darin, den folgenden Code zu verwenden, um einen Symlink zur ursprünglichen Datei zu erstellen und ihm die richtige Erweiterung zu geben. Jetzt wird iOS die Datei gerne laden.

// Create a symlink for iOS as it won't load any files with the wrong extension 
NSString *fixedFileName = [fileName stringByAppendingString:@".mp4"]; 
[[NSFileManager defaultManager] createSymbolicLinkAtPath:fixedFileName 
            withDestinationPath:fileName error:NULL]; 

Hoffe, dass hilft. Wir ignorieren einfach die Tatsache, dass ein Fehler aufgetreten ist, falls der Symlink bereits existiert.

+0

Das ist ein guter Weg, um es zu behandeln Danke :) Wie auch immer, diese App wird jetzt geliefert, so dass ich nur die Dateien mit ihren Erweiterungen gespeichert. – Zoleas

+0

Ich persönlich denke, es ist einfach nur dumm von Apple, sich auf die Erweiterung einer Datei zu verlassen, um den Inhaltstyp zu bestimmen. ;) – BastiBen

Verwandte Themen