SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Downloaden Sie, um offline zu lesen
Кадры решают все, 
или стриминг видео 
в одноклассниках 
Александр Тоболь
• 10 млн уников в сутки по всему миру 
• 75 млн просмотров в сутки 
• 100 тысяч загрузок в день
Видеоплатформа изнутри 
temp 
storage 
persistent 
storage 
upload 
server 
download 
server 
transformation 
server 
http://habrahabr.ru/company/odnoklassniki/blog/
MPEG1/2/4, DivX, h.264, WMV7/8/9 
COder DECoder 
MP3, AAC, OGG Vorbis, DTS
Контейнер 
MKV, QuickTime, FLV, 3GP, MP4, .TS
Выбор кодека и контейнера 
MP4 
H.264 
AAC 
FLV 
H.263 
MP3 
WebM 
VP8 
Vorbis, MP3
Трансформация видео 
Transformation 
server 
persistent storage 
ffmpeg 
mp4box 
mp4parser 
MP4, H.264, AAC 
144, 240, 360, 480, 720 
1080, 1440, 2160 
temp storage 
Any container/codec 
WxH
Трансформация видео 
ffmpeg -i original.mp4 -threads 3 -loglevel info -y -filter_complex [0:0]yadif=0:-1:0,split=3[split0][split1][split2]; 
[split0]scale=640:356[out0];[split1]scale=256:142[out1];[split2]scale=426:236[out2] -vcodec libx264 -map [out0] -vb 559k -r 25 -g 60 - 
vprofile high -acodec libfdk_aac -refs 1 -bf 3 -x264opts b-pyramid:mixed-refs:weightb:8x8dct:deblock=2,2:no-scenecut -b_strategy 1 - 
wpredp 2 -qdiff 4 -flags +loop -partitions +parti8x8+parti4x4+partp8x8+partb8x8 -me_method dis -keyint_min 25 -map_metadata -1 -qmin 
10 -me_range 16 -qcomp 0.6 -qmax 51 -i_qfactor 0.71 -subq 2 -af aresample=first_pts=0 -pix_fmt yuv420p -coder 1 -trellis 0 -map 0:1 -ac 
2 -ab 55k -ar 44100 -sn -f mp4 LOW -vcodec libx264 -map [out0] -vb 80k -r 25 -g 60 -vprofile baseline -acodec libfdk_aac -refs 1 -bf 3 - 
x264opts b-pyramid:mixed-refs:weightb:deblock=2,2:no-scenecut -b_strategy 2 -wpredp 2 -qdiff 4 -flags +loop -partitions +parti4x4 - 
me_method full -keyint_min 25 -map_metadata -1 -qmin 10 -me_range 16 -qcomp 0.6 -qmax 51 -i_qfactor 0.71 -subq 2 -af 
aresample=first_pts=0 -pix_fmt yuv420p -coder 1 -trellis 0 -map 0:1 -ac 2 -ab 32k -ar 44100 -sn -f mp4 MOBILE -vcodec libx264 -map 
[out0] -vb 250k -r 25 -g 60 -vprofile baseline -acodec libfdk_aac -refs 1 -bf 3 -x264opts b-pyramid:mixed-refs:weightb:deblock=2,2:no-scenecut 
-b_strategy 2 -wpredp 2 -qdiff 4 -flags +loop -partitions +parti4x4 -me_method full -keyint_min 25 -map_metadata -1 -qmin 10 - 
me_range 16 -qcomp 0.6 -qmax 51 -i_qfactor 0.71 -subq 2 -af aresample=first_pts=0 -pix_fmt yuv420p -coder 1 -trellis 0 -map 0:1 -ac 2 -ab 
48k -ar 44100 -sn -f mp4 LOWEST
Видео изнутри 
temp 
storage 
persistent 
storage 
upload 
server 
download 
server 
transformation 
server
mp4 pseudo-streaming 
MOOV data1 data2 data m 
data N 
vm am 
Fast start v0 a0 v1 a1 vN aN 
HTTP 
byte-range 
request 
data m data N 
start time 
parameter in 
the request 
URL 
MOOV data m data N
«Длинный хвост»
Архитектура раздачи 
download 
server 
persistent 
storage 
RAM - 96GB 
SSD - 4TB 
1-й уровень 
2-й уровень 
Segment 
256Kb 
LRU 
FIFO
Zero-copy 
download 
server 
LRU 1-й уровень RAM - 96GB 
/dev/shm/cache.mem 
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count); 
ssize_t send(int sockfd, const void *buf, size_t len, int flags); 
https://github.com/odnoklassniki/one-nio/
Производительность раздачи 
download 
persistent 
storage 
RAM – 96Gb 
SSD - 4Tb 
eth 
4 x 10 Gbps 
80% 
20% 
eth 
10 Gbps
Появились видео от блогеров и партнеров - сериалы, шоу, кино
Двухчасовой mp4 фильм в среднем стартует: 
- 12 секунд в проводных сетях 
- 21 секунду в мобильных сетях
Что происходит? 
Header data1 data2 … data k … data N 
6 Mb
- перемотка фильма занимает 6 секунд 
- 30% буферизаций ведут к закрытию плеера
Задачи 
1. Ускорить старт видео в 2-3 раза 
2. Ускорить перемотку в 3-6 раз 
3. Уменьшить колличество беферизаций 
4. Решить проблему на мобильных устройствах
Автокачество в зависимости от разрешения 
окна плеера и скорости Интернет
Технологии стриминга 
Параметр 
кодек любой h264,aac 
контейнер MP4, MPEG2-TS MPEG2-TS 
HLS HDS 
автокачество mpd m3u8 
plugins 
h264,mp3,aac 
f4m 
DASH 
f4v 
dash.js native
Распространение протоколов 
статистика от wmspanel.com
Dynamic Adaptive Streaming over HTTP 
Header data1 data2 … data k … data N 
He data1 data2 … data k … data N 
MP4 
MPEG-DASH 
MPEG2-TS
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
MPEG2 Transport stream 
http://example.com/video.m3u8 
#EXTM3U 
#EXT-X-STREAM-INF:BANDWIDTH=200000 
lowest.m3u8 
#EXT-X-STREAM-INF:BANDWIDTH=311111 
low.m3u8 
#EXT-X-STREAM-INF:BANDWIDTH=484444 
medium.m3u8 
#EXT-X-STREAM-INF:BANDWIDTH=737777 
high.m3u8 
http://example.com/lowest.m3u8 
… 
http://example.com/low.m3u8 
… 
http://example.com/medium.m3u8 
… 
http://example.com/lowest.m3u8 
#EXTM3U 
#EXT-X-VERSION:3 
#EXT-X-TARGETDURATION:11 
#EXTINF:10.083333, 
high000.ts 
#EXTINF:9.958333, 
high001.ts 
#EXTINF:10.000000, 
high002.ts 
… 
http://example.com/ 
high000.ts 
http://example.com/ 
high001.ts 
http://example.com/ 
high002.ts 
Http Live Streaming
dash 
FFMPEG 
Upload FFMPEG 
mp4 
MP4BOX 
hls 
10Пб x 3 
Простое решение
Экономное решение 
h264 
Upload dash 
persistent 
storage 
mp4 
hls 
aac 
download 
server 
Delta 
transformation 
server
Проблемы HLS 
HLS 1.ts 2.ts … k.ts … N.ts 
MPEG2-TS … 
40Гбит/сек по 188байт пакет = 26 млн пакетов в сек
persistent 
storage 
mp4: h264, aac 
Delta 
HLS 
DASH 
Решение
MPEG-DASH поток на лету
Header data1 data2 … data k … data N 
He data1 data2… data k … data N 
He 
He Offsets 
MP4 
DASH 
DELTA 
transformation 
server 
mp4box 
Кодирование DASH
He 
He 
Header data1 data2… data k … data N 
He data1 data2… data k… data N 
DELTA 
MP4 
DASH 
download 
server 
Раздача DASH
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
FLASH плеер и MPEG-DASH формат 
ФИЧИ: 
1. Интерлив видео/аудио 
2. Замена UrlLoader на UrlStream 
3. Доработка алгоритма Автокачества 
4. Умный ретрай, кеширование sidx 
5. Умный фронтбуффер 
6. Работа с частично битым видео 
Базовая as3 реализация dash https://github.com/ 
castlabs/dashas
HLS поток на лету
m3u8 
playlist 
Кодирование HLS 
Upload FFMPEG mp4 FFMPEG 
delta 
delta index 
persistent 
storage 
mpeg2 
fragments
Panda diff 
MPEG2 … 
MP4 … 
DELTA 
INDEX
Производительность раздачи 
download 
MP4 ~50 Гбит/сек 
DASH ~40 Гбит/сек 
HLS ~20 Гбит/сек 
persistent 
storage 
RAM – 96Gb 
SSD - 4Tb 
eth 
4 x 10 Gbps 
80% 
20% 
eth 
10 Gbps
Результаты
Параметр 
старый формат (MP4) 
средняя длина/2 часа 
adaptive bitrate streaming 
MPEG-Dash/HLS 
константа 
старт 4 сек/12 сек 1.5 сек 
перемотка 4 сек/12 сек 1.3 сек 
стоимость хранения - +10% 
стоимость раздачи - +20% CPU 
Первый кадр в 6 раз быстрее!
Мобильные экраны – смартфоны, планшеты, SmartTV
1. Автоматически выбор качества в зависимости от 
разрешения и скорости Интернет 
2. DASH-видео на FLASH и HTML-5 
3. HLS видео в iOS- плеерах и SmartTV 
4. Экономное хранение форматов и сохранение 
производительности раздачи 
5. Экономия времени пользователей 6 лет / сутки 
50 млн просмотров/сутки * 4 сек = 200 млн сек / сутки 
Итого
Быстрее нас только этот 
мужчина в болиде! 
Быстрее нас только этот чувак в красном!
Спасибо

