Insérer un stream HTTP dans un AVMutableComposition

J'essaye d'insert un AVURLAsset d'un AVPlayerItem qui indique AVPlayerItemStatusReadyToPlay dans un AVMutableComposition comme ceci:

 composition_ = [[AVMutableComposition alloc] init]; insertionPoint_ = kCMTimeZero; item_ = [[AVPlayerItem playerItemWithURL:[NSURL URLWithSsortingng:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]] retain]; [item_ addObserver:self forKeyPath:@"status" options:0 context:nil]; player_ = [[AVPlayer playerWithPlayerItem:item_] retain]; [player_ addObserver:self forKeyPath:@"currentItem.duration" options:0 context:nil]; /** * append a player-item to our composition */ - (void)addItemToComposition:(AVPlayerItem *)item { NSError *error = nil; VTRACE(@"item duration: %g", CMTimeGetSeconds(item.duration)); if (![composition_ insertTimeRange:CMTimeRangeMake(kCMTimeZero, item.duration) ofAsset:item.asset atTime:insertionPoint_ error:&error]) { VTRACE(@"error: %@", error); } } /** * simplified value observer callback */ - (void)observeValueForKeyPath:(NSSsortingng *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([object isKindOfClass:[AVPlayerItem class]]) { AVPlayerItem *item = (AVPlayerItem *)object; //playerItem status value changed? if ([keyPath isEqualToSsortingng:@"status"]) { //yes-> switch(item.status) { case AVPlayerItemStatusFailed: VTRACE(@"player item status failed"); break; case AVPlayerItemStatusReadyToPlay: VTRACE(@"player item status is ready to play"); [self addItemToComposition:player_.currentItem]; break; case AVPlayerItemStatusUnknown: VTRACE(@"player item status is unknown"); break; } } } else if([object isKindOfClass:[AVPlayer class]]) { if ([keyPath isEqualToSsortingng:@"currentItem.duration"]) { //yes-> VTRACE(@"player item duration available"); } } } 

Malheureusement, tout ce que je reçois est ce message d'erreur moche de la tentative d'invoquer AVMutableComposition insertTimeRange:ofAsset:atTime:error:

2011-11-29 22: 24: 59.446 XXX [13626: 10703] – [XXX addItemToComposition:] – erreur: Erreur Domaine = AVFoundationErrorDomain Code = -11800 "L'opération n'a pas pu aboutir" UserInfo = 0x7699f30 {NSLocalizedFailureReason = Un inconnu erreur s'est produite (-12780), NSUnderlyingError = 0xd124dd0 "L'opération n'a pas pu être terminée. (erreur OSStatus -12780.)", NSLocalizedDescription = L'opération n'a pas pu être terminée}

Qu'est-ce que je rate?

Pourquoi n'est-il pas possible d'insert l'élément dans la composition?

Lors de l'inspection de l' AVURLAsset de cet AVPlayerItem j'ai également remarqué que le tableau de traces est alloué mais vide. Cela pourrait-il être la raison, et si oui, comment puis-je get l' AVURLAsset pour tenir correctement les pistes valides?

Eh bien, j'ai une réponse d'une autre source et je ne l'aime pas …

Il est apparemment seulement possible d'insert des éléments locaux (actifs) dans une AVMutableComposition , les éléments distants (comme les stream video HTTP) ne fonctionneront pas.

Le fait que la documentation ne le dise pas et le fait que le message d'erreur que je reçois soit inutile semble être une omission de la part d'Apple. J'ai fait un rapport de bogue pour améliorer cette situation.

Identifiant du Bug Radar Apple: 10517711

Ouvrir le rapport de bogue radar .