24 lines
2.7 KiB
Markdown
24 lines
2.7 KiB
Markdown
# **Тестовое задание 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. Но для такой простой задачи он мне показался избыточным. |