Белое видео при открытии AVMutableComposition в Instagram

После экспорта AVMutableComposition я использую PHPhotoLibrary, чтобы сохранить видео в альбоме камеры. Затем в обработчике завершения creationRequestForAssetFromVideoAtFileURL: я открываю сохраненное видео в Instagram, например так:

__block PHObjectPlaceholder *videoAssetPlaceholder;

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    PHAssetChangeRequest *req = [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:localVideoURL];
    videoAssetPlaceholder = req.placeholderForCreatedAsset;
} completionHandler:^(BOOL success, NSError *error) {
    if (success) {
        completion(YES);
        NSString *localID = videoAssetPlaceholder.localIdentifier;
        NSRange rangeOfSlash = [localID rangeOfString:@"/"];
        if (rangeOfSlash.location != NSNotFound) {
            NSString *assetID = [localID substringToIndex:rangeOfSlash.location];
            NSURL *instagramURL = [NSURL URLWithString:[NSString stringWithFormat:@"instagram://library?AssetPath=%@", assetID]];
            if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) {
                [[UIApplication sharedApplication] openURL:instagramURL];
            }
        }
    }
}];

Примерно в 50 % случаев Instagram открывается, и видео воспроизводится так, как ожидалось. Однако в остальных 50% случаев и видео, и предварительный просмотр белые, и все, что я получаю, это звук. Обычно это исправляется путем выбора другого видео, а затем возврата к моему видео. Видео отлично воспроизводится в фотопленке, проблемы вызывает только Instagram. Это проблема Instagram или я неправильно экспортирую свои видео?

Это мои настройки AVAssetExportSession:

AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition
                                                                  presetName:AVAssetExportPresetHighestQuality];
exporter.outputURL = url;
exporter.outputFileType = AVFileTypeMPEG4;
exporter.shouldOptimizeForNetworkUse = YES;
exporter.videoComposition = mainCompositionInst;
[exporter exportAsynchronouslyWithCompletionHandler:^{
    dispatch_async(dispatch_get_main_queue(), ^{
        handler(exporter.outputURL);
    });
}];

person Daniel Larsson    schedule 02.09.2016    source источник
comment
Дэниел, я думаю, мы охотимся на одного и того же кита. Мой вопрос   -  person Andres Canella    schedule 18.09.2016
comment
У тебя есть решение? Я думал, что AVAssetExportSession должен быть активен, когда я начал воспроизведение, но, похоже, это происходит даже после его завершения. Думал, если отменить сразу после запуска, то проблемы похоже не будет.   -  person Andres Canella    schedule 18.09.2016
comment
@AndresCanella Я еще не нашел решения для этого. Поскольку я видел проблему только при экспорте в Instagram, я мог бы связаться с ними, чтобы узнать, является ли это известной ошибкой или нет. Но да, определенно кажется, что наши вопросы имеют одно и то же происхождение.   -  person Daniel Larsson    schedule 19.09.2016
comment
Цени это, Даниил. У вас это тоже началось с iOS10?   -  person Andres Canella    schedule 19.09.2016
comment
Я избежал ошибки iOS с моей стороны, не используя AVAssetExportSession после захвата, это может быть не вариант для вас, поскольку вы используете API, если, возможно, вы не предоставите точный формат, который хочет Instagram?... Я использую AVCaptureSession с AVAssetWriter для корректировки изображения во время захвата...   -  person Andres Canella    schedule 20.09.2016
comment
Спасибо за отзыв. Да, мне нужно использовать AVAssetExportSession, так как я использую его для создания композиции, отличной от исходного видео.   -  person Daniel Larsson    schedule 20.09.2016
comment
@DanielLarsson, ты нашел решение? Я не могу найти обходной путь, который работает идеально.   -  person Sam    schedule 09.11.2016


Ответы (1)


Только что услышал от Apple DTS. Они также согласны с тем, что это указывает на ошибку Apple iOS, и попросили меня зарегистрировать ее.

Я прекратил использование AVAssetExportSession, как упоминалось выше, и это решило мою проблему в качестве обходного пути. Таким образом, проблема, похоже, связана с этим методом, который, вероятно, содержится в используемом вами методе Instagram.

Так что, пока Apple не исправит это или Instagram не создаст обходной путь, решения этой проблемы, похоже, не будет… Облом

person Andres Canella    schedule 21.09.2016
comment
Я понимаю. Спасибо, что сообщили мне, что DTS сказал вам, надеюсь, что это скоро будет решено. - person Daniel Larsson; 22.09.2016