1

複数のオーディオ ファイルを複数のクリップにマージしようとしています。複数のビデオを正常に追加しましたが、複数のオーディオ ファイルを追加できません。次の方法を試してみたところ、「__NSArrayM insertObject:atIndex:]: object cannot be AVURLAsset を追加して試してみましたが、「[AVURLAsset アセット]: 認識されないセレクターがインスタンスに送信されました」というエラーが表示されました。このコードの最後の行でアプリがクラッシュしています。解決策を見つけるか、例を挙げてください。
- (BOOL)insertTimeRanges:(NSArray *)timeRanges ofTracks:(NSArray *)tracks atTime:(CMTime)startTime error:(NSError **)error

NSMutableArray *audioUrlArray= [[NSMutableArray alloc]init];
NSMutableArray *audioTimeRangesArray = [[NSMutableArray alloc]init];
CMTime audioTime = kCMTimeZero;
for (int i = 0; i < self.selectedSongsArray.count; i++)
{
    MPMediaItem * songItem = [self.selectedSongsArray objectAtIndex:i];
    NSURL *songURL = [songItem valueForProperty: MPMediaItemPropertyAssetURL];
    AVURLAsset *audioUrl = [AVURLAsset URLAssetWithURL:songURL options:nil];        
    AVAssetTrack *track = [[audioUrl tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];        
    AVAsset *audioAsset = [AVAsset assetWithURL:songURL];
    [audioUrlArray addObject:track];
    CMTimeRange timeRange = CMTimeRangeMake(audioTime, audioAsset.duration);
    [audioTimeRangesArray addObject:[NSValue valueWithCMTimeRange:timeRange]];
}
AVMutableCompositionTrack *audioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];

[audioTrack insertTimeRanges:audioTimeRangesArray ofTracks:audioUrlArray atTime:kCMTimeZero error:nil];
4

1 に答える 1

1

私は同じ問題を抱えていました.可変配列を追加してAVURLAssetを保持しました. for ループが終了すると、ARC は AVURLAsset を収集し、格納しているビットは破棄されます。

于 2013-01-23T19:22:58.877 に答える