Запись выбранной области экрана в Android - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь реализовать запись экрана.Я следовал Графика .Простое присвоение Surface из encoder.getInputSurface() VirtualDisplay делает свое дело.Теперь моя задача - кодировать определенную часть экрана.Итак, я пытался изменить входную поверхность для кодера, используя SurfaceTexture (я думаю, что это правильный метод).Но я не могу использовать созданную поверхность для записи экрана, и когда я передаю эту поверхность в VirtualDisplay, я не получаю никакого обратного вызова.Я также пытался записывать с использованием TextureMovieEncoder (от grafika), но, может быть, я не знаю правильный метод.

Я пытался понять с помощью следующих полезных ссылок. Как выходная поверхность декодера передается на входную поверхность кодера?

и

Android: возможно ли создать SurfaceTexture безa SurfaceView?

И я уверен, что grafika - отличный учебник, но я застрял.

Пожалуйста, предложите решение или другой работающий метод.Я застрял на несколько дней.

1 Ответ

0 голосов
/ 22 марта 2019

Я думаю, что правильный путь заключается в следующем:

  1. создать SurfaceTexture с текстурой oes.

  2. подключить VirtualDisplay к созданной Surfacetextureна шаге 1, таким образом, кадр перейдет к текстуре oes

  3. Зарегистрируйте прослушиватель onFrameAvailable на текстуре поверхности, затем вы получите непрерывный обратный вызов

  4. Рендеринг кадра в текстуре oes на входную поверхность кодера.

Ключевой процесс - шаг 4. Во время процесса рендеринга вы можете обрезать кадр путем изменения координаты текстуры.

Ниже приведен пример обрезки: Обрезать видео перед кодированием с помощью MediaCodec для действия Grafika «Непрерывный захват»

...