Я работаю над проектом, который в реальном времени передает изображение с рабочего стола компьютера Mac OS X на устройство iOS.Моя главная проблема - захват экрана . Мне не разрешено использовать готовые библиотеки, которые позволяют записать несколько строк кода за 5 минут и транслировать видео по всему миру.Я нашел действительно хорошую вещь на GitHub, которая получает изображение всего экрана, используя X11 и C ++:
https://github.com/Butataki/cpp-x11-make-screenshot
Я протестировал этот код на своей Ubuntu, и все работает какОчарование: для захвата 1 кадра без сохранения данных требуется около 12 мс и около 25 мс с кодированием в .jpg и сохранением на диске.
Чтобы создать его, я сделал это:
$ sudo apt install libjpeg-dev libpng-dev libx11-dev
, изменив 'true' на 'TRUE' в этих строках:
//(screenshot.cpp : 232,233 lines)
jpeg_set_quality (&cinfo, quality, TRUE);
jpeg_start_compress(&cinfo, TRUE);
и изменив Z_BEST_COMPRESSION
на PNG_Z_DEFAULT_COMPRESSION
Проблема в том, чтоЯ сделал почти те же операции в своем XCode (Mac OS Mojave 10.14), загрузил и связал все необходимые библиотеки, запустил исполняемый файл и, наконец ... Я получил чистое изображение.Ошибок не возникало, все работает «отлично» и сохраняет изображение .jpg в моей папке на рабочем столе.
Тогда я понял, что у X11 есть нечто, называемое «корневым окном», которое охватывает весь рабочий стол, и вы можете просто найти это окно и захватить все на своем экране.Но я думаю, что это верно для Ubuntu, а не для моего Mac.
На самом деле, в этой статье есть что-то про «корневое окно», но я просто не могу ничего исправить: https://finkers.wordpress.com/running-x11/#intro.rootless
PS Если это не очень хороший способ, возможно, есть некоторыедругие способы выполнить мою задачу (захват экрана в реальном времени в Mac OS)?