Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,743 views

Published on

Доклад Александра Тоболя на HighLoad++ 2014.

Published in: Internet
  • Be the first to comment

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

  1. 1. Кадры решают все, или стриминг видео в одноклассниках Александр Тоболь
  2. 2. • 10 млн уников в сутки по всему миру • 75 млн просмотров в сутки • 100 тысяч загрузок в день
  3. 3. Видеоплатформа изнутри temp storage persistent storage upload server download server transformation server http://habrahabr.ru/company/odnoklassniki/blog/
  4. 4. MPEG1/2/4, DivX, h.264, WMV7/8/9 COder DECoder MP3, AAC, OGG Vorbis, DTS
  5. 5. Контейнер MKV, QuickTime, FLV, 3GP, MP4, .TS
  6. 6. Выбор кодека и контейнера MP4 H.264 AAC FLV H.263 MP3 WebM VP8 Vorbis, MP3
  7. 7. Трансформация видео Transformation server persistent storage ffmpeg mp4box mp4parser MP4, H.264, AAC 144, 240, 360, 480, 720 1080, 1440, 2160 temp storage Any container/codec WxH
  8. 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. 9. Видео изнутри temp storage persistent storage upload server download server transformation server
  10. 10. mp4 pseudo-streaming MOOV data1 data2 data m data N vm am Fast start v0 a0 v1 a1 vN aN data N data m HTTP byte-range request start time parameter in the request URL MOOV data m data N
  11. 11. «Длинный хвост»
  12. 12. Архитектура раздачи download server persistent storage RAM - 96GB SSD - 4TB 1-й уровень 2-й уровень Segment 256Kb LRU FIFO
  13. 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. 14. Производительность раздачи download persistent storage RAM – 96Gb SSD - 4Tb eth 4 x 10 Gbps 80% 20% eth 10 Gbps
  15. 15. Появились видео от блогеров и партнеров - сериалы, шоу, кино
  16. 16. Двухчасовой mp4 фильм в среднем стартует: - 12 секунд в проводных сетях - 21 секунду в мобильных сетях
  17. 17. Что происходит? Header data1 data2 data k data N … … 6 Mb
  18. 18. - перемотка фильма занимает 6 секунд - 30% буферизаций ведут к закрытию плеера
  19. 19. Задачи 1. Ускорить старт видео в 2-3 раза 2. Ускорить перемотку в 3-6 раз 3. Уменьшить колличество беферизаций 4. Решить проблему на мобильных устройствах
  20. 20. Автокачество в зависимости от разрешения окна плеера и скорости Интернет
  21. 21. Технологии стриминга Параметр HLS HDS кодек любой h264,aac контейнер MP4, MPEG2-TS MPEG2-TS автокачество mpd m3u8 plugins h264,mp3,aac f4m DASH f4v dash.js native
  22. 22. Распространение протоколов статистика от wmspanel.com
  23. 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. 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 <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"> 2160p <Period duration="PT0H3M1.63S" 144p start="PT0S"> 720p bandwidth time MPEG-DASH manifest He
  25. 25. 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
  26. 26. dash FFMPEG Upload FFMPEG mp4 MP4BOX hls 10Пб x 3 Простое решение
  27. 27. Экономное решение h264 Upload dash persistent storage mp4 hls aac download server Delta transformation server
  28. 28. Проблемы HLS 1.ts 2.ts k.ts N.ts HLS … … MPEG2-TS … 40Гбит/сек по 188байт пакет = 26 млн пакетов в сек
  29. 29. persistent storage mp4: h264, aac Delta HLS DASH Решение
  30. 30. MPEG-DASH поток на лету
  31. 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. 32. He He Header data1 data2 data k data N … … He data1 data2 data k data N … … DELTA MP4 DASH download server Раздача DASH
  33. 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. 34. FLASH плеер и MPEG-DASH формат ФИЧИ: 1. Интерлив видео/аудио 2. Замена UrlLoader на UrlStream 3. Доработка алгоритма Автокачества 4. Умный ретрай, кеширование sidx 5. Умный фронтбуффер 6. Работа с частично битым видео Базовая as3 реализация dash https://github.com/castlabs/dashas
  35. 35. HLS поток на лету
  36. 36. m3u8 playlist Кодирование HLS Upload FFMPEG mp4 FFMPEG delta delta index persistent storage mpeg2 fragments
  37. 37. Panda diff MPEG2 … MP4 … DELTA INDEX
  38. 38. Производительность раздачи download MP4 ~50 Гбит/сек DASH ~40 Гбит/сек HLS ~20 Гбит/сек persistent storage RAM – 96Gb SSD - 4Tb eth 4 x 10 Gbps 80% 20% eth 10 Gbps
  39. 39. Результаты
  40. 40. Параметр старый формат (MP4) средняя длина/2 часа adaptive bitrate streaming MPEG-Dash/HLS константа старт 4 сек/12 сек 1.5 сек перемотка 4 сек/12 сек 1.3 сек стоимость хранения - +10% стоимость раздачи - +20% CPU Первый кадр в 6 раз быстрее!
  41. 41. Мобильные экраны – смартфоны, планшеты, SmartTV
  42. 42. 1. Автоматически выбор качества в зависимости от разрешения и скорости Интернет 2. DASH-видео на FLASH и HTML-5 3. HLS видео в iOS- плеерах и SmartTV 4. Экономное хранение форматов и сохранение производительности раздачи 5. Экономия времени пользователей 6 лет / сутки 50 млн просмотров/сутки * 4 сек = 200 млн сек / сутки Итого
  43. 43. Быстрее нас только этот мужчина в болиде! Быстрее нас только этот чувак в красном!
  44. 44. Спасибо

×