Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Опыт работы с Android Media Framework на примере приложения Cinepic.

Rosberry
August 20, 2016

Опыт работы с Android Media Framework на примере приложения Cinepic.

В докладе поставлены основные проблемы, с которыми столкнулась Android команда при работе с Media фреймворком на примере приложения Cinepic play.google.com/store/apps/details?id=com.cinepic. В процессе разработки были рассмотрены и применены наиболее оптимальные инструменты обработки аудио, видео и фото данных, которые воспроизводились на двух уровнях качества.

Rosberry

August 20, 2016
Tweet

More Decks by Rosberry

Other Decks in Programming

Transcript

  1. Фон клипа • Подготовка фото • Применение жестов Scale Up/Down,

    Translate • Сохранение матрицы трансформации 3
  2. • Очень не надежно • Ресурсоемко • Медленно Превью в

    ячейке. Шаг первый 4 SurfaceView MediaPlayer VideoView + =
  3. То что нужно • Максимально быстро • Минимум памяти •

    Минимум поддержки • … но трудоемко 7
  4. Intel Inde • Компактная • Может заменять кадры • Есть

    сэмплы • На основе MediaCodec • Рендерит с помощью OpenGL ES 12
  5. Рендеринг клипа 15 Frame Drawer Tile Frame Composer Intel Inde

    frame Composer 0 ms 15000 ms …. время Frame Provider N times
  6. Результаты работы c Video 16 Плюсы • Совместимость с большинством

    устройств • Скорость рендеринга и отрисовки • Минимальное использование памяти • Поддержка популярных видео форматов Минусы • Время подготовки preview
  7. 17 Аудио в Cinepic Пользователь хочет: • Загружать в проект

    существующий аудиофайл • Записывать звуковой фрагмент используя микрофон смартфона • Выбирать пятнадцати-секундный фрагмент и добавлять его к видео в качестве звуковой дорожки • Видеть waveform при записи и редактировании
  8. • Формирование очереди входных данных: codec.queueInputBuffer(inputBufIndex, 0, bytesRead, presentationTimeUs, 0);

    • Теоретический рассчёт времени смещения: presentationTimeUs = 1000000 * (totalBytesRead / SAMPLING_RATE); • Фактический рассчёт времени смещения: presentationTimeUs = 1000000 * ((totalBytesRead / (SAMPLING_RATE/10000)) / SAMPLING_RATE); Конвертация 23
  9. 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
  10. 28