Кадры решают все, или стриминг видео в...

Preview:

DESCRIPTION

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

Citation preview

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

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

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

tempstorage

persistentstorage

uploadserver

downloadserver

transformationserver

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

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

Transformationserver

persistent storage

ffmpeg mp4box

mp4parser

MP4, H.264, AAC

144, 240, 360, 480, 7201080, 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

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

tempstorage

persistentstorage

uploadserver

downloadserver

transformationserver

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

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

download server

persistent storage

RAM - 96GB

SSD - 4TB

1-й уровень

2-й уровень

Segment256Kb

LRU

FIFO

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

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/

download

persistent storage

RAM – 96GbSSD - 4Tb

eth4 x 10 Gbps

80%

20%

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

eth10 Gbps

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

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

Header data1 data2 data N data k … …

6 Mb

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

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

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

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

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

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

Задачи

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

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

Параметр

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

plugins

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

HDSHLS

h264,mp3,aacf4m

DASH

f4v

nativedash.js

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

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

Header data1 data2 data N data k … …

He data1 data2 data N data k … …

MP4

MPEG-DASH

MPEG2-TS

Dynamic Adaptive Streaming over HTTP

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

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

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

dashUpload

persistent storage

mp4

hls

aac

h264

download server

Delta

transformation server

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

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

…MPEG2-TS

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

Проблемы HLS

persistentstorage

mp4: h264, aac

Delta

HLS

DASH

Решение

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

Header data1 data2 data N data k … …

He data1 data2 data N data k … …

He

He Offsets

MP4

DASH

DELTAtransformation

server mp4box

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

Header data1 data2 data N data k … …

He

He

He data1 data2 data N data k … …

MP4

DELTA

DASH

download server

Раздача DASH

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

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

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

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

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

m3u8 playlist

delta

delta index

mp4 FFMPEGFFMPEGUpload

persistent storage

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

mpeg2 fragments

…MPEG2

MP4 …

Panda diff

DELTA

IND

EX

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

download

persistent storage

RAM – 96GbSSD - 4Tb

eth4 x 10 Gbps

80%

20%

eth10 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 млн сек / сутки

Итого

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

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

Спасибо

Recommended