Inserting an HTTP stream into a AVMutableComposition
I am trying to insert an AVURLAsset of a AVPlayerItem that states `AVPlayerItemStatusReadyToPlay` into an `AVMutableComposition` like this:


    composition_ = [[AVMutableComposition alloc] init];
    item_ = [[AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"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];


    - (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);
        }
    }


    - (void)observeValueForKeyPath:(NSString *)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 isEqualToString:@"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 isEqualToString:@"currentItem.duration"])
            {   //yes->
                VTRACE(@"player item duration available");
            }
        }
    }

Unfortunately, all I get is this lousy error message from the attempt to invoke `insertTimeRange:ofAsset:atTime:error:`

> 2011-11-29 22:24:59.446 XXX[13626:10703] -[XXX addItemToComposition:]
> -- error: Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo=0x7699f30
> {NSLocalizedFailureReason=An unknown error occurred (-12780),
> NSUnderlyingError=0xd124dd0 "The operation couldn’t be completed.
> (OSStatus error -12780.)", NSLocalizedDescription=The operation could
> not be completed}

What am I missing?

Why is it not possible to insert the item into the composition? 

When inspecting the `AVURLAsset` of that `AVPlayerItem` I also noticed that the tracks array is allocated but empty. Could that be the reason, and if so, how do I get the asset to properly hold valid tracks?

Inserting an HTTP stream into a AVMutableComposition
===

I am trying to insert an AVURLAsset of a AVPlayerItem that states `AVPlayerItemStatusReadyToPlay` into an `AVMutableComposition` like this:


    composition_ = [[AVMutableComposition alloc] init];
    item_ = [[AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"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];


    - (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);
        }
    }


    - (void)observeValueForKeyPath:(NSString *)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 isEqualToString:@"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 isEqualToString:@"currentItem.duration"])
            {   //yes->
                VTRACE(@"player item duration available");
            }
        }
    }

Unfortunately, all I get is this lousy error message from the attempt to invoke `insertTimeRange:ofAsset:atTime:error:`

> 2011-11-29 22:24:59.446 XXX[13626:10703] -[XXX addItemToComposition:]
> -- error: Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo=0x7699f30
> {NSLocalizedFailureReason=An unknown error occurred (-12780),
> NSUnderlyingError=0xd124dd0 "The operation couldn’t be completed.
> (OSStatus error -12780.)", NSLocalizedDescription=The operation could
> not be completed}

What am I missing?

Why is it not possible to insert the item into the composition? 

When inspecting the `AVURLAsset` of that `AVPlayerItem` I also noticed that the tracks array is allocated but empty. Could that be the reason, and if so, how do I get the asset to properly hold valid tracks?
