Я написал приложение для записи экрана, которое записывает видеофайлы H.264, используя VideoToolbox и AVWriter.Цвета в записанных файлах немного тусклые по сравнению с исходным экраном.Я знаю, что это потому, что colorProfile не сохраняется в видеофайле.
Это тесно связано с Как управлять цветом при выводе AVAssetWriter
Я создалтестовый стенд, чтобы показать это на github ScreenRecordTest
Если вы запустите это приложение, вы можете начать запись с помощью CMD-R и остановить его с помощью того же CMD-R (вы должны начать и остановить запись один разполучить полностью написанный файл фильма).Вы найдете запись в папке / tmp / под именем, похожим на это: "/ tmp / grab-2018-10-25 09:23:32 + 0000.mov"
При записи приложение показываетдва живых изображения: а) кадр, полученный из CGDisplayStream -и-б) cmSampleBuffer, который вышел из компрессора.
Я обнаружил, что IOSurface, возвращаемый из CGDisplayStream, не управляется цветом,так что вы заметите «тусклые» цвета уже перед сжатием.Если вы откомментируете строку 89 в AppDelegate.swift
// cgImage = cgImage.copy(colorSpace: screenColorSpace)!
, этот предварительный просмотр будет иметь правильные цвета.Теперь это только для отображения IOSurface перед сжатием.Я понятия не имею, как заставить другой live-preview (после сжатия) (строка 69 в AppDelegate) показывать правильные цвета (скажем: как применить colorProfile к CMSampleBuffer) или наиболее важно как пометьте записанный видеофайл правильным профилем , чтобы при открытии файла .mov при воспроизведении были получены правильные цвета.