Weitere ähnliche Inhalte

Was ist angesagt?

Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Ontico
 
Скорость с доставкой до пользователя
Скорость с доставкой до пользователяСкорость с доставкой до пользователя
Скорость с доставкой до пользователяAnatoliy Orlov
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)Ontico
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Ontico
 
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)Ontico
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Ontico
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Ontico
 
стриминг видео на ок
стриминг видео на окстриминг видео на ок
стриминг видео на окAlexander Tobol
 
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Ontico
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
 
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)Ontico
 
My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016Alex Chistyakov
 
HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3Technopark
 
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Ontico
 
мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1rit2011
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Ontico
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...Ontico
 
VDS: обнаружение, выявление причин и устранение проблемных ситуаций. Диагнос...
VDS: обнаружение, выявление причин и устранение проблемных ситуаций.  Диагнос...VDS: обнаружение, выявление причин и устранение проблемных ситуаций.  Диагнос...
VDS: обнаружение, выявление причин и устранение проблемных ситуаций. Диагнос...Oleg Lipin
 
HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5Technopark
 

Was ist angesagt? (20)

Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)
 
Скорость с доставкой до пользователя
Скорость с доставкой до пользователяСкорость с доставкой до пользователя
Скорость с доставкой до пользователя
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
 
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.
 
стриминг видео на ок
стриминг видео на окстриминг видео на ок
стриминг видео на ок
 
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
 
