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

стриминг видео на ок

Embed Size (px)

Citation preview

Page 1: стриминг видео на ок

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

Page 2: стриминг видео на ок

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

Page 3: стриминг видео на ок

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

temp6storage

persistent6storage

upload6server

download6server

transformation6server

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

66

FLV

H.263

MP3

66

WebM

VP8

Vorbis, MP3

66

Page 7: стриминг видео на ок

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

Transformation6server

persistent storage

ffmpeg mp4box6

mp4parser

MP4, H.264, AAC6

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

temp storage

Any container/codec66

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: стриминг видео на ок

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

temp6storage

persistent6storage

upload6server

download6server

transformation6server

Page 10: стриминг видео на ок

MOOV data1 data2 data N

v1 a1 vN aNv0 a0Fast start

data m

vm am

data N data m

HTTP 6byte-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 – 96Gb6SSD - 4Tb

eth64 x 10 Gbps

80%

20%

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

eth610 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. Уменьшить колличество беферизаций6

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 6<MPD xmlns="urn:mpeg:DASH:schema:MPD:2011" mediaPresentationDuration="PT0H3M1.63S" minBufferTime="PT1.5S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011"6type="static">6 <Period duration="PT0H3M1.63S" start="PT0S"> 144p

720p2160p

bandwidth

time

MPEG-DASH manifest

He

Page 25: стриминг видео на ок

MPEG2 Transport stream

http://example.com/video.m3u8 6#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 6#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: стриминг видео на ок

persistent6storage

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: стриминг видео на ок

ФИЧИ:61. Интерлив видео/аудио62. Замена UrlLoader на UrlStream 63. Доработка алгоритма Автокачества64. Умный ретрай, кеширование sidx65. Умный фронтбуффер66. Работа с частично битым видео

Базовая 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 – 96Gb6SSD - 4Tb

eth64 x 10 Gbps

80%

20%

eth610 Gbps

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

Page 39: стриминг видео на ок

Результаты

Page 40: стриминг видео на ок

Параметр

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

66

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

adaptive bitrate streaming MPEG-Dash/HLS

6константа

старт 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: стриминг видео на ок

Спасибо