AVURLAsset refuse de charger la vidéo
Je suis en train de charger un fichier vidéo dans mon iPad app comme un AVURLAsset
, à l'aide de l'asynchrone-chargement des choses à attendre qu'il soit prêt. Problème c'est que quand je le lance, j'obtiens un complètement générique "message d'erreur" échec que je n'ai aucune idée de quoi faire avec. La vidéo fonctionne si j'ai la main à un MPMoviePlayerController
, mais AVURLAsset
semble refuser rien avoir à faire avec elle.
Code:
asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:[docPath stringByAppendingPathComponent:@"video.mov"]] options:nil];
[asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
[self composeIfReady];
});
}];
...
- (void)composeIfReady
{
NSError *error = nil;
if([asset statusOfValueForKey:@"tracks" error:&error] == AVKeyValueStatusFailed)
NSLog(@"error loading: %@", [error description]);
if(error == nil)
NSLog(@"okay awesome");
}
La sortie:
error loading: Error Domain=AVFoundationErrorDomain Code=-11800 "The operation couldn’t be completed. (AVFoundationErrorDomain error -11800.)" UserInfo=0x1696f0 {NSUnderlyingError=0x169a40 "The operation couldn’t be completed. (OSStatus error -12936.)"}
-11800, en passant, est le code d'erreur pour "erreur inconnue". Sorte d'impasse. Des idées? Est-il quelque chose que je devrait être mise en place avant j'essaie de charger l'actif?
Vous devez vous connecter pour publier un commentaire.
Résolu. L'astuce: utilisez
fileURLWithPath:
, pasURLWithString:
. Apparemment, la différence est vraiment, vraiment important.URLWithString
—même pas pour me dire une erreur. AvecfileURLWithPath
ça marche, même si. C'est très imparfait... -.-Si quelqu'un est encore d'avoir des problèmes avec ce même après l'utilisation de fileURLWithPath, essayez de demander NSTimeIntervals dans le temps tableau si vous utilisez int(s).
Cela ne fonctionne pas:
Cela fonctionne:
Si vous utilisez
-[NSURL fileURLWithPath:]
pour créer l'URL et obtiens toujours la même erreur.Vérifier la
AVURLAssetReferenceRestrictionsKey
,Votre local m3u8 peuvent pas réussi à jouer si elle contient de la ressource distante.
Définir la valeur de
@(AVAssetReferenceRestrictionForbidNone)
devrait résoudre le problème.AVURLAsset
, voir-[AVURLAsset URLAssetWithURL:options:]