ݺߣ

ݺߣShare a Scribd company logo
Кадры решают все, 
или стриминг видео 
в одноклассниках 
Александр Тоболь
• 10 млн уников в сутки по всему миру 
• 75 млн просмотров в сутки 
• 100 тысяч загрузок в день
Видеоплатформа изнутри 
temp6 
storage 
persistent6 
storage 
upload6 
server 
download6 
server 
transformation6 
server 
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 
6 
6 
FLV 
H.263 
MP3 
6 
6 
WebM 
VP8 
Vorbis, MP3 
6 
6
Трансформация видео 
Transformation6 
server 
persistent storage 
ffmpeg 
mp4box6 
mp4parser 
MP4, H.264, AAC6 
144, 240, 360, 480, 720 
1080, 1440, 2160 
temp storage 
Any container/codec6 
6 
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
Видео изнутри 
temp6 
storage 
persistent6 
storage 
upload6 
server 
download6 
server 
transformation6 
server
mp4 pseudo-streaming 
MOOV data1 data2 data m 
data N 
vm am 
Fast start v0 a0 v1 a1 vN aN 
HTTP 6 
byte-range 
request 
data m data N 
start time 
parameter in 
the request 
URL 
MOOV data m data N
«Длинный хвост»
Архитектура раздачи 
download 
server 
persistent 
storage 
RAM - 96GB 
SSD - 4TB 
1-й уровень 
2-й уровень 
Segment 
256Kb 
LRU 
FIFO
Zero-copy 
download 
server 
LRU 1-й уровень RAM - 96GB 
/dev/shm/cache.mem 
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count); 
ssize_t send(int sockfd, const void *buf, size_t len, int flags); 
https://github.com/odnoklassniki/one-nio/
Производительность раздачи 
download 
persistent 
storage 
RAM – 96Gb6 
SSD - 4Tb 
eth6 
4 x 10 Gbps 
80% 
20% 
eth6 
10 Gbps
Появились видео от блогеров и партнеров - сериалы, шоу, кино
Двухчасовой mp4 фильм в среднем стартует: 
- 12 секунд в проводных сетях 
- 21 секунду в мобильных сетях
Что происходит? 
Header data1 data2 … data k … data N 
6 Mb
- перемотка фильма занимает 6 секунд 
- 30% буферизаций ведут к закрытию плеера
Задачи 
1. Ускорить старт видео в 2-3 раза 
2. Ускорить перемотку в 3-6 раз 
3. Уменьшить колличество беферизаций6 
4. Решить проблему на мобильных устройствах
Автокачество в зависимости от разрешения 
окна плеера и скорости Интернет
Технологии стриминга 
Параметр 
кодек любой h264,aac 
контейнер MP4, MPEG2-TS MPEG2-TS 
HLS HDS 
автокачество mpd m3u8 
plugins 
h264,mp3,aac 
f4m 
DASH 
f4v 
dash.js native
Распространение протоколов 
статистика от wmspanel.com
Dynamic Adaptive Streaming over HTTP 
Header data1 data2 … data k … data N 
He data1 data2 … data k … data N 
MP4 
MPEG-DASH 
MPEG2-TS
He 
data1 data2… data k … data N 
He data1 data2… data k … data N 
He data1 data2… data k … data N 
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"6 
type="static">6 
2160p 
<Period duration="PT0H3M1.63S" 
144p 
start="PT0S"> 720p 
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 
Простое решение
Экономное решение 
h264 
Upload dash 
persistent 
storage 
mp4 
hls 
aac 
download 
server 
Delta 
transformation 
server
Проблемы HLS 
HLS 1.ts 2.ts … k.ts … N.ts 
MPEG2-TS … 
40Гбит/сек по 188байт пакет = 26 млн пакетов в сек
persistent6 
storage 
mp4: h264, aac 
Delta 
HLS 
DASH 
Решение
MPEG-DASH поток на лету
Header data1 data2 … data k … data N 
He data1 data2… data k … data N 
He 
He Offsets 
MP4 
DASH 
DELTA 
transformation 
server 
mp4box 
Кодирование DASH
He 
He 
Header data1 data2… data k … data N 
He data1 data2… data k… data N 
DELTA 
MP4 
DASH 
download 
server 
Раздача DASH
Header data 
Header data 
He data1 data2… data k … data N 
He data1 data2… data k … data N 
720p 
2160p 
MP4 
fragmented MP4 
720p 
2160p 
Header data 
MP4 
Header data 
720p 
2160p 
Проблемы DASH
FLASH плеер и MPEG-DASH формат 
ФИЧИ:6 
1. Интерлив видео/аудио6 
2. Замена UrlLoader на UrlStream 6 
3. Доработка алгоритма Автокачества6 
4. Умный ретрай, кеширование sidx6 
5. Умный фронтбуффер6 
6. Работа с частично битым видео 
Базовая as3 реализация dash https://github.com/ 
castlabs/dashas
HLS поток на лету
m3u8 
playlist 
Кодирование HLS 
Upload FFMPEG mp4 FFMPEG 
delta 
delta index 
persistent 
storage 
mpeg2 
fragments
Panda diff 
MPEG2 … 
MP4 … 
DELTA 
INDEX
Производительность раздачи 
download 
MP4 ~50 Гбит/сек 
DASH ~40 Гбит/сек 
HLS ~20 Гбит/сек 
persistent 
storage 
RAM – 96Gb6 
SSD - 4Tb 
eth6 
4 x 10 Gbps 
80% 
20% 
eth6 
10 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 млн сек / сутки 
Итого
Быстрее нас только этот 
мужчина в болиде! 
Быстрее нас только этот чувак в красном!
Спасибо