My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016
 
HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3
 
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
 
мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 
VDS: обнаружение, выявление причин и устранение проблемных ситуаций. Диагнос...
VDS: обнаружение, выявление причин и устранение проблемных ситуаций.  Диагнос...VDS: обнаружение, выявление причин и устранение проблемных ситуаций.  Диагнос...
VDS: обнаружение, выявление причин и устранение проблемных ситуаций. Диагнос...
 
HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5
 

Ähnlich wie Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь

Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)Ontico
 
Пишем свой протокол поверх UDP или платформа потокового видео с нуля на милли...
Пишем свой протокол поверх UDP или платформа потокового видео с нуля на милли...Пишем свой протокол поверх UDP или платформа потокового видео с нуля на милли...
Пишем свой протокол поверх UDP или платформа потокового видео с нуля на милли...Ontico
 
Видеохостинг своими руками
Видеохостинг своими рукамиВидеохостинг своими руками
Видеохостинг своими рукамиStanislavMalkin
 
Security Meetup 22 октября. «Опасное видео». Максим Андреев. Облако Mail.Ru
Security Meetup 22 октября. «Опасное видео». Максим Андреев. Облако Mail.RuSecurity Meetup 22 октября. «Опасное видео». Максим Андреев. Облако Mail.Ru
Security Meetup 22 октября. «Опасное видео». Максим Андреев. Облако Mail.RuMail.ru Group
 
Реактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicРеактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicVadim Tsesko
 
