- PVSM.RU - https://www.pvsm.ru -
В прошлый раз в обзорной статье про Intel INDE [1] мы упомянули о Media Pack и его ключевых возможностях. В этой статье мы остановимся на нем более подробно.
INDE Media Pack — это библиотека, включающая в себя различные компоненты для работы с аудио и видео. С точки зрения реализации — это надстройка над медиа компонентами Android, использующая аппаратное ускорение для кодирования и декодирования видео. По сравнению с использованием классов для работы с мультимедиа в Android, она гораздо более проста в использовании, разработчику нет нужды разбираться во всех тонкостях работы медиа кодеков, экстрактора, муксера, только для того, чтобы встроить в свое приложение возможность работы с видео.
Приложения, использующие Media Pack, будут работать на всех архитектурах (ARM, IA), на устройствах, работающих на Android 4.3 и выше.
Скачать библиотеку можно, используя ссылку на официальной странице Intel INDE [2]. После установки менеджера Intel INDE открываем его, выбираем компонент Media, далее Download, после того, как он будет загружен, запускаем установку (Install).

По завершении установки в выбранной директории будет создана папка, содержащая все, что нужно для начала работы с Media Pack.

Давайте начнем со сборки и запуска примеров, т.к. это самый быстрый и наглядный способ оценить, на что же способен Media Pack. Для этого нам потребуется Eclipse и устройство на Android версии 4.3 или выше.
Запускаем Eclipse далее File -> New -> Project -> Android Project From Existing Code

У проекта samples есть зависимость от проекта effects, чтобы Eclipse правильно определил все зависимости, необходимо импортировать сразу оба проекта. Для этого в качестве корневой директории необходимо указать путь к папке samples и отметить оба проекта для импорта — apps и effects.

Запускаем импортированный пакет apps как Android приложение, после сборки и запуска приложения появится главная активность приложения, в которой представлены различные модели использования, которые предлагает Media Pack.

Game Capturing – захват видео из приложения, использующего OpenGL
Transcode Video – преобразование видео с заданными параметрами
Join Video – склейка двух видео файлов
Cut Video – вырезание из видео заданного сегмента
Video Effect – преобразование видео с наложением видео эффекта
Audio Effect — преобразование видео с наложением аудио эффекта
Streaming from Camera – трансляция видео с камеры на сервис Wowza [3]
Get Media File Info – получение информации о медиа файле
Наигравшись с сэмплами, можно начинать изучать внутренности, первым кандидатом на разбор будет
Этот пример содержит две активности

Ключевым элементом в данном примере является класс MediaComposer, который принимает на вход один или несколько медиа файлов и преобразовывает их в соответствие с заданными параметрами.
Для того, чтобы преобразовать видео, нам необходимо выполнить пять простых шагов.
MediaComposer mediaComposer = new AndroidMediaObjectFactory(getApplicationContext());
String srcPath = “…”;
String dstPath = “…”;
mediaComposer.addSourceFile(srcPath);
mediaComposer.setTargetFile(dstPath);
// Создаем и инициализируем видео формат
// Формат видео
String videoMimeType = “video/avc”;
// Ширина кадра
int videoFrameWidth = 640;
// Высота кадра
int videoFrameHeight = 480;
// Битрейт в килобайтах
int videoBitRate = 5000;
// Частота кадров в секунду
int videoFrameRate = 30;
// Частота ключевых кадров
int videoIFrameInterval = 1;
VideoFormatAndroid videoFormat = new VideoFormatAndroid(videoMimeType, videoFrameWidth, videoFrameHeight);
videoFormat.setVideoBitRateInKBytes(videoBitRate);
videoFormat.setVideoFrameRate(videoFrameRate);
videoFormat.setVideoIFrameInterval(videoIFrameInterval);
// Задаем видео формат
mediaComposer.setTargetVideoFormat(videoFormat);
// Создаем и инициализируем аудио формат
// Формат Audio
String audioMimeType = “audio/mp4a-latm”;
// Частота аудио сэмплов
int audioSampleRate = 48000;
// Количество уадио каналов
int audioChannelCount = 2;
// Аудио профайл
int audioProfile = MediaCodecInfo.CodecProfileLevel.AACObjectLC;
AudioFormatAndroid audioFormat = new AudioFormatAndroid(audioMimeType , audioSampleRate, audioChannelCount);
audioFormat.setAudioBitrate(audioBitRate);
audioFormat.setAudioAacProfile(audioProfile);
// Задаем аудио формат
mediaComposer.setTargetAudioFormat(audioFormat);
Преобразование видео в MediaComposer происходит асинхронно, в отдельном потоке. Для того, чтобы приложение могло получать уведомление о начале и окончании процеса преобразования, получало сообщения о прогрессе, возникающих ошибках, оно должно реализовать интерфейс MediaComposer.IProgressListener и передать указатель на него объекту MediaComposer.
public MediaComposer.IProgressListener progressListener = new MediaComposer.IProgressListener() {
@Override
public void onMediaStart() {
// Процесс преобразования начался
}
@Override
public void onMediaProgress(float progress) {
// Текущий прогресс
}
@Override
public void onMediaDone() {
// Процесс преобразования завершился по завершению
}
@Override
public void onMediaPause() {
// Процесс преобразования был приостановлен
}
@Override
public void onMediaStop() {
// Процесс преобразования остановлен
}
@Override
public void onError(Exception exception) {
// Процесс преобразования завершился с ошибкой
}
};
// Передаем указатель на интерфейс в MediaComposer
mediaComposer.addProgressListener(progressListener);
Финальный шаг, на котором запускается процесс преобразования с заданными параметрами.
mediaComposer.start();
Да, кода получилось немало, но в основном он относится к передаче параметров кодирования и обработке текущего состояния. Опять же, если сравнивать с реализацией с использованием «штатных» классов Android, таких как MediaCodec, MediaExtractor, MediaMuxer, то кода в нашем примере получилось несоизмеримо меньше.
Преобразование видео — это не единственная модель использования Media Pack. В следующих статьях мы расскажем, как с помощью класса GLCapture вы можете добавить возможность захвата и кодирования видео в Android приложения, использующие Open GL или базирующиеся на таких популярных фреймворках, как Unity [4] и libGDX [5].
Автор: Terror
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/58106
Ссылки в тексте:
[1] обзорной статье про Intel INDE: http://habrahabr.ru/company/intel/blog/216495/
[2] Intel INDE: http://software.intel.com/en-us/intel-inde
[3] Wowza: http://www.wowza.com/
[4] Unity: https://unity3d.com/
[5] libGDX: http://libgdx.badlogicgames.com/
[6] Источник: http://habrahabr.ru/post/216545/
Нажмите здесь для печати.