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

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

Embed Size (px)

DESCRIPTION

Я расскажу, как нам удалось более чем в 10 раз ускорить старт просмотра кино и сериалов с использованием технологий адаптивного стриминга MPEG-DASH и HLS. Вы узнаете, какие технологии попали в поле зрения команды, как ин-фраструктурные особенности, размер аудитории и специфика потребления на разных пользовательских устройствах повлияли на принятие решения о выборе технологии. Естественно, будет дан и подробный отчет о результатах внедрения решения и полученном эффекте. То есть около 50 млн. роликов, которые есть на «Одноклассниках», нужно раздать пользователям по стриминг-протоколу на скорости 40 Гбит/с с одного сервера и не хранить копии видео в разных форматах

Citation preview

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

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

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

• 10 млн уников в сутки по всему миру• 75 млн просмотров в сутки• 100 тысяч загрузок в день

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

Видеоплатформа изнутри

tempstorage

persistentstorage

uploadserver

downloadserver

transformationserver

http://habrahabr.ru/company/odnoklassniki/blog/

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

MPEG1/2/4, DivX, h.264, WMV7/8/9

COder DECoder

MP3, AAC, OGG Vorbis, DTS

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

Контейнер

MKV, QuickTime, FLV, 3GP, MP4, .TS

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

Выбор кодека и контейнера

MP4

H.264

AAC

FLV

H.263

MP3

WebM

VP8

Vorbis, MP3

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

Трансформация видео

Transformationserver

persistent storage

ffmpeg mp4box

mp4parser

MP4, H.264, AAC

144, 240, 360, 480, 7201080, 1440, 2160

temp storage

Any container/codec

WxH

Page 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

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

Видео изнутри

tempstorage

persistentstorage

uploadserver

downloadserver

transformationserver

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

MOOV data1 data2 data N

v1 a1 vN aNv0 a0Fast start

data m

vm am

data N data m

HTTP byte-range

request

start time parameter in the request

URL

MOOV data N data m

mp4 pseudo-streaming

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

«Длинный хвост»

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

download server

persistent storage

RAM - 96GB

SSD - 4TB

1-й уровень

2-й уровень

Segment256Kb

LRU

FIFO

Архитектура раздачи

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

download server

RAM - 96GB1-й уровень

ssize_t send(int sockfd, const void *buf, size_t len, int flags);ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

/dev/shm/cache.memLRU

Zero-copy

https://github.com/odnoklassniki/one-nio/

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

download

persistent storage

RAM – 96GbSSD - 4Tb

eth4 x 10 Gbps

80%

20%

Производительность раздачи

eth10 Gbps

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

Появились видео от блогеров и партнеров - сериалы, шоу, кино

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

Двухчасовой mp4 фильм в среднем стартует: - 12 секунд в проводных сетях - 21 секунду в мобильных сетях

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

Header data1 data2 data N data k … …

6 Mb

Что происходит?

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

- перемотка фильма занимает 6 секунд- 30% буферизаций ведут к закрытию плеера

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

1. Ускорить старт видео в 2-3 раза

2. Ускорить перемотку в 3-6 раз

3. Уменьшить колличество беферизаций

4. Решить проблему на мобильных устройствах

Задачи

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

Автокачество в зависимости от разрешения окна плеера и скорости Интернет

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

Технологии стриминга

Параметр

кодек любой h264,aacконтейнер MP4, MPEG2-TS MPEG2-TS

plugins

автокачество mpd m3u8

HDSHLS

h264,mp3,aacf4m

DASH

f4v

nativedash.js

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

статистика от wmspanel.com

Распространение протоколов

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

Header data1 data2 data N data k … …

He data1 data2 data N data k … …

MP4

MPEG-DASH

MPEG2-TS

Dynamic Adaptive Streaming over HTTP

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

He

data1 data2 data N data k … …He data1 data2 data N data k … …He data1 data2 data N data k … …

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"> <Period duration="PT0H3M1.63S" start="PT0S"> 144p

720p2160p

bandwidth

time

MPEG-DASH manifest

He

Page 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

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

dash

FFMPEG

Upload FFMPEG

mp4

MP4BOX

hls

10Пб x 3

Простое решение

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

dashUpload

persistent storage

mp4

hls

aac

h264

download server

Delta

transformation server

Экономное решение

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

1.ts 2.ts N.ts k.ts … …HLS

…MPEG2-TS

40Гбит/сек по 188байт пакет = 26 млн пакетов в сек

Проблемы HLS

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

persistentstorage

mp4: h264, aac

Delta

HLS

DASH

Решение

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

MPEG-DASH поток на лету

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

Header data1 data2 data N data k … …

He data1 data2 data N data k … …

He

He Offsets

MP4

DASH

DELTAtransformation

server mp4box

Кодирование DASH

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

Header data1 data2 data N data k … …

He

He

He data1 data2 data N data k … …

MP4

DELTA

DASH

download server

Раздача DASH

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

He data1 data2 data N data k … …

He data1 data2 data N data k … …

720p

2160pfragmented MP4

Header dataMP4

Header data

720p

2160p

Header dataMP4

Header data

720p

2160p

Проблемы DASH

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

ФИЧИ:1. Интерлив видео/аудио2. Замена UrlLoader на UrlStream 3. Доработка алгоритма Автокачества4. Умный ретрай, кеширование sidx5. Умный фронтбуффер6. Работа с частично битым видео

Базовая as3 реализация dash https://github.com/castlabs/dashas

FLASH плеер и MPEG-DASH формат

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

HLS поток на лету

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

m3u8 playlist

delta

delta index

mp4 FFMPEGFFMPEGUpload

persistent storage

Кодирование HLS

mpeg2 fragments

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

…MPEG2

MP4 …

Panda diff

DELTA

IND

EX

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

MP4 ~50 Гбит/секDASH ~40 Гбит/секHLS ~20 Гбит/сек

download

persistent storage

RAM – 96GbSSD - 4Tb

eth4 x 10 Gbps

80%

20%

eth10 Gbps

Производительность раздачи

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

Результаты

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

Параметр

старый формат (MP4)

средняя длина/2 часа

adaptive bitrate streaming MPEG-Dash/HLS

константастарт 4 сек/12 сек 1.5 сек

перемотка 4 сек/12 сек 1.3 сек

стоимость хранения - +10%

стоимость раздачи - +20% CPU

Первый кадр в 6 раз быстрее!

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

Мобильные экраны – смартфоны, планшеты, SmartTV

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

1. Автоматически выбор качества в зависимости от разрешения и скорости Интернет

2. DASH-видео на FLASH и HTML-5 3. HLS видео в iOS- плеерах и SmartTV 4. Экономное хранение форматов и сохранение

производительности раздачи 5. Экономия времени пользователей 6 лет / сутки

50 млн просмотров/сутки * 4 сек = 200 млн сек / сутки

Итого

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

Быстрее нас только этот чувак в красном!

Быстрее нас только этот мужчина в болиде!

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

Спасибо