2016-09-18 2 views
8

AVPlayer случайным образом только воспроизводить аудио, не показывая видео дорожки ...воспроизведения AVPlayer сбоя в то время как AVAssetExportSession активен, как ИО 10

Воспроизведение видео правильно с AVPlayer, имея активный сеанс сжатия AVAssetExportSession:exportAsynchronouslyWithCompletionHandler теперь терпят неудачу. Кажется, что это вызывает некоторую нестабильность, которая сохраняется до тех пор, пока приложение не войдет в фоновый режим и не вернется.

Рассмотрение AVURLAsset при сбое воспроизведения видео, есть видеодорожка, даже если видео выход отсутствует. Я также не получаю никаких ошибок от компрессора или других компонентов воспроизведения ... Проблема возникает даже некоторое время после того, как сеанс сжатия вернулся.

Я пробовал отдельные потоки по-разному без успеха.

Похоже, что по состоянию на 10 прошивки есть что-то происходит под капотом, который вызывает какое-то конфликт между двумя процессами ...

+1

У вас есть пример проекта, который воспроизводит проблему? –

+0

@RhythmicFistman Я еще не сделал пример проекта. На данный момент я решил отключить пост-компрессию, предпочитая решение в реальном времени обходить ошибку. FYI, [Этот другой вопрос] (http://stackoverflow.com/questions/39300675/white-video-when-opening-avmutablecomposition-in-intstagram?nabledirect=1#comment66438880_39300675) кажется такой же ошибкой. –

+1

Какова ваша категория и опции «AVAudioSession»? –

ответ

8

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

Я полностью отключил использование AVAssetExportSession и решил проблему. Поэтому вызов AVAssetExportSession в сочетании с другими методами AV является причиной неустойчивости iOS.

В моем случае я использовал AVAssetExportSession для сжатия после захвата. Поэтому вместо этого я использовал AVAssetWriter, чтобы сэмплировать каждый кадр в режиме реального времени в формате, который мне нужен ...

Это должно быть исправлено в ближайшее время Apple, надеюсь.

+0

Если кто-то найдет обходное решение или услышит от Apple об этом, может они оставить комментарий, как они это сделали? Мне пришлось установить фоновый видео в качестве сообщения, в котором пользователь должен закрыть и открыть приложение, что является действительно ужасным опытом. – Ethan

+0

Как вы используете «AVPlayer» и «AVAssetExportSession»? –

+0

Я использую AVExportSession, чтобы объединить кучу видео вместе, а затем воспроизвести результирующее видео с помощью AVPlayer – Ethan

1

Я нашел решение своей проблемы. Как сказал Сами, проблема, похоже, в AVVideoCompositionCoreAnimationTool, которую я использовал для водяного знака моего видео. Я перешел к использованию CIFilter, который в любом случае имел более чистый код.

Я удалил все с CoreAnimationTool и использовал это (mixComposition мой AVMutableComposition):

let watermarkFilter = CIFilter(name: "CISourceOverCompositing")! 
let watermarkImage = CIImage(image: #imageLiteral(resourceName: "watermark"))! 
let videoComposition = AVVideoComposition(asset: mixComposition) { (filteringRequest) in 
    let source = filteringRequest.sourceImage.clampingToExtent() 
    watermarkFilter.setValue(source, forKey: "inputBackgroundImage") 
    let transform = CGAffineTransform(translationX: filteringRequest.sourceImage.extent.width - watermarkImage.extent.width - 2, y: 0) 
    watermarkFilter.setValue(watermarkImage.applying(transform), forKey: "inputImage") 
    filteringRequest.finish(with: watermarkFilter.outputImage!, context: nil) 
} 

, а затем в AVAssetExportSession прибавил:

exporter!.videoComposition = videoComposition 

Надежда, что помогает кому-то!

+0

Вы все еще используете AVAssetExportSession: exportAsynchronouslyWithCompletionHandl er? –

Смежные вопросы