Сергей Арнаут - stream yourself with android

26
Android AV streaming Как это сделать?

Upload: ua-mobile

Post on 15-May-2015

427 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Сергей Арнаут - Stream yourself with Android

Android AV streaming

Как это сделать?

Page 2: Сергей Арнаут - Stream yourself with Android
Page 3: Сергей Арнаут - Stream yourself with Android

НЕЛЬЗЯ ПРОСТО ВЗЯТЬ СДК

И НАЧАТЬ СТРИМИТЬ ДАННЫЕ

Page 4: Сергей Арнаут - Stream yourself with Android

Нам нужен хитрый план!

Page 5: Сергей Арнаут - Stream yourself with Android

Что же дает нам

андроид?

Видео Аудио Линукс

Page 6: Сергей Арнаут - Stream yourself with Android

Мы всегда можем сделать

видеозапись

Page 7: Сергей Арнаут - Stream yourself with Android

Часть первая: Легкий путь

Page 8: Сергей Арнаут - Stream yourself with Android

Легкий путь: MediaRecorder

- MediaRecorder объект

- Источник видео/аудио

- Путь к файлу с результатами записи

- Prepare

- Start

- Stop

- Release

- MediaRecorder объект

- Источник видео/аудио

- Путь к файлу с результатами записи

- Prepare

- Start

- Stop

- Release

Page 9: Сергей Арнаут - Stream yourself with Android

Усложняем: чтение файла "на

лету"

MediaRecorder

Файл

Поток

Page 10: Сергей Арнаут - Stream yourself with Android

Пытаемся прочитать файл

- Описание типа файла

- Секция с бинарными данными (в семплах)

- Таблица описания семплов (оффсет, длина)

А почему таблица

описания идет в конце?

Мы же должны читать все

последовательно

Начали запись....

Читаем файл...

А почему таблица

семплов пустая???

Page 11: Сергей Арнаут - Stream yourself with Android

Курение мануалов и сорцов

Page 12: Сергей Арнаут - Stream yourself with Android

Процесс записи файла

Секция данных (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

Page 13: Сергей Арнаут - Stream yourself with Android

Усложняем: чтение файла "на

лету"

MediaRecorder

Файл #1

Поток

Файл #2

Page 14: Сергей Арнаут - Stream yourself with Android

Типы "файлов"

доступные для приложений

Файл

MediaRecorder использует RandomAccessFile

Пайп

Page 15: Сергей Арнаут - Stream yourself with Android

Часть вторая: Сложный путь

Page 16: Сергей Арнаут - Stream yourself with Android

Raw data

Camera preview AudioRecord

Page 17: Сергей Арнаут - Stream yourself with Android

Raw data

Camera preview AudioRecord

Raw video frame

Raw audio buffer

Network stream Network stream

Page 18: Сергей Арнаут - Stream yourself with Android

Курение мануалов и сорцов 2

+

Свежая кровь мамонта

Page 19: Сергей Арнаут - Stream yourself with Android

FFMPEG

Media data

Стандарты

Media data

Параметры

конвертации

Page 20: Сергей Арнаут - Stream yourself with Android

Raw data

Camera preview AudioRecord

Raw video frame

Raw audio buffer

Network stream

Page 21: Сергей Арнаут - Stream yourself with Android

А почему мы не можем

использовать драйвера linux?

Video4Linux драйвер Сетевой драйвер

Отсутствие прав у пользователя

Page 22: Сергей Арнаут - Stream yourself with Android

Большая картинка

Драйвера Linux

Аудио поток Видео поток

RAW

RAW

Аудио

пайп

Видео

пайп

RAW

RAW

Page 23: Сергей Арнаут - Stream yourself with Android

Большая картнка 2

Аудио

пайп

Видео пайп

Тоже отдельный

поток

Пайп с RTP

пакетами

RTP packages

Наше приложение

Internets

Page 24: Сергей Арнаут - Stream yourself with Android

Выводы

- Видео и аудио стриминг в андроиде - это

реальность

- Не все так просто, как может показаться

- Есть слабые места в любой реализации

- Не бойтесь экспериментировать

Page 25: Сергей Арнаут - Stream yourself with Android

Вопросы???

Page 26: Сергей Арнаут - Stream yourself with Android

Что посмотреть

- 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)