Files
VideoEncodingTestTask/readme.md

24 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# **Тестовое задание 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. Но для такой простой задачи он мне показался избыточным.