Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
1. Кадры решают все,
или стриминг видео
в одноклассниках
Александр Тоболь
2. • 10 млн уников в сутки по всему миру
• 75 млн просмотров в сутки
• 100 тысяч загрузок в день
3. Видеоплатформа изнутри
temp
storage
persistent
storage
upload
server
download
server
transformation
server
http://habrahabr.ru/company/odnoklassniki/blog/
9. Видео изнутри
temp
storage
persistent
storage
upload
server
download
server
transformation
server
10. mp4 pseudo-streaming
MOOV data1 data2 data m
data N
vm am
Fast start v0 a0 v1 a1 vN aN
data N
data
m
HTTP
byte-range
request
start time
parameter in
the request
URL
MOOV data m data N
18. - перемотка фильма занимает 6 секунд
- 30% буферизаций ведут к закрытию плеера
19. Задачи
1. Ускорить старт видео в 2-3 раза
2. Ускорить перемотку в 3-6 раз
3. Уменьшить колличество беферизаций
4. Решить проблему на мобильных устройствах
23. Dynamic Adaptive Streaming over HTTP
Header data1 data2 data k data N … …
He data1 data2 data k data N … …
MP4
MPEG-DASH
MPEG2-TS
24. He
data1 data2 data k data N … …
He data1 data2 data k data N … …
He data1 data2 data k data N … …
http://example.com/manifest.mpd
<MPD
xmlns="urn:mpeg:DASH:schema:MPD:2011"
mediaPresentationDuration="PT0H3M1.63S"
minBufferTime="PT1.5S"
profiles="urn:mpeg:dash:profile:isoff-on-
demand:2011"
type="static">
2160p
<Period duration="PT0H3M1.63S"
144p
start="PT0S"> 720p
bandwidth
time
MPEG-DASH manifest
He
31. Header data1 data2 data k data N … …
He data1 data2 data k data N … …
He
He Offsets
MP4
DASH
DELTA
transformation
server
mp4box
Кодирование DASH
32. He
He
Header data1 data2 data k data N … …
He data1 data2 data k data N … …
DELTA
MP4
DASH
download
server
Раздача DASH
33. Header data
Header data
He data1 data2 data k data N … …
He data1 data2 data k data N … …
720p
2160p
MP4
fragmented MP4
720p
2160p
Header data
MP4
Header data
720p
2160p
Проблемы DASH
34. FLASH плеер и MPEG-DASH формат
ФИЧИ:
1. Интерлив видео/аудио
2. Замена UrlLoader на UrlStream
3. Доработка алгоритма Автокачества
4. Умный ретрай, кеширование sidx
5. Умный фронтбуффер
6. Работа с частично битым видео
Базовая as3 реализация dash
https://github.com/castlabs/dashas
40. Параметр
старый формат (MP4)
средняя длина/2 часа
adaptive bitrate streaming
MPEG-Dash/HLS
константа
старт 4 сек/12 сек 1.5 сек
перемотка 4 сек/12 сек 1.3 сек
стоимость хранения - +10%
стоимость раздачи - +20% CPU
Первый кадр в 6 раз быстрее!
42. 1. Автоматически выбор качества в
зависимости от разрешения и скорости
Интернет
2. DASH-видео на FLASH и HTML-5
3. HLS видео в iOS- плеерах и SmartTV
4. Экономное хранение форматов и
сохранение производительности раздачи
5. Экономия времени пользователей 6 лет /
сутки
50 млн просмотров/сутки * 4 сек = 200 млн сек /
сутки
Итого
43. Быстрее нас только этот
мужчина в болиде!
Быстрее нас только этот чувак в красном!
Видео – второй по популярности сервис на Одноклассниках, им пользуется свыше 50%, вот немного цифр, чтобы напомнить тем, кто уже слышал о нашем успехе, и поразить тех, кто слышит это впервые. Перечисление и комментарии к цифрам.
Особенность: аудио/видео сэмплы в обычном mp4 и фрагментированном одни и те же.
Стадия нарезки.
На трансформе создадим фрагментированные файлы из обычных.
Удалим из них все сэмплы, оставим только метаданные.
Запомним смещения всех фрагментов.
Сохраним смещения и метаданные в базу.
Особенность: аудио/видео сэмплы в обычном mp4 и фрагментированном одни и те же.
Стадия нарезки.
На трансформе создадим фрагментированные файлы из обычных.
Удалим из них все сэмплы, оставим только метаданные.
Запомним смещения всех фрагментов.
Сохраним смещения и метаданные в базу.
Особенность: для фрагмента заголовок сохранен отдельно, а данные будем брать из исходного файла.
Стадия раздачи.
Плеер делает запрос за очередным фрагментом.
Находим заголовок этого фрагмента в метаданных.
По заголовку определяем индексы сэмплов текущего фрагмента.
Отправляем заголовок и сэмплы в плеер.
Базовая as3 реализация dash https://github.com/castlabs/dashas
Решенные проблемы
1. Интерлив видео/audio
2. Замена UrlLoader на UrlStream (потоковый муксинг начиная с первого фрагмента)
3. Доработка алгоритма автокачества (ориентируемся на скорость канала, размер окна, и предыдущий выбор пользователя)
4. Умный ретрай, кеширование sidx
5. Умный фронтбуффер
6. Работа с частично битым видео (восстановление таймстампа и офсета)
7. Идеальный интерлив меседжей и борьба с хрюканием
Базовая as3 реализация dash https://github.com/castlabs/dashas
Решенные проблемы
1. Интерлив видео/audio
2. Замена UrlLoader на UrlStream (потоковый муксинг начиная с первого фрагмента)
3. Доработка алгоритма автокачества (ориентируемся на скорость канала, размер окна, и предыдущий выбор пользователя)
4. Умный ретрай, кеширование sidx
5. Умный фронтбуффер
6. Работа с частично битым видео (восстановление таймстампа и офсета)
7. Идеальный интерлив меседжей и борьба с хрюканием
просмотр видео на мобильном устройстве – сейчас это мобильная версия и андроид приложение