Upload
alexander-tobol
View
298
Download
5
Tags:
Embed Size (px)
Citation preview
Кадры решают все, или стриминг видео в одноклассникахАлександр Тоболь
• 10 млн уников в сутки по всему миру• 75 млн просмотров в сутки• 100 тысяч загрузок в день
Видеоплатформа изнутри
temp6storage
persistent6storage
upload6server
download6server
transformation6server
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
66
FLV
H.263
MP3
66
WebM
VP8
Vorbis, MP3
66
Трансформация видео
Transformation6server
persistent storage
ffmpeg mp4box6
mp4parser
MP4, H.264, AAC6
144, 240, 360, 480, 7201080, 1440, 2160
temp storage
Any container/codec66
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
Видео изнутри
temp6storage
persistent6storage
upload6server
download6server
transformation6server
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
«Длинный хвост»
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 – 96Gb6SSD - 4Tb
eth64 x 10 Gbps
80%
20%
Производительность раздачи
eth610 Gbps
Появились видео от блогеров и партнеров - сериалы, шоу, кино
Двухчасовой mp4 фильм в среднем стартует: - 12 секунд в проводных сетях - 21 секунду в мобильных сетях
Header data1 data2 data N data k … …
6 Mb
Что происходит?
- перемотка фильма занимает 6 секунд- 30% буферизаций ведут к закрытию плеера
1. Ускорить старт видео в 2-3 раза
2. Ускорить перемотку в 3-6 раз
3. Уменьшить колличество беферизаций6
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 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
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
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
persistent6storage
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
ФИЧИ:61. Интерлив видео/аудио62. Замена UrlLoader на UrlStream 63. Доработка алгоритма Автокачества64. Умный ретрай, кеширование sidx65. Умный фронтбуффер66. Работа с частично битым видео
Базовая 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 – 96Gb6SSD - 4Tb
eth64 x 10 Gbps
80%
20%
eth610 Gbps
Производительность раздачи
Результаты
Параметр
старый формат (MP4)
66
средняя длина/2 часа
adaptive bitrate streaming MPEG-Dash/HLS
6константа
старт 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 млн сек / сутки
Итого
Быстрее нас только этот чувак в красном!
Быстрее нас только этот мужчина в болиде!
Спасибо