Mam problem z AVAssetExportSession, w której postępy przestają się zwiększać, ale stan nadal mówi, że eksportuje. Jest to dość rzadkie zdarzenie, działa bezbłędnie w 99,99% czasu, ale i tak chcę rozwiązać problem.AVAssetExportSession przestaje się rozwijać
Więc zacznę eksportującego:
exportSession = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetMediumQuality];
exportSession.videoComposition = videoComposition;
exportSession.outputFileType = @"com.apple.quicktime-movie";
exportSession.outputURL = outputURL;
[exportSession exportAsynchronouslyWithCompletionHandler:^{
...
}];
wtedy timer kontroli postępu prac:
AVAssetExportSessionStatus status = [exportSession status];
float progress = 0;
if (status == AVAssetExportSessionStatusExporting) {
progress = [exportSession progress];
} else if (status == AVAssetExportSessionStatusCompleted) {
progress = 1;
}
NSLog(@"%d %f", status, progress);
[delegate processor:self didProgress:progress];
a wyjście kończy się patrząc jak:
2012-05-23 14:28:59.494 **********[1899:707] 2 0.125991
2012-05-23 14:28:59.994 **********[1899:707] 2 0.185280
2012-05-23 14:29:00.494 **********[1899:707] 2 0.259393
2012-05-23 14:29:00.994 **********[1899:707] 2 0.326093
2012-05-23 14:29:01.494 **********[1899:707] 2 0.400206
2012-05-23 14:29:01.995 **********[1899:707] 2 0.481729
2012-05-23 14:29:02.495 **********[1899:707] 2 0.541019
2012-05-23 14:29:02.997 **********[1899:707] 2 0.622542
2012-05-23 14:29:03.493 **********[1899:707] 2 0.681832
2012-05-23 14:29:03.995 **********[1899:707] 2 0.763355
2012-05-23 14:29:04.494 **********[1899:707] 2 0.822645
2012-05-23 14:29:04.994 **********[1899:707] 2 0.880082
2012-05-23 14:29:05.493 **********[1899:707] 2 0.880082
2012-05-23 14:29:05.994 **********[1899:707] 2 0.880082
...
2012-05-23 14:43:22.994 **********[1899:707] 2 0.880082
2012-05-23 14:43:23.493 **********[1899:707] 2 0.880082
2012-05-23 14:43:23.994 **********[1899:707] 2 0.880082
2012-05-23 14:43:24.494 **********[1899:707] 2 0.880082
(uwaga: Nie zatrzymuje się przy tym samym procencie za każdym razem, jest całkowicie losowy)
Jak widać na podstawie znaczników czasu, wykonanie pierwszych 88% zajęło 5 sekund, a następnie pozwoliłem mu działać przez kolejne 13 minut (pełne przetwarzanie wideo zwykle zajmuje nie więcej niż 10 sekund) bez żadnych zmian postęp.
Obecnie moją jedyną opcją jest sprawdzenie, czy postęp nie zmienił się w ciągu ostatnich X sekund i po prostu powiedzieć użytkownikowi, że się nie udało i spróbować ponownie.
Ktoś ma jakieś pomysły?
jakiego rodzaju dane próbujesz zapisać w sesji eksportu, może być przydatne poznanie –
Dodawanie wideo na końcu innego i zastępowanie części audio inną częścią pliku audio. Korzystanie z wideoComposition do ustawiania preferowanych transformacji filmów w ich godzinach rozpoczęcia. –
Mając również ten sam problem. jakiekolwiek postępy w tej sprawie? –