Я использую H.264
кодировку, используя QTKit
в моем приложении.
Это приложение всегда вылетает с "segmentation fault
" или "EXEC_BAD_ACCESS
".
Мой отладчик показывает сбой в этом месте:
0x7fff801fea94: je 0x7fff801feba6 ; JVTLib_101906(JVTLib_100990*, JVTLib_101383 const*, JVTLib_101895*) + 3886
( ... )
0x7fff801feaba: movl $1, 24(%r13)
Последняя строка "movl
" вызывает сбой. В комментарии видно, что это модуль JVT
от кодера H.264
(я полагаю).
Чего я не понимаю, так это: мой код работал долгое время. Со вчерашнего дня это нестабильно. Если я использую «Инструменты», код работает нормально. Так что должна быть какая-то проблема с появлением меню. Раскомментирование видео работает нормально (это значит, что в меню нет проблем с памятью)
Понимание "магии" за QTKit
было бы захватывающим.
Редактировать: теперь я вижу имена объектов: сбой происходит в потоке 'QTBackgroundQueueRun
', а объект: 'PBRemoveObjectInternal(FSRefParam*, unsigned char)
'
РЕШЕНИЕ: Привет всем. Я наконец нашел проблему! Это был долгий и трудный поиск Гула и Ко.
QTKit
не нравится, когда бин прерывается таймерами. Если вы скомпилируете свой проект в режиме «Отладка» с включенными символами отладки и, например, с запуском GDB, приложение будет аварийно завершено!
NSLog работает в режиме «Release». Для большинства проблем отладки это будет работать. Поэтому, если вам нужно «действительно» отладить ваш код, добавьте некоторые определения makro в настройки вашего проекта, где удаляется весь связанный с QTCaptureMovieFileOutput код. И вы сделали. Интересно, почему QTKit так чувствителен к этим вещам. Но, как мы все знаем, Quicktime - очень старый код, и Apple модернизирует Quicktime X. Поэтому мы все можем надеяться на лучшие релизы в следующий раз.