Попробовал 3ий вариант:
- screencap - очень медленно (2сек+/снимок), как я понял берет данные с framebuffer, т.е. если приложение не сохраняет туда кадры(например видеоплеер) - получим просто черный скриншот.
- minicap(https://github.com/openstf/minicap) - быстрый, 10fps+ легко, требует компиляции. Умеет работать как демон. В режим только скриншот - появляются фризы(видимо при сбросе файла на диск), картинка дергается. Только JPG. В Android 4.4(API19) работает с SurfaceFlinger, черных экранов нет.
- ffmpeg - быстрый, разнообразие входных/выходных форматов, выбор устройства для захвата. При захвате с framebuffer - так же черный экран. Как захватить с SurfaceFlinger - без понятия.
В исходниках Kodi+Boblight не копался, но видимо там проще - не скриншот видео, а плеер предоставляет нужно информацию о кадре. Так же оказалось проблемой найти подходящий алгоритм для поиска основного/среднего цвета на участке изображения.
В итоге все способы сводятся к работе с Surfaceflinger (https://source.android.com/devices/graphics/). Если не залезать в NDK с головой - можно попробовать использовать библиотеку minicap.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
- screencap - очень медленно (2сек+/снимок), как я понял берет данные с framebuffer, т.е. если приложение не сохраняет туда кадры(например видеоплеер) - получим просто черный скриншот.
- minicap(https://github.com/openstf/minicap) - быстрый, 10fps+ легко, требует компиляции. Умеет работать как демон. В режим только скриншот - появляются фризы(видимо при сбросе файла на диск), картинка дергается. Только JPG. В Android 4.4(API19) работает с SurfaceFlinger, черных экранов нет.
- ffmpeg - быстрый, разнообразие входных/выходных форматов, выбор устройства для захвата. При захвате с framebuffer - так же черный экран. Как захватить с SurfaceFlinger - без понятия.
В исходниках Kodi+Boblight не копался, но видимо там проще - не скриншот видео, а плеер предоставляет нужно информацию о кадре. Так же оказалось проблемой найти подходящий алгоритм для поиска основного/среднего цвета на участке изображения.
В итоге все способы сводятся к работе с Surfaceflinger (https://source.android.com/devices/graphics/). Если не залезать в NDK с головой - можно попробовать использовать библиотеку minicap.