2016-12-05 4 views
0

В документации https://developer.apple.com/reference/avfoundation/avcapturefileoutput указано, что для объекта AVCaptureFileOutput существует свойство делегата.Значение типа «AVCaptureFileOutput» не имеет делегата участника '

Но следующий код

let vfo = AVCaptureFileOutput() 
    vfo.delegate = self 

дает ошибку «Значение типа„AVCaptureFileOutput“не имеет ни одного члена" делегат»

Ищу использовать AVCaptureFileOutputDelegate для экземпляра AVCaptureMovieFileOutput.

Любой указатель будет полезен.

ответ

0

Перейдите по ссылке delegate property на странице, которую вы указали (или посмотрите на #if вокруг нее в файле заголовка), и вы заметите, что свойство предназначено только для macOS, а не для iOS. Таким образом, когда вы находитесь в проекте, ориентированном на iOS, этого свойства не существует.

IOS не позволяет одновременно получать образцы буфера во время захвата и записи в файл с теми же сессиями - вы можете иметь AVCaptureVideoDataOutput или AVCaptureMovieFileOutput, но не оба. Если вы просто хотите делегировать обратные вызовы о прогрессе захвата файла видео, используйте startRecording(toOutputFileURL:recordingDelegate:) и вместо этого принимайте AVCaptureFileOutputRecordingDelegate. Если вам нужны буферы с образцами, используйте AVCaptureVideoDataOutput для их получения и AVAssetWriter для вывода на нижний уровень.

+0

Я просто пытаюсь записать видео со звуком и получить уровень мощности звука одновременно. Есть ли комбинация классов, которая позволяет это? –

0

Благодарим за указатель на AVAssetWriter. Мне удалось найти образец RosyWriter https://developer.apple.com/library/content/samplecode/RosyWriter/Introduction/Intro.html. Модифицированный CaptureOutput: didOutputSampleBuffer для захвата аудио среднего уровня PowerPowerLevel сделал трюк получения записанного фильма и получения одновременных уровней звука.

Но есть ли более полосатый пример его использования? Мои попытки вырезать рендереры, которые делают манипуляции с видео, только сломали образец.

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