2011-05-11 33 views
6

首先我要说我喜欢这个论坛,它帮了我很多时间。 我有一个问题,我无法找到答案,所以这是我的第一个问题。OSStatus error - 12780第二次调用insertTimeRange:ofTrack:atTime:error:of AVMutableCompositionTrack

我的问题是这样的:

我有AVPlayerItem所表示的影像,用户可以使用cutBefore按钮切断视频滑块

负责该方法的左侧编辑视频的开始时间用于切割所述视频是以下情况:

- (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]; 

}

运行本- (void)cutBefore方法当杉杉时间它工作正常,当我运行它第二次(视频已经被编辑过一次)

[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]; 

方法有以下错误返回:

操作无法完成。 (OSStatus错误-12780。)

我试图寻找什么错误代码的意思,但几乎没有发现。

感谢您的帮助

回答

0

我找到了一个解决方法这个问题,看来使用方法insertTimeRange:ofTrack:atTime:error:与AVMutableComposition的轨迹作为输入轨迹造成错误,所以我所做的是节省了初始资产(其中WASN是AVMutableComposition的一个实例,但是AVAsset的一个实例),并使用它作为输入追踪到insertTimeRange:ofTrack:atTime:error:

0

我也遇到了这个问题,并通过创建组合的可变副本,然后删除第一部分组成。

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

我面对这个问题,问题是我的计算这种方法的timeRangestartTime参数。 timeRange.start.valuestartTime.value必须是正数。也许我迟到的答案会帮助别人。

0

我遇到了同样的问题并解决了,上面的elk的回答会帮助你。

“OSStatus error - 12780,操作无法完成”可能是由于应用程序内存不足导致的,因为我在模拟器上运行我的应用程序时没有遇到问题。

在我的情况下,当我在AVMutableCompositionTracks中插入AVAssetTrack实例之前创建了多个AVAssetTrack实例时,错误被重现。我改变了只有一个AVAssetTrack实例刚刚被插入AVMutableCompositionTrack之前被创建,然后我解决了它。