Подтвердить что ты не робот

Технология HD потокового видео YouTube?

В последнее время я изучал различные методы потоковой передачи MP4 в браузер. Flash Media Server является очевидным выбором здесь (с использованием Cloudfront), и большинство решений, которые я видел, используют протокол RTMP.

Тем не менее, я потратил некоторое время на YouTube с помощью Firebug и отладчика Chrome, выяснив, как работает их потоковая передача, и я обнаружил некоторые интересные различия между некоторыми из их видео и уровнями качества.

Мои два примера видеороликов: A и B. A доступен до 480p, а B - до 1080p. Для обоих видеороликов все ставки до 480p подаются в контейнере FLV с видео H.264 и аудио AAC через HTTP. Что интересно, так это то, что если вы еще не загрузили (кэшировали) все видео, и вы попытаетесь перейти к незашифрованной части видео, будет сделан новый запрос с параметром "begin", равным смещению цели в миллисекунды. Пример из видео A при 480p:

http://v11.lscache8.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0dWTldQVF9FSkNNNl9PSlhJ&fexp=904806%2C902906%2C903711&algorithm=throttle-factor&itag=35&ipbits=0&burst=40&sver=3&expire=1279756800&key=yt1&signature=D2D704D63C242CF187CAA5B5D5BAFB8DFACAC5FF.39180C01559C976717B651A7EB1D0C6249231EB7&factor=1.25&id=8568eb3135971f6f&begin=111863

Response Headers:
Cache-Control:public,max-age=23472
Connection:close
Content-Length:14320637
Content-Type:video/x-flv
Date:Wed, 21 Jul 2010 17:23:48 GMT
Expires:Wed, 21 Jul 2010 23:55:00 GMT
Last-Modified:Wed, 19 May 2010 12:31:41 GMT
Server:gvs 1.0
X-Content-Type-Options:nosniff

Файл, возвращенный этим URL-адресом, является полностью допустимым FLV, содержащим только часть видео после запрошенного смещения.

Я сделал такой же тест в версиях с высоким разрешением видео B. На 720p и 1080p YouTube вернет видео в контейнер MP4, а также видео H.264 и аудио AAC. Для меня впечатляет то, что их сервер принимает одинаковый тип смещения для видео MP4 (через параметр "begin" ) и возвращает допустимый, плавный MP4 (атом moov в передней части файла с правильными смещениями), который также включает только запрошенная часть видео.

Итак, как YouTube это делает? Как они генерируют FLV или MP4-контейнер "на лету" с правильными заголовками и только желаемый сегмент запрошенного видео? Я знаю, что это может быть достигнуто с помощью FFMPEG для поиска нужной начальной точки и qt-faststart script для перемещения атома moov в фронт потока, но похоже, что это будет слишком медленным, чтобы обрабатывать по требованию миллионы зрителей YouTube.

Идеи?

Спасибо заранее!

Сноска: мне не разрешено включать более 1 ссылки на данный момент, так что вот видео URL: http://www.youtube.com/watch? v = hWjrMTWXH28 "Видео доступно до 480p"

4b9b3361

Ответ 1

На этом форуме задан вопрос о симуляторе. http://www.flashforum.de/forum/video/flv-ab-beliebiger-position-streamen-248483.html

Доступны два решения:

  • Использовать потоковый сервер
  • Используйте файловую оболочку, написанную на языке программирования по вашему выбору (пример написан на php)

В обоих решениях вам необходимо изменить все ваши видеофайлы f.e. используя flvmid, чтобы добавить информацию о ключевой кадре в FLV-видео.

Во втором решении php- script возвращает запрос, который вы разместили выше, и анализирует FLV-видео до тех пор, пока оно не достигнет позиции, заданной параметром begin. После этого он начинает нажимать видео-контент на страницу-посетителя. Прочитайте этот поток, чтобы получить дополнительную информацию и примеры php-кода.

Оригинальный поток написан на немецком языке, но вы можете использовать http://translate.google.com, чтобы получить плохой английский:)

Отправленный HTTP-ответ содержит следующую строку:

Server:gvs

Возможно, gvs означает что-то вроде "Google Video Server". Я искал gvs, но я не мог найти ничего ценного.

Ответ 2

Посмотрите на сервер NGINX, у него есть модули, чтобы сделать именно это. Автор выполнил все разбор и переписывание контейнеров FLV и MP4 для вывода с точным требуемым смещением. Нет необходимости в ffmpeg в потоковой части, поскольку это будет излишним.

Ответ 3

Youtube использует сервер lighttpd для потоковой передачи. Он фактически использует псевдопоток, не потоковый. Этот механизм позволяет зрителям искать еще не загруженные части видеоролика.

Ответ 4

Я не думаю, что YouTube использует FFMPEG для его потоковой передачи. Формат контейнера, как flv, так и mp4, достаточно прост и не является интенсивным вычислением. Важно только найти ближайший ключевой кадр к указанной временной отметке begin и начать с нее.