2016-08-20 01 Дмитрий Рабецкий, Сергей Сорокин. Опыт...
Transcript of 2016-08-20 01 Дмитрий Рабецкий, Сергей Сорокин. Опыт...
Фон клипа
● Подготовка фото
● Применение жестов Scale Up/Down, Translate
● Сохранение матрицы трансформации
3
● Очень не надежно
● Ресурсоемко
● Медленно
Превью в ячейке. Шаг первый
4
SurfaceView MediaPlayer
VideoView
+
=
UI Thread
Превью в ячейке. Шаг третий
6
TextureView MediaCodec+ <=PlaybackController
AsyncThread
Кадры
Трансформация видео во View
8
TranslateListener
ScaleListener
(-x,-y)
(0, 0)
Rect ImageBounds
ViewBounds
Intel Inde
● Компактная
● Может заменять кадры
● Есть сэмплы
● На основе MediaCodec
● Рендерит с помощью OpenGL ES
12
Рендеринг клипа
15
Frame DrawerTile Frame Composer
Intel Inde frame Composer
0 ms 15000 ms….время
Frame Provider
N times
Результаты работы c Video
16
Плюсы
● Совместимость с большинством устройств
● Скорость рендеринга и отрисовки
● Минимальное использование памяти
● Поддержка популярных видео форматов
Минусы
● Время подготовки preview
17
Аудио в Cinepic
Пользователь хочет:
● Загружать в проект существующий аудиофайл
● Записывать звуковой фрагмент используя микрофон смартфона
● Выбирать пятнадцати-секундный фрагмент и добавлять его к видео в
качестве звуковой дорожки
● Видеть waveform при записи и редактировании
22
Конвертация
Создание кодека по имени кодера/декодера:
● OMX.google.aac.encoder
Создание кодека по MIME- типу
● audio/mp4a-latm
● Формирование очереди входных данных:
codec.queueInputBuffer(inputBufIndex, 0, bytesRead, presentationTimeUs, 0);
● Теоретический рассчёт времени смещения:
presentationTimeUs = 1000000 * (totalBytesRead / SAMPLING_RATE);
● Фактический рассчёт времени смещения:
presentationTimeUs = 1000000 * ((totalBytesRead / (SAMPLING_RATE/10000)) / SAMPLING_RATE);
Конвертация
23
MP4Parser
● Вырезаем
Movie srcAudio = MovieCreator.build(srcAudioPath);Track track = srcAudio.getTracks().get(0);Movie cropped = new Movie();cropped.addTrack(new AppendTrack(new CroppedTrack(track, startSample, endSample)));
● Добавляем
Movie src = MovieCreator.build(srcVideo);Movie audio = MovieCreator.build(croppedAudio);src.addTrack(audio.getTracks().get(0));
24