Devpoint2 video in internet
Devpoint2 video in internetDevpoint2 video in internet
Devpoint2 video in internetMax Lapshin
 
Презентация "Это что-то новенькое"
Презентация "Это что-то новенькое"Презентация "Это что-то новенькое"
Презентация "Это что-то новенькое"Дмитрий Костюк
 
Видео в сети
Видео в сетиВидео в сети
Видео в сетиGetDev.NET
 
Video 111127013709-phpapp02
Video 111127013709-phpapp02Video 111127013709-phpapp02
Video 111127013709-phpapp02Newlink
 
Video 111127013709-phpapp02
Video 111127013709-phpapp02Video 111127013709-phpapp02
Video 111127013709-phpapp02LLC NewLink
 
3 рекордеры, мобильный клиент, pssct
3   рекордеры, мобильный клиент, pssct3   рекордеры, мобильный клиент, pssct
3 рекордеры, мобильный клиент, pssctjournalrubezh
 
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipРазработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipARCCN
 
20201021 Технополис: Сетевой стек
20201021 Технополис: Сетевой стек20201021 Технополис: Сетевой стек
20201021 Технополис: Сетевой стекDmitry Samsonov
 
Технополис: Сетевой стек
Технополис: Сетевой стекТехнополис: Сетевой стек
Технополис: Сетевой стекDmitry Samsonov
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует GoArtem Kovardin
 
внутренний семинар: обработка видео и аудио сигналов, передача данных
внутренний семинар: обработка видео и аудио сигналов, передача данныхвнутренний семинар: обработка видео и аудио сигналов, передача данных
внутренний семинар: обработка видео и аудио сигналов, передача данныхOksana Teslenko
 
Семинар о технологиях ВКС
Семинар о технологиях ВКССеминар о технологиях ВКС
Семинар о технологиях ВКСTrueConf_
 
Семинар о технологиях видеоконференцсвязи
Семинар о технологиях видеоконференцсвязиСеминар о технологиях видеоконференцсвязи
Семинар о технологиях видеоконференцсвязиOksana Teslenko
 
Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...
Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...
Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...DotNetConf
 

Ähnlich wie Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь (20)

Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
 
Пишем свой протокол поверх UDP или платформа потокового видео с нуля на милли...
Пишем свой протокол поверх UDP или платформа потокового видео с нуля на милли...Пишем свой протокол поверх UDP или платформа потокового видео с нуля на милли...
Пишем свой протокол поверх UDP или платформа потокового видео с нуля на милли...
 
Видеохостинг своими руками
Видеохостинг своими рукамиВидеохостинг своими руками
Видеохостинг своими руками
 
Security Meetup 22 октября. «Опасное видео». Максим Андреев. Облако Mail.Ru
Security Meetup 22 октября. «Опасное видео». Максим Андреев. Облако Mail.RuSecurity Meetup 22 октября. «Опасное видео». Максим Андреев. Облако Mail.Ru
Security Meetup 22 октября. «Опасное видео». Максим Андреев. Облако Mail.Ru
 
Реактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicРеактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/music
 
Devpoint2 video in internet
Devpoint2 video in internetDevpoint2 video in internet
Devpoint2 video in internet
 
Презентация "Это что-то новенькое"
Презентация "Это что-то новенькое"Презентация "Это что-то новенькое"
Презентация "Это что-то новенькое"
 
Видео в сети
Видео в сетиВидео в сети
Видео в сети
 
Видео в сети
Видео в сетиВидео в сети
Видео в сети
 
Video 111127013709-phpapp02
Video 111127013709-phpapp02Video 111127013709-phpapp02
Video 111127013709-phpapp02
 
Video 111127013709-phpapp02
Video 111127013709-phpapp02Video 111127013709-phpapp02
Video 111127013709-phpapp02
 
3 рекордеры, мобильный клиент, pssct
3   рекордеры, мобильный клиент, pssct3   рекордеры, мобильный клиент, pssct
3 рекордеры, мобильный клиент, pssct
 
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipРазработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
 
20201021 Технополис: Сетевой стек
20201021 Технополис: Сетевой стек20201021 Технополис: Сетевой стек
20201021 Технополис: Сетевой стек
 
Технополис: Сетевой стек
Технополис: Сетевой стекТехнополис: Сетевой стек
Технополис: Сетевой стек
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует Go
 
