2011-05-11 18 views
6

Antes que nada tengo que decir que me encanta este foro, me ha ayudado muchísimo tiempo. Tengo un problema y no pude encontrar una respuesta en ningún lado, así que esta es mi primera pregunta aquí.OSStatus error - 12780 al invocar insertTimeRange: ofTrack: atTime: error: de AVMutableCompositionTrack por segunda vez

Mi problema es el siguiente:

Tengo un video representado por AVPlayerItem, el usuario puede editar la hora de inicio de vídeo utilizando el botón cutBefore que corta el vídeo a la izquierda de la barra deslizante

El método responsables para cortar el video es la siguiente:

- (void)CutBeforeAction { 

AVMutableComposition *composition = [AVMutableComposition composition]; 

// Get the audio and video tracks of the video 
AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 
AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; 

// Calculate the new duration 
CMTime currStartTime = _player.currentItem.currentTime; 
CMTime endTime = _player.currentItem.duration; 
CMTimeRange range = CMTimeRangeFromTimeToTime(currStartTime, endTime); 

// Insert the new duration to the tracks 
NSError *error = nil; 
[compositionVideoTrack insertTimeRange:range 
           ofTrack:[[_player.currentItem.asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] 
           atTime:kCMTimeZero 
           error:&error]; 

[compositionAudioTrack insertTimeRange:range 
           ofTrack:[[_player.currentItem.asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] 
           atTime:kCMTimeZero 
           error:&error]; 
// Create a new AVPlayerItem with the new composition 
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:composition]; 
[self setPlayerItem:item]; 
[_player replaceCurrentItemWithPlayerItem:item]; 

// change the player location to the beginning of the video 
[_player seekToTime:CMTimeMakeWithSeconds(0, 1)]; 
[self syncTimeLabel]; 
[self syncScrubber]; 

}

Cuando se ejecuta el método - (void)cutBefore para la abetos tiempo que funciona bien, cuando lo ejecuto por segunda vez (el video ya se ha editado una vez) los

[compositionVideoTrack insertTimeRange:range 
          ofTrack:[[_player.currentItem.asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] 
          atTime:kCMTimeZero 
          error:&error]; 

y

[compositionAudioTrack insertTimeRange:range 
          ofTrack:[[_player.currentItem.asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] 
          atTime:kCMTimeZero 
          error:&error]; 

métodos devuelve el siguiente error:

No se pudo completar la operación. (OSStatus error -12780.)

Traté de buscar lo que significa ese código de error pero no encontré prácticamente nada.

Gracias por la ayuda

Respuesta

0

he encontrado una solución a este problema, parece que con el método insertTimeRange:ofTrack:atTime:error: con la pista de AVMutableComposition como la pista de entrada que ha provocado el error, así que lo que hice fue guardar el activo inicial (que wasn no es una instancia de AVMutableComposition sino una instancia de AVAsset), y usarlo como una entrada en insertTimeRange:ofTrack:atTime:error:

0

También me encontré con este problema y lo resolví creando una copia mutable de la composición y luego quitando la primera parte de la composición.

AVMutableComposition *newShortComposition = [oldComposition mutableCopy]; 
[newShortComposition removeTimeRange:CMTimeRangeMake(kCMTimeZero, <your clip time>)]; 
0

que enfrentan a este problema y el problema fue con mi cálculo para timeRange y startTime parámetros de este método. timeRange.start.value y startTime.value deben ser positivos. Tal vez mi respuesta tardía ayudará a alguien.

0

Me encontré con el mismo problema y se resolvió, la respuesta de elk anterior le ayudará.

"OSStatus error - 12780, No se pudo completar la operación" puede ocurrir por falta de memoria fuera de la aplicación porque no había encontrado el problema cuando ejecuté mi aplicación en un simulador.

En mi caso, el error se reprodujo cuando creé varias instancias de AVAssetTrack antes de que se insertaran en AVMutableCompositionTracks. Cambié que solo se crea una instancia de AVAssetTrack justo antes de que se inserte en el AVMutableCompositionTrack y luego lo resolví.

Cuestiones relacionadas