From c3279333aae79236dcb61c2c7d676ea3393b8325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A6=D0=B0=D1=80=D0=B8=D0=BA=20=D0=90=D0=BB=D0=B5=D0=BA?= =?UTF-8?q?=D1=81=D0=B5=D0=B9=20=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B5?= =?UTF-8?q?=D0=B2=D0=B8=D1=87?= Date: Tue, 11 May 2021 21:32:16 +0300 Subject: [PATCH] add readme --- readme.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 readme.md diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..b679b75 --- /dev/null +++ b/readme.md @@ -0,0 +1,24 @@ +# **Тестовое задание Inspiry для Android Developer** + +----- + + +### Небольшое описание: +В отдельном модуле я создал Custom View **HelloSurface**, который унаследовал от **SurfaceView**. + +В нем я написал необходимые методы для движения за 20 фреймов любой фразы. + +Изначально я собирался реализовать рендер через **MediaRecorder**, однако столкнулся с проблемой синхронизации кадров. +Было принято решение реализовать запись видеопотока через **MediaCodec**. + +Протестировал на различных устройствах - работает без проблем, генерирует видео в 30 и 60 фпс. Есть пару недостатков, но на выполнение поставленной задачи они не влияют. + +Программное управление кодеком и fps я не делал, с ними можно поиграться в [Constants.kt](http://git.rst10h.su/rst10h/VideoEncodingTestTask/src/branch/master/app/src/main/java/su/rst10h/inspiry/Constants.kt). + +Файл сохраняется в папку данных приложения (***storage/Android/data/su.rst10h.inspiry/files***), где создается папка ***test***, а внутри создается **TestVideo.mp4** + +Первое нажатие на кнопку запускает рендер, кнопка становится неактивной и меняет надпись на **Rendering**. После записи файла с видео, название кнопки меняется на "OPEN MEDIA", нажатие на которую открывает записанный файл через Intent. + +Недостатки, о которых я знаю: +1. В текущем варианте надпись рисуется на Canvas в Surface. При этом рисуется один раз во вьюхе на экране, а второй раз рендерится inputSurface энкодера. Это можно исправить например, рендером в inputSurface, а затем использовать обычный SurfaceView как превью (но я пока не уверен, что так будет быстрее). +2. Использование Canvas. В плане производительности, думаю, лучше было бы рисовать на GLSurfaceView. Но для такой простой задачи он мне показался избыточным. \ No newline at end of file