-1
iOS 기본 SDK가 8.1입니다. dispatch_get_main_queue
은 8.1 시뮬레이터에서 실행될 때 잘 동작합니다. 그러나 7.1 시뮬레이터에서 실행하면 호출되지 않습니다. 나는 dispatch_get_main_queue
이 iOS 8.0 이상에서 재 구현되었다.dispatch_get_main_queue가 작동하지 않습니다.
이 문제를 어떻게 해결할 수 있습니까? 기본 SDK 또는 무엇을 변경합니까?
AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init];
// audio track
AVMutableCompositionTrack *audioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio
preferredTrackID:kCMPersistentTrackID_Invalid];
//
NSError *error;
AVAsset *videoAsset = [AVAsset assetWithURL:videoURL];
[audioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration)
ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeAudio] firstObject]
atTime:kCMTimeZero
error:&error];
if (error) {
NSLog(@"extract audio error!");
return;
}
error = nil;
// audio path
NSString *path = [NSString stringWithFormat:@"%@newAudio.m4a", NSTemporaryDirectory()];
if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
if (![[NSFileManager defaultManager] removeItemAtPath:path error:&error]) {
NSLog(@"audio cannot be saved!");
}
}
// exporter
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition
presetName:AVAssetExportPresetAppleM4A];
exporter.outputURL = [NSURL fileURLWithPath:path];
exporter.outputFileType = AVFileTypeAppleM4A;
exporter.shouldOptimizeForNetworkUse = YES;
[exporter exportAsynchronouslyWithCompletionHandler:^{
//NSLog(@"export status: %ld", exporter.status);
dispatch_async(dispatch_get_main_queue(), ^{
[self exportDidFinish:exporter];
});
}];
}
현재 수행중인 작업을 보여주는 샘플 코드가 있습니까? 나는 iOS 7에서했던 것과 같은 방식으로 iOS 8에서'dispatch_get_main_queue'를 사용 해왔고 지금까지 어떤 문제도 경험하지 못했습니다. –
@Kai [수출 업체 exportAsynchronouslyWithCompletionHandler :^{ dispatch_async (dispatch_get_main_queue(),^{[자기 exportDidFinish : 수출 업체], }); }]]; – CancerKnight
iOS 7.1 시뮬레이터에서 해당 라인을 실행하지 않는다는 것을 확인하기 위해'[self exportDidFinish : exporter];'에 중단 점을 이미 설정 했습니까? 테스트를 위해 예제를 별도의 줄로 분리해야합니다. 그다지 도움이되지 않으면,'status'와'error '에 대해 ('exportAsynchronouslyWithCompletionHandler :'] (http://goo.gl/hxbmMI) 문서에 제시된 것과 같이 일부 KVO 코드를 추가하는 것이 좋습니다. 어떤 이유로 수출이 완료되지 않았는지 확인하십시오. –