Как получить больше информации от AVFoundationError - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь отладить мой класс "videoGenerator"; это класс, который берет видео URL и аудио URL и объединяет их вместе с AVFoundation. При попытке объединить несколько видео с музыкой c я получаю следующую ошибку из моей exportSession:

Error Domain=AVFoundationErrorDomain Code=-11838 "Operation Stopped" UserInfo={NSLocalizedFailureReason=The operation is not supported for this media., NSLocalizedDescription=Operation Stopped, NSUnderlyingError=0x600003f089f0 {Error Domain=NSOSStatusErrorDomain Code=-16976 "(null)"}}

Мне нужно знать больше, чем это, и я вижу это в ошибке есть адрес памяти:

NSUnderlyingError=0x600003f089f0

Мне интересно, может ли это содержать больше информации о том, что именно не так с типами носителей.

Мой вопрос, Как я могу получить что-то читаемое человеком с этого адреса памяти в консоли XCode, кроме использования $arg1 или это мой единственный вариант?

1 Ответ

0 голосов
/ 10 января 2020

Этот вопрос был действительно для меня больше о том, как отлаживать это, а не о том, что на самом деле было проблемой, которая препятствовала экспорту. Был в состоянии найти метод defineCompatibleFileTypes на AVAssetExportSession. Этот метод сообщает о форматах, в которые можно экспортировать входные файлы. Оказывается, сессия экспорта не может экспортировать файлы .mp3 в форматы .mp4 или .m4v, простая проверка перед экспортом устраняет эту проблему:

           exportSession.determineCompatibleFileTypes { (fileTypes) in
                if fileTypes.contains(.m4v) {
                    exportSession.outputFileType = .m4v
                } else {
                    exportSession.outputFileType = .mov
                }
            }

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

Комментарий Роба Нейпира был действительно привлекательным, поскольку ответ в конечном итоге не 't l ie в части NSUnderlyingError=0x600003f089f0 этой ошибки, но вместо этого в описании. Моя проблема заключалась в том, что я не прочитал ошибку и изначально понял, что это указывало на тот факт, что носитель, который я давал сеансу, не был поддержан тем носителем, который я запрашивал из сеанса.

Надеюсь, это поможет кому-то другому, кто плохо знаком с AV apis, так быстро, как я, мне потребовалось несколько дней, чтобы выследить:)

Спасибо всем, кто посмотрел или ушел комментарий!

...