SlideShare a Scribd company logo
Опыт работы с Android
Media Framework
на примере приложения Cinepic
CINEPIC
● Собрать на Android
● API 18+
● Совместимо с 80%+ устройств
2
Фон клипа
● Подготовка фото
● Применение жестов Scale Up/Down, Translate
● Сохранение матрицы трансформации
3
● Очень не надежно
● Ресурсоемко
● Медленно
Превью в ячейке. Шаг первый
4
SurfaceView MediaPlayer
VideoView
+
=
● Надежно но не быстро
Превью в ячейке. Шаг второй
5
TextureView MediaPlayer
TextureVideoView
+
=
UI Thread
Превью в ячейке. Шаг третий
6
TextureView MediaCodec+ <=PlaybackController
AsyncThread
Кадры
То что нужно
● Максимально быстро
● Минимум памяти
● Минимум поддержки
● … но трудоемко
7
Трансформация видео во View
8
TranslateListener
ScaleListener
(-x,-y)
(0, 0)
Rect ImageBounds
ViewBounds
Эффекты
9
TextureView=>VideoStream <=
OpenGL ES ObjectAnimator
Fade In/Out
Scale Up
Ffmpeg
10
● Тяжелая
● Сложно поддерживать
ffmpeg module
Input params + Video Resized video
Транскодирование из коробки
11
MediaDecoder MediaEncoder=> => MediaMuxer
Intel Inde
● Компактная
● Может заменять кадры
● Есть сэмплы
● На основе MediaCodec
● Рендерит с помощью OpenGL ES
12
Извлечение кадров
13
MediaDecoder Surface DataExtractor FrameSaver
OpenGL ES
OpenGL ES
Заготовка Preview
14
Scene Drawer Surface MediaEncoder MediaMuxer
Рендеринг клипа
15
Frame Drawer
Tile Frame
Composer
Intel Inde frame
Composer
0 ms 15000 ms….
время
Frame
Provider
N times
Результаты работы c Video
16
Плюсы
● Совместимость с большинством устройств
● Скорость рендеринга и отрисовки
● Минимальное использование памяти
● Поддержка популярных видео форматов
Минусы
● Время подготовки preview
17
Аудио в Cinepic
Пользователь хочет:
● Загружать в проект существующий аудиофайл
● Записывать звуковой фрагмент используя микрофон смартфона
● Выбирать пятнадцати-секундный фрагмент и добавлять его к видео в
качестве звуковой дорожки
● Видеть waveform при записи и редактировании
18
Аудио в Android
19
Формат
20
Конвертация
● MediaCodec?
● ffmpeg?
● aac-encoder?
MP3 m4a
21
Конвертация
MP3 wav m4a
JLayer decoder
MediaCodec + MediaMuxer
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
Визуализация
MediaRecorder
● getMaxAmplitude()
● ~60ms
● 32767
25
RingDroid
● < 2.7.2 - CheapMP3, CheapAAC!
● 2.7.+ SoundFile :(
26
Визуализация
Итоги
27
28
Вопросы?
29

More Related Content

PDF
Как перезапустить проблемное приложение и одновременно отладить его
PDF
Владислав Грязнов "Многозадачность в PHP"
PPT
КРИ 2010. Разработка технологической платформы в условиях временного прессинга
PDF
Облака на любой вкус
PDF
Pythonic way of using BTRFS features
PDF
XP.Party (iOS) - unit tests frameworks overview
PPTX
WebAssembly and Blazor
PPTX
Инструменты профайлинга С++ кода
Как перезапустить проблемное приложение и одновременно отладить его
Владислав Грязнов "Многозадачность в PHP"
КРИ 2010. Разработка технологической платформы в условиях временного прессинга
Облака на любой вкус
Pythonic way of using BTRFS features
XP.Party (iOS) - unit tests frameworks overview
WebAssembly and Blazor
Инструменты профайлинга С++ кода

Viewers also liked (20)

PPTX
Android audio system(오디오 출력-트랙활성화)
PPTX
Android Training (Media)
PDF
mason updated cv2
PDF
2016-10-01 01 Звиад Кардава. Welcome to Internet of Things
PPTX
Android audio system(오디오 출력-트랙생성)
DOCX
Thiyagu-Resume-film-multimedia-editor
PDF
Why Employers Keen To Do Background Checks
PPTX
Surface flingerservice(서피스 출력 요청 jb)
PDF
Реєстрація розрахункових операцій в Чехії. Особливості запровадження в чесько...
PPTX
Mellss yr5 paeds breathing difficulties (congestive cardiac failure)
PPT
Ozymandias - in class notes
PDF
2016-09-17 03 Василий Полозов. WebRTC
PDF
안드로이드 MediaPlayer & VideoView
PPTX
Android audio system(audioplicy_service)
PPTX
Android media codec 사용하기
PDF
Biobancos y colecciones de muestras biologicas
PDF
Android's Multimedia Framework
PDF
08 android multimedia_framework_overview
PPTX
Android audio system(audioflinger)
PDF
IT talk "Процессы: настроим и перестроим"
Android audio system(오디오 출력-트랙활성화)
Android Training (Media)
mason updated cv2
2016-10-01 01 Звиад Кардава. Welcome to Internet of Things
Android audio system(오디오 출력-트랙생성)
Thiyagu-Resume-film-multimedia-editor
Why Employers Keen To Do Background Checks
Surface flingerservice(서피스 출력 요청 jb)
Реєстрація розрахункових операцій в Чехії. Особливості запровадження в чесько...
Mellss yr5 paeds breathing difficulties (congestive cardiac failure)
Ozymandias - in class notes
2016-09-17 03 Василий Полозов. WebRTC
안드로이드 MediaPlayer & VideoView
Android audio system(audioplicy_service)
Android media codec 사용하기
Biobancos y colecciones de muestras biologicas
Android's Multimedia Framework
08 android multimedia_framework_overview
Android audio system(audioflinger)
IT talk "Процессы: настроим и перестроим"
Ad

More from Омские ИТ-субботники (20)

PDF
2017-08-12 01 Алексей Коровянский. Привет, ARKit!
PDF
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
PDF
2017-05-06 02 Илья Сиганов. Зачем учить машины?
PDF
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное
PDF
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
PDF
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
PDF
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
PDF
2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидации
PDF
2017-02-04 02 Яков Лило. Решение задач
PDF
2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...
PDF
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
PDF
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
PDF
2016-12-03 03 Евгений Тюменцев. DSL на коленке
PDF
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот
PDF
2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...
PDF
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
PDF
2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?
PDF
2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикер
PDF
2016-09-17 02 Игорь Гончаровский. Техническая и программная сторона VoIP
PDF
2016-09-17 01 Василий Полозов. Обзор понятий и технологий VoIP
2017-08-12 01 Алексей Коровянский. Привет, ARKit!
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
2017-05-06 02 Илья Сиганов. Зачем учить машины?
2017 04-08 03 Максим Верзаков. Docker — жизнь, вселенная и все остальное
2017-04-08 01 Евгений Оськин. Video streaming: от идеи до нагруженной системы
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-02-04 03 Алексей Букуров, Игорь Циглер. DSL для правил валидации
2017-02-04 02 Яков Лило. Решение задач
2017-02-04 01 Евгений Тюменцев. Выразительные возможности языков программиро...
2016-12-03 01 Вадим Литвинов. От 2D к 3D обзор методов реконструкции поверхно...
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
2016-12-03 03 Евгений Тюменцев. DSL на коленке
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот
2016-11-12 03 Максим Дроздов. Навести порядок быстро, или как спасти оценки н...
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
2016-10-01 03 Андрей Аржанников. Что такое Bluetooth Low Energy?
2016-10-01 02 Евгений Комаров. Как я сделал IoT-кикер
2016-09-17 02 Игорь Гончаровский. Техническая и программная сторона VoIP
2016-09-17 01 Василий Полозов. Обзор понятий и технологий VoIP
Ad

2016-08-20 01 Дмитрий Рабецкий, Сергей Сорокин. Опыт работы с Android Media Framework