Сергей Арнаут - stream yourself with android
TRANSCRIPT
Android AV streaming
Как это сделать?
НЕЛЬЗЯ ПРОСТО ВЗЯТЬ СДК
И НАЧАТЬ СТРИМИТЬ ДАННЫЕ
Нам нужен хитрый план!
Что же дает нам
андроид?
Видео Аудио Линукс
Мы всегда можем сделать
видеозапись
Часть первая: Легкий путь
Легкий путь: MediaRecorder
- MediaRecorder объект
- Источник видео/аудио
- Путь к файлу с результатами записи
- Prepare
- Start
- Stop
- Release
- MediaRecorder объект
- Источник видео/аудио
- Путь к файлу с результатами записи
- Prepare
- Start
- Stop
- Release
Усложняем: чтение файла "на
лету"
MediaRecorder
Файл
Поток
Пытаемся прочитать файл
- Описание типа файла
- Секция с бинарными данными (в семплах)
- Таблица описания семплов (оффсет, длина)
А почему таблица
описания идет в конце?
Мы же должны читать все
последовательно
Начали запись....
Читаем файл...
А почему таблица
семплов пустая???
Курение мануалов и сорцов
Процесс записи файла
Секция данных (aka data atom)
raw 1 raw 2 raw 3 raw 4
raw 5 raw 6 raw 7 raw 8
raw 9 raw 10 raw 11 raw 12
raw 13 raw 14 raw 15 raw 16
Секция расположения данных (aka data alloc atom)
alloc 1 alloc 2 alloc 3 alloc 4
alloc 5 alloc 6 alloc 7 alloc 8
alloc 9 alloc 10 alloc 11 alloc 12
alloc 13 alloc 14 alloc 15 alloc 16
Усложняем: чтение файла "на
лету"
MediaRecorder
Файл #1
Поток
Файл #2
Типы "файлов"
доступные для приложений
Файл
MediaRecorder использует RandomAccessFile
Пайп
Часть вторая: Сложный путь
Raw data
Camera preview AudioRecord
Raw data
Camera preview AudioRecord
Raw video frame
Raw audio buffer
Network stream Network stream
Курение мануалов и сорцов 2
+
Свежая кровь мамонта
FFMPEG
Media data
Стандарты
Media data
Параметры
конвертации
Raw data
Camera preview AudioRecord
Raw video frame
Raw audio buffer
Network stream
А почему мы не можем
использовать драйвера linux?
Video4Linux драйвер Сетевой драйвер
Отсутствие прав у пользователя
Большая картинка
Драйвера Linux
Аудио поток Видео поток
RAW
RAW
Аудио
пайп
Видео
пайп
RAW
RAW
Большая картнка 2
Аудио
пайп
Видео пайп
Тоже отдельный
поток
Пайп с RTP
пакетами
RTP packages
Наше приложение
Internets
Выводы
- Видео и аудио стриминг в андроиде - это
реальность
- Не все так просто, как может показаться
- Есть слабые места в любой реализации
- Не бойтесь экспериментировать
Вопросы???
Что посмотреть
- Atomic parsley (http://atomicparsley.sourceforge.net)
- Imsdroid (http://code.google.com/p/imsdroid)
- RTP (http://tools.ietf.org/html/rfc3550)
- RTSP (http://tools.ietf.org/html/rfc2326)
- UStream (Google play)
- IP Webcam (Google play)