внутренний семинар: обработка видео и аудио сигналов, передача данных
внутренний семинар: обработка видео и аудио сигналов, передача данныхвнутренний семинар: обработка видео и аудио сигналов, передача данных
внутренний семинар: обработка видео и аудио сигналов, передача данных
 
Семинар о технологиях ВКС
Семинар о технологиях ВКССеминар о технологиях ВКС
Семинар о технологиях ВКС
 
Семинар о технологиях видеоконференцсвязи
Семинар о технологиях видеоконференцсвязиСеминар о технологиях видеоконференцсвязи
Семинар о технологиях видеоконференцсвязи
 
Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...
Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...
Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...
 

Mehr von odnoklassniki.ru

Distributed systems at ok.ru #rigadevday
Distributed systems at ok.ru #rigadevdayDistributed systems at ok.ru #rigadevday
Distributed systems at ok.ru #rigadevdayodnoklassniki.ru
 
Тестирование аварий. Андрей Губа. Highload++ 2015
Тестирование аварий. Андрей Губа. Highload++ 2015Тестирование аварий. Андрей Губа. Highload++ 2015
Тестирование аварий. Андрей Губа. Highload++ 2015odnoklassniki.ru
 
Распределенные системы в Одноклассниках
Распределенные системы в ОдноклассникахРаспределенные системы в Одноклассниках
Распределенные системы в Одноклассникахodnoklassniki.ru
 
Add a bit of ACID to Cassandra. Cassandra Summit EU 2014
Add a bit of ACID to Cassandra. Cassandra Summit EU 2014Add a bit of ACID to Cassandra. Cassandra Summit EU 2014
Add a bit of ACID to Cassandra. Cassandra Summit EU 2014odnoklassniki.ru
 
За гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на CassandraЗа гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на Cassandraodnoklassniki.ru
 
Аварийный дамп – чёрный ящик упавшей JVM. Андрей Паньгин
Аварийный дамп – чёрный ящик упавшей JVM. Андрей ПаньгинАварийный дамп – чёрный ящик упавшей JVM. Андрей Паньгин
Аварийный дамп – чёрный ящик упавшей JVM. Андрей Паньгинodnoklassniki.ru
 
Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013
Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013
Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013odnoklassniki.ru
 
Управление тысячами серверов в Одноклассниках. Алексей Чудов.
Управление тысячами серверов в Одноклассниках. Алексей Чудов.Управление тысячами серверов в Одноклассниках. Алексей Чудов.
Управление тысячами серверов в Одноклассниках. Алексей Чудов.odnoklassniki.ru
 
Класс!ная Cassandra
Класс!ная CassandraКласс!ная Cassandra
Класс!ная Cassandraodnoklassniki.ru
 
Java Runtime: повседневные обязанности JVM
Java Runtime: повседневные обязанности JVMJava Runtime: повседневные обязанности JVM
Java Runtime: повседневные обязанности JVModnoklassniki.ru
 
Незаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераНезаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераodnoklassniki.ru
 
Cистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruCистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruodnoklassniki.ru
 
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...odnoklassniki.ru
 

Mehr von odnoklassniki.ru (13)

Distributed systems at ok.ru #rigadevday
Distributed systems at ok.ru #rigadevdayDistributed systems at ok.ru #rigadevday
Distributed systems at ok.ru #rigadevday
 
Тестирование аварий. Андрей Губа. Highload++ 2015
Тестирование аварий. Андрей Губа. Highload++ 2015Тестирование аварий. Андрей Губа. Highload++ 2015
Тестирование аварий. Андрей Губа. Highload++ 2015
 
Распределенные системы в Одноклассниках
Распределенные системы в ОдноклассникахРаспределенные системы в Одноклассниках
Распределенные системы в Одноклассниках
 
Add a bit of ACID to Cassandra. Cassandra Summit EU 2014
Add a bit of ACID to Cassandra. Cassandra Summit EU 2014Add a bit of ACID to Cassandra. Cassandra Summit EU 2014
Add a bit of ACID to Cassandra. Cassandra Summit EU 2014
 
За гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на CassandraЗа гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на Cassandra
 
Аварийный дамп – чёрный ящик упавшей JVM. Андрей Паньгин
Аварийный дамп – чёрный ящик упавшей JVM. Андрей ПаньгинАварийный дамп – чёрный ящик упавшей JVM. Андрей Паньгин
Аварийный дамп – чёрный ящик упавшей JVM. Андрей Паньгин
 
Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013
Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013
Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013
 
Управление тысячами серверов в Одноклассниках. Алексей Чудов.
Управление тысячами серверов в Одноклассниках. Алексей Чудов.Управление тысячами серверов в Одноклассниках. Алексей Чудов.
Управление тысячами серверов в Одноклассниках. Алексей Чудов.
 
Класс!ная Cassandra
Класс!ная CassandraКласс!ная Cassandra
Класс!ная Cassandra
 
Java Runtime: повседневные обязанности JVM
Java Runtime: повседневные обязанности JVMJava Runtime: повседневные обязанности JVM
Java Runtime: повседневные обязанности JVM
 
Незаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераНезаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервера
 
Cистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruCистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ru
 
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
 

Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь

  • 1. Кадры решают все, или стриминг видео в одноклассниках Александр Тоболь
  • 2. • 10 млн уников в сутки по всему миру • 75 млн просмотров в сутки • 100 тысяч загрузок в день
  • 3. Видеоплатформа изнутри temp storage persistent storage upload server download server transformation server http://habrahabr.ru/company/odnoklassniki/blog/
  • 4. MPEG1/2/4, DivX, h.264, WMV7/8/9 COder DECoder MP3, AAC, OGG Vorbis, DTS
  • 6. Выбор кодека и контейнера MP4 H.264 AAC FLV H.263 MP3 WebM VP8 Vorbis, MP3
  • 7. Трансформация видео Transformation server persistent storage ffmpeg mp4box mp4parser MP4, H.264, AAC 144, 240, 360, 480, 720 1080, 1440, 2160 temp storage Any container/codec WxH
  • 8. Трансформация видео ffmpeg -i original.mp4 -threads 3 -loglevel info -y -filter_complex [0:0]yadif=0:-1:0,split=3[split0][split1][split2]; [split0]scale=640:356[out0];[split1]scale=256:142[out1];[split2]scale=426:236[out2] -vcodec libx264 -map [out0] -vb 559k -r 25 -g 60 - vprofile high -acodec libfdk_aac -refs 1 -bf 3 -x264opts b-pyramid:mixed-refs:weightb:8x8dct:deblock=2,2:no-scenecut -b_strategy 1 - wpredp 2 -qdiff 4 -flags +loop -partitions +parti8x8+parti4x4+partp8x8+partb8x8 -me_method dis -keyint_min 25 -map_metadata -1 -qmin 10 -me_range 16 -qcomp 0.6 -qmax 51 -i_qfactor 0.71 -subq 2 -af aresample=first_pts=0 -pix_fmt yuv420p -coder 1 -trellis 0 -map 0:1 -ac 2 -ab 55k -ar 44100 -sn -f mp4 LOW -vcodec libx264 -map [out0] -vb 80k -r 25 -g 60 -vprofile baseline -acodec libfdk_aac -refs 1 -bf 3 - x264opts b-pyramid:mixed-refs:weightb:deblock=2,2:no-scenecut -b_strategy 2 -wpredp 2 -qdiff 4 -flags +loop -partitions +parti4x4 - me_method full -keyint_min 25 -map_metadata -1 -qmin 10 -me_range 16 -qcomp 0.6 -qmax 51 -i_qfactor 0.71 -subq 2 -af aresample=first_pts=0 -pix_fmt yuv420p -coder 1 -trellis 0 -map 0:1 -ac 2 -ab 32k -ar 44100 -sn -f mp4 MOBILE -vcodec libx264 -map [out0] -vb 250k -r 25 -g 60 -vprofile baseline -acodec libfdk_aac -refs 1 -bf 3 -x264opts b-pyramid:mixed-refs:weightb:deblock=2,2:no-scenecut -b_strategy 2 -wpredp 2 -qdiff 4 -flags +loop -partitions +parti4x4 -me_method full -keyint_min 25 -map_metadata -1 -qmin 10 - me_range 16 -qcomp 0.6 -qmax 51 -i_qfactor 0.71 -subq 2 -af aresample=first_pts=0 -pix_fmt yuv420p -coder 1 -trellis 0 -map 0:1 -ac 2 -ab 48k -ar 44100 -sn -f mp4 LOWEST
  • 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 HTTP byte-range request data m data N start time parameter in the request URL MOOV data m data N
  • 12. Архитектура раздачи download server persistent storage RAM - 96GB SSD - 4TB 1-й уровень 2-й уровень Segment 256Kb LRU FIFO
  • 13. Zero-copy download server LRU 1-й уровень RAM - 96GB /dev/shm/cache.mem ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count); ssize_t send(int sockfd, const void *buf, size_t len, int flags); https://github.com/odnoklassniki/one-nio/
  • 14. Производительность раздачи download persistent storage RAM – 96Gb SSD - 4Tb eth 4 x 10 Gbps 80% 20% eth 10 Gbps
  • 15. Появились видео от блогеров и партнеров - сериалы, шоу, кино
  • 16. Двухчасовой mp4 фильм в среднем стартует: - 12 секунд в проводных сетях - 21 секунду в мобильных сетях
  • 17. Что происходит? Header data1 data2 … data k … data N 6 Mb
  • 18. - перемотка фильма занимает 6 секунд - 30% буферизаций ведут к закрытию плеера
  • 19. Задачи 1. Ускорить старт видео в 2-3 раза 2. Ускорить перемотку в 3-6 раз 3. Уменьшить колличество беферизаций 4. Решить проблему на мобильных устройствах
  • 20. Автокачество в зависимости от разрешения окна плеера и скорости Интернет
  • 21. Технологии стриминга Параметр кодек любой h264,aac контейнер MP4, MPEG2-TS MPEG2-TS HLS HDS автокачество mpd m3u8 plugins h264,mp3,aac f4m DASH f4v dash.js native
  • 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
  • 25. MPEG2 Transport stream http://example.com/video.m3u8 #EXTM3U #EXT-X-STREAM-INF:BANDWIDTH=200000 lowest.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=311111 low.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=484444 medium.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=737777 high.m3u8 http://example.com/lowest.m3u8 … http://example.com/low.m3u8 … http://example.com/medium.m3u8 … http://example.com/lowest.m3u8 #EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:11 #EXTINF:10.083333, high000.ts #EXTINF:9.958333, high001.ts #EXTINF:10.000000, high002.ts … http://example.com/ high000.ts http://example.com/ high001.ts http://example.com/ high002.ts Http Live Streaming
  • 26. dash FFMPEG Upload FFMPEG mp4 MP4BOX hls 10Пб x 3 Простое решение
  • 27. Экономное решение h264 Upload dash persistent storage mp4 hls aac download server Delta transformation server
  • 28. Проблемы HLS HLS 1.ts 2.ts … k.ts … N.ts MPEG2-TS … 40Гбит/сек по 188байт пакет = 26 млн пакетов в сек
  • 29. persistent storage mp4: h264, aac Delta HLS DASH Решение
  • 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
  • 36. m3u8 playlist Кодирование HLS Upload FFMPEG mp4 FFMPEG delta delta index persistent storage mpeg2 fragments
  • 37. Panda diff MPEG2 … MP4 … DELTA INDEX
  • 38. Производительность раздачи download MP4 ~50 Гбит/сек DASH ~40 Гбит/сек HLS ~20 Гбит/сек persistent storage RAM – 96Gb SSD - 4Tb eth 4 x 10 Gbps 80% 20% eth 10 Gbps
  • 40. Параметр старый формат (MP4) средняя длина/2 часа adaptive bitrate streaming MPEG-Dash/HLS константа старт 4 сек/12 сек 1.5 сек перемотка 4 сек/12 сек 1.3 сек стоимость хранения - +10% стоимость раздачи - +20% CPU Первый кадр в 6 раз быстрее!
  • 41. Мобильные экраны – смартфоны, планшеты, SmartTV
  • 42. 1. Автоматически выбор качества в зависимости от разрешения и скорости Интернет 2. DASH-видео на FLASH и HTML-5 3. HLS видео в iOS- плеерах и SmartTV 4. Экономное хранение форматов и сохранение производительности раздачи 5. Экономия времени пользователей 6 лет / сутки 50 млн просмотров/сутки * 4 сек = 200 млн сек / сутки Итого
  • 43. Быстрее нас только этот мужчина в болиде! Быстрее нас только этот чувак в красном!