0

J'utilise un MPMediaPickerController pour permettre à l'utilisateur de sélectionner des vidéos et des morceaux de la bibliothèque sur l'appareil. J'autorise ceci avec l'initialisation: initWithMediaTypes:MPMediaTypeAny pour le sélecteur. L'utilisateur peut alors lire la chanson ou l'application vidéo après l'exportation. Voici mon code de film-exportation après le décapage à ses fonctionnalités de base:Exportation de vidéo à partir de MPMediaPickerController - pas d'audio

- (void)mediaPicker:(MPMediaPickerController*)mediaPicker didPickMediaItems:(MPMediaItemCollection*)mediaItemCollection { 
    AVAssetExportSession *exportSession; 
    NSString *filePath; 
    NSURL *fileUrl; 

    for (MPMediaItem *item in mediaItemCollection.items) { 
     NSURL *assetUrl = [item valueForProperty:MPMediaItemPropertyAssetURL]; 
     AVAsset *currAsset = [AVAsset assetWithURL:assetUrl]; 
     exportSession = [[AVAssetExportSession alloc] initWithAsset:[AVAsset assetWithURL:assetUrl] presetName:AVAssetExportPresetHighestQuality]; 
     exportSession.shouldOptimizeForNetworkUse = YES; 
     exportSession.outputFileType = AVFileTypeQuickTimeMovie; 
     filePath = [title stringByAppendingString:@".mov"]; 
     fileUrl = [NSURL fileURLWithPath:[[NSFileManager documentDirectory] stringByAppendingPathComponent:filePath]]; 

     exportSession.outputURL = fileUrl; 
     dispatch_group_enter(dispatchGroup); 

     [exportSession exportAsynchronouslyWithCompletionHandler:^{ 
      // success 
     } 
     dispatch_group_leave(dispatchGroup); 
    }]; 
    } 

Ce code similaire fonctionne très bien pour faire audio, mais pour la vidéo, l'audio de la vidéo ne joue pas. La plupart du contenu d'iTunes est protégé et non exportable, donc je voulais tester avec une vidéo rapide faite maison avec mon iPhone. J'ai filmé la vidéo, l'ai traînée dans iTunes (et j'en ai fait une "vidéo musicale" pour qu'elle apparaisse correctement et puisse être exportée dans la bibliothèque de mon téléphone). Ensuite, j'ai synchronisé et envoyé à mon appareil pour les tests.

Dans l'application, la vidéo s'affiche très bien dans le sélecteur de médias, et je peux l'exporter sans erreurs que je peux voir. Cependant, quand je le joue dans l'application, il ne joue que la vidéo et non l'audio. Les autres vidéos que j'importe depuis d'autres sources fonctionnent bien pour lire l'audio de la vidéo, donc je ne pense pas que ce soit le lecteur lui-même.

Y a-t-il quelque chose qui me manque peut-être ici pour expliquer pourquoi l'audio ne se présenterait pas à ce type d'export depuis le sélecteur de média? Merci d'avance pour toute aide sur cette question!

Répondre

1

Vous ne savez pas si c'est la solution idéale, mais la seule façon que nous avons trouvée autour de ce problème était de le changer pour forcer le format m4v avec PresetPassthrough. I.e:

exportSession = [[AVAssetExportSession alloc] initWithAsset:[AVAsset assetWithURL:assetUrl] presetName:AVAssetExportPresetPassthrough]; 
exportSession.shouldOptimizeForNetworkUse = YES; 
exportSession.outputFileType = AVFileTypeAppleM4V; 
filePath = [title stringByAppendingString:@".m4v"]; 

L'audio et la vidéo semblent fonctionner correctement pour les vidéos importées localement de cette manière, après avoir effectué ce changement.

Questions connexes