我们有一个用于iPhone的视频编辑应用程序。当我们每次尝试从AVURLAsset读取AVAssetTrack来获取有效媒体文件的应用程序时,该应用程序随机崩溃,该文件位于相同的URL。该崩溃仅在iOS 12.0之后的iPhone 7和更高版本上才开始出现。它永远不会在任何其他手机上崩溃。它会在我们访问曲目的所有代码中崩溃。以下是此类代码的一个示例
-(void)addCMSegmentDataInAVCompositionVideoTrack:(DTVideoSegmentData*)videoSegmentData withType:(int)videoType{
AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:videoSegmentData.assetURL options:nil];
CMTime singleClipDisplayTime = videoSegmentData.duration;
CMTime rangeStart = videoSegmentData.rangeStartTime;
CMTimeRange video_timeRange = CMTimeRangeMake(rangeStart,singleClipDisplayTime);
videoSegmentData.videoTimeRange = CMTimeRangeMake(videoSegmentData.startTime,singleClipDisplayTime);
if (videoType==VIDEO_ONE) {
[self.compositionVideoOneTrack insertTimeRange:video_timeRange ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:videoSegmentData.startTime error:nil];
videoSegmentData.compositionAudioTrack = [self createCMAVCompositionAudioTrackWithVideo1SegmentData:videoSegmentData];
}}
通过给出错误,指出索引0的对象不存在,应用程序肯定会像使用相同URL的该函数的2/10调用一样崩溃。它仅发生在iPhone 7 plus和其他设备上。崩溃总是在这行上
[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]