More Related Content

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

  • 1. Кадры решают все, или стриминг видео в одноклассниках Александр Тоболь
  • 2. • 10 млн уников в сутки по всему миру • 75 млн просмотров в сутки • 100 тысяч загрузок в день
  • 3. Видеоплатформа изнутри temp6 storage persistent6 storage upload6 server download6 server transformation6 server http://habrahabr.ru/company/odnoklassniki/blog/
  • 4. MPEG1/2/4, DivX, h.264, WMV7/8/9 COder DECoder MP3, AAC, OGG Vorbis, DTS
  • 6. Выбор кодека и контейнера MP4 H.264 AAC 6 6 FLV H.263 MP3 6 6 WebM VP8 Vorbis, MP3 6 6
  • 7. Трансформация видео Transformation6 server persistent storage ffmpeg mp4box6 mp4parser MP4, H.264, AAC6 144, 240, 360, 480, 720 1080, 1440, 2160 temp storage Any container/codec6 6 WxH
  • 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
  • 9. Видео изнутри temp6 storage persistent6 storage upload6 server download6 server transformation6 server
  • 10. mp4 pseudo-streaming MOOV data1 data2 data m data N vm am Fast start v0 a0 v1 a1 vN aN HTTP 6 byte-range request data m data N start time parameter in the request URL MOOV data m data N
  • 12. Архитектура раздачи download server persistent storage RAM - 96GB SSD - 4TB 1-й уровень 2-й уровень Segment 256Kb LRU FIFO
  • 13. Zero-copy download server LRU 1-й уровень RAM - 96GB /dev/shm/cache.mem ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count); ssize_t send(int sockfd, const void *buf, size_t len, int flags); https://github.com/odnoklassniki/one-nio/
  • 14. Производительность раздачи download persistent storage RAM – 96Gb6 SSD - 4Tb eth6 4 x 10 Gbps 80% 20% eth6 10 Gbps
  • 15. Появились видео от блогеров и партнеров - сериалы, шоу, кино
  • 16. Двухчасовой mp4 фильм в среднем стартует: - 12 секунд в проводных сетях - 21 секунду в мобильных сетях
  • 17. Что происходит? Header data1 data2 … data k … data N 6 Mb
  • 18. - перемотка фильма занимает 6 секунд - 30% буферизаций ведут к закрытию плеера
  • 19. Задачи 1. Ускорить старт видео в 2-3 раза 2. Ускорить перемотку в 3-6 раз 3. Уменьшить колличество беферизаций6 4. Решить проблему на мобильных устройствах
  • 20. Автокачество в зависимости от разрешения окна плеера и скорости Интернет
  • 21. Технологии стриминга Параметр кодек любой h264,aac контейнер MP4, MPEG2-TS MPEG2-TS HLS HDS автокачество mpd m3u8 plugins h264,mp3,aac f4m DASH f4v dash.js native
  • 23. Dynamic Adaptive Streaming over HTTP Header data1 data2 … data k … data N He data1 data2 … data k … data N MP4 MPEG-DASH MPEG2-TS
  • 24. He data1 data2… data k … data N He data1 data2… data k … data N He data1 data2… data k … data N 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"6 type="static">6 2160p <Period duration="PT0H3M1.63S" 144p start="PT0S"> 720p bandwidth time MPEG-DASH manifest He
  • 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
  • 26. dash FFMPEG Upload FFMPEG mp4 MP4BOX hls 10Пб x 3 Простое решение
  • 27. Экономное решение h264 Upload dash persistent storage mp4 hls aac download server Delta transformation server
  • 28. Проблемы HLS HLS 1.ts 2.ts … k.ts … N.ts MPEG2-TS … 40Гбит/сек по 188байт пакет = 26 млн пакетов в сек
  • 29. persistent6 storage mp4: h264, aac Delta HLS DASH Решение
  • 31. Header data1 data2 … data k … data N He data1 data2… data k … data N He He Offsets MP4 DASH DELTA transformation server mp4box Кодирование DASH
  • 32. He He Header data1 data2… data k … data N He data1 data2… data k… data N DELTA MP4 DASH download server Раздача DASH
  • 33. Header data Header data He data1 data2… data k … data N He data1 data2… data k … data N 720p 2160p MP4 fragmented MP4 720p 2160p Header data MP4 Header data 720p 2160p Проблемы DASH
  • 34. FLASH плеер и MPEG-DASH формат ФИЧИ:6 1. Интерлив видео/аудио6 2. Замена UrlLoader на UrlStream 6 3. Доработка алгоритма Автокачества6 4. Умный ретрай, кеширование sidx6 5. Умный фронтбуффер6 6. Работа с частично битым видео Базовая as3 реализация dash https://github.com/ castlabs/dashas
  • 36. m3u8 playlist Кодирование HLS Upload FFMPEG mp4 FFMPEG delta delta index persistent storage mpeg2 fragments
  • 37. Panda diff MPEG2 … MP4 … DELTA INDEX
  • 38. Производительность раздачи download MP4 ~50 Гбит/сек DASH ~40 Гбит/сек HLS ~20 Гбит/сек persistent storage RAM – 96Gb6 SSD - 4Tb eth6 4 x 10 Gbps 80% 20% eth6 10 Gbps
  • 40. Параметр старый формат (MP4) 66 средняя длина/2 часа adaptive bitrate streaming MPEG-Dash/HLS 6 константа старт 4 сек/12 сек 1.5 сек перемотка 4 сек/12 сек 1.3 сек стоимость хранения - +10% стоимость раздачи - +20% CPU Первый кадр в 6 раз быстрее!
  • 41. Мобильные экраны – смартфоны, планшеты, SmartTV
  • 42. 1. Автоматически выбор качества в зависимости от разрешения и скорости Интернет 2. DASH-видео на FLASH и HTML-5 3. HLS видео в iOS- плеерах и SmartTV 4. Экономное хранение форматов и сохранение производительности раздачи 5. Экономия времени пользователей 6 лет / сутки 50 млн просмотров/сутки * 4 сек = 200 млн сек / сутки Итого
  • 43. Быстрее нас только этот мужчина в болиде! Быстрее нас только этот чувак в красном!