Upload
odnoklassnikiru
View
1.064
Download
4
Embed Size (px)
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
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 млн сек / сутки
Итого
Быстрее нас только этот чувак в красном!
Быстрее нас только этот мужчина в болиде!
Спасибо