Здравствуйте, Хабралюди!
Мы уже несколько раз рассказывали на Хабре про услуги сетей доставки контента, или CDN (Content Delivery Network), например, тут. Напомню, что сети CDN нужны для географически-распределенных онлайн-трансляций интернет-видео, стриминга видеороликов и раздачи статического контента по HTTP. Но сегодня хочу поговорить не об основных, а о дополнительных услугах сетей CDN, многие из которых связаны с обработкой видео в облаке. К таким услугам относится монтирование видео в облаке, перекодирование для адаптивного вещания, нарезка скриншотов из видеопотоков и т.п.
Итак, начнем. В первую очередь, хочу рассказать об услуге адаптивного вещания видео. Допустим, вы показываете видео на своем сайте в хорошем качестве, но к вам приходят жалобы на то, что у многих пользователей видео буферизируется, потому что для его загрузки не хватает полосы пропускания. Вы решаете уменьшить битрейт видео — жалоб от пользователей стало меньше, но теперь вам самим не нравится качество видео на вашем сайте, и вы переживаете, что ваши рекламодатели перестанут размещать у вас рекламу. Вы решаете показывать видео сразу в нескольких битрейтах — но вы вовсе не уверены, что все посетители сайта понимают, что такое битрейт и зачем его надо менять.
Так вот, адаптивное вещание позволяет автоматически снизить битрейт и, соответственно, качество интернет-видео тем пользователям, которые сидят на плохих интернет-каналах и, наоборот, повысить качество тем пользователям, которые пользуются хорошими каналами. Причем происходит это без участия самого пользователя: Flash-плеер (или плеер iOS) сам вычисляет, в каком битрейте будет оптимально показывать видео этому пользователю, чтобы у него не было буферизации видео, но при этом оно отдавалось в максимально хорошем качестве. Переключение между битрейтами может происходить постоянно как с понижением, так и с повышением битрейта, если доступная полоса пропускания повышается или понижается.
В принципе, адаптивное вещание поддерживает стандартный для Flash протокол RTMP. Но по нашему опыту, чтобы устойчиво показывать видео во Flash, нужно использовать протокол Adobe HTTP Dynamic Streaming (HDS). Этот протокол поддерживается в спецификации OSMF (Open Source Media Framework), на базе которого построены многие современные Flash-плееры. С яблочными устройствами проблем нет — протокол HTTP Live Streaming (HLS) работает вполне устойчиво.
Интересным дополнением к услуге адаптивного вещания видео является услуга перекодирования видеороликов налету. В общем случае, перед тем, как опубликовать на сайт видеоролики, которые вы хотите вещать в адаптивном режиме, необходимо предварительно закодировать их в нескольких битрейтах. Но при использовании услуги адаптивного вещания вы можете этого не делать — достаточно будет загрузить одну копию видеоролика в хорошем качестве, и видеоролики будут перекодироваться в разные битрейты по мере получения запросов от пользователей. Таким образом можно до минимума сократить время выкладки видео на сайт, так не требуется тратить время на его перекодирование. Если говорить про нашу сеть CDN — мы ее реализовали пока только для варианта раздачи видео через HDS, сейчас работаем над поддержкой HLS. У других CDN реализаций этой услуги я, откровенно говоря, не встречал.
Еще одна интересная услуга — это нарезка скриншотов из потоков. Допустим, на вашем сайте идет трансляция потокового видео в режиме реального времени. Как обозначить ссылку на это видео? Логичнее всего это делать, показывая один из последних кадров этого видео, чтобы пользователь понял, что именно ему собираются показать. Так вот, этот самый последний кадр можно запросить у CDN с помощью нехитрого запроса по API (если, конечно, используемый вами CDN поддерживает эту функциональность).
Ну и теперь собственно об облачной обработке видео. Самый простое что можно сделать с видео в облаке — это смонтировать его. Для этого собственно с видео не обязательно что-то делать — достаточно проигрывать его не целиком, а только некоторые его части. Чтобы сказать, какие именно части видеоролика проигрывать, у некоторых CDNов (по крайней мере, у нашего), предусмотрен соответствующий API. Например, в этом API можно попросить CDN проиграть видеоролик с 5-й по 70-ю секунду, потом с 100-й по 106-ю и т.п. Опять-таки, как и в случае услуги перекодирования налету, эта услуга существенно сокращает время выкладки видеоролика на сайте. Например, корреспондент может загрузить видеоролик с места события в облако, а редактор там его смонтировать и выложить сразу на новостной сайт (вместо того, чтобы скачивать видеоролик, редактировать его на своем компьютере и закачивать обратно на сервер).
Я рассказал далеко не о полном перечне услуг CDN. В загашнике у CDN-ов есть еще и «виртуальные телеканалы» (создания потокового видео из видеороликов), и наложение текста на видео, и запись эфира телеканалов, и приземление телеканалов со спутника для вещания через CDN, и переключение видеопотока на предварительно записанный резервный видеоролик — всего не перечислишь. Кстати, если у вас есть пожелания по новым услугам — поделитесь ими, будем благодарны за идеи и с удовольствием их будем реализовывать (соревнуясь с конкурентами, которые тоже наверняка читают эту статью — кстати, им привет :) )
Мы уже несколько раз рассказывали на Хабре про услуги сетей доставки контента, или CDN (Content Delivery Network), например, тут. Напомню, что сети CDN нужны для географически-распределенных онлайн-трансляций интернет-видео, стриминга видеороликов и раздачи статического контента по HTTP. Но сегодня хочу поговорить не об основных, а о дополнительных услугах сетей CDN, многие из которых связаны с обработкой видео в облаке. К таким услугам относится монтирование видео в облаке, перекодирование для адаптивного вещания, нарезка скриншотов из видеопотоков и т.п.
Итак, начнем. В первую очередь, хочу рассказать об услуге адаптивного вещания видео. Допустим, вы показываете видео на своем сайте в хорошем качестве, но к вам приходят жалобы на то, что у многих пользователей видео буферизируется, потому что для его загрузки не хватает полосы пропускания. Вы решаете уменьшить битрейт видео — жалоб от пользователей стало меньше, но теперь вам самим не нравится качество видео на вашем сайте, и вы переживаете, что ваши рекламодатели перестанут размещать у вас рекламу. Вы решаете показывать видео сразу в нескольких битрейтах — но вы вовсе не уверены, что все посетители сайта понимают, что такое битрейт и зачем его надо менять.
Так вот, адаптивное вещание позволяет автоматически снизить битрейт и, соответственно, качество интернет-видео тем пользователям, которые сидят на плохих интернет-каналах и, наоборот, повысить качество тем пользователям, которые пользуются хорошими каналами. Причем происходит это без участия самого пользователя: Flash-плеер (или плеер iOS) сам вычисляет, в каком битрейте будет оптимально показывать видео этому пользователю, чтобы у него не было буферизации видео, но при этом оно отдавалось в максимально хорошем качестве. Переключение между битрейтами может происходить постоянно как с понижением, так и с повышением битрейта, если доступная полоса пропускания повышается или понижается.
В принципе, адаптивное вещание поддерживает стандартный для Flash протокол RTMP. Но по нашему опыту, чтобы устойчиво показывать видео во Flash, нужно использовать протокол Adobe HTTP Dynamic Streaming (HDS). Этот протокол поддерживается в спецификации OSMF (Open Source Media Framework), на базе которого построены многие современные Flash-плееры. С яблочными устройствами проблем нет — протокол HTTP Live Streaming (HLS) работает вполне устойчиво.
Интересным дополнением к услуге адаптивного вещания видео является услуга перекодирования видеороликов налету. В общем случае, перед тем, как опубликовать на сайт видеоролики, которые вы хотите вещать в адаптивном режиме, необходимо предварительно закодировать их в нескольких битрейтах. Но при использовании услуги адаптивного вещания вы можете этого не делать — достаточно будет загрузить одну копию видеоролика в хорошем качестве, и видеоролики будут перекодироваться в разные битрейты по мере получения запросов от пользователей. Таким образом можно до минимума сократить время выкладки видео на сайт, так не требуется тратить время на его перекодирование. Если говорить про нашу сеть CDN — мы ее реализовали пока только для варианта раздачи видео через HDS, сейчас работаем над поддержкой HLS. У других CDN реализаций этой услуги я, откровенно говоря, не встречал.
Еще одна интересная услуга — это нарезка скриншотов из потоков. Допустим, на вашем сайте идет трансляция потокового видео в режиме реального времени. Как обозначить ссылку на это видео? Логичнее всего это делать, показывая один из последних кадров этого видео, чтобы пользователь понял, что именно ему собираются показать. Так вот, этот самый последний кадр можно запросить у CDN с помощью нехитрого запроса по API (если, конечно, используемый вами CDN поддерживает эту функциональность).
Ну и теперь собственно об облачной обработке видео. Самый простое что можно сделать с видео в облаке — это смонтировать его. Для этого собственно с видео не обязательно что-то делать — достаточно проигрывать его не целиком, а только некоторые его части. Чтобы сказать, какие именно части видеоролика проигрывать, у некоторых CDNов (по крайней мере, у нашего), предусмотрен соответствующий API. Например, в этом API можно попросить CDN проиграть видеоролик с 5-й по 70-ю секунду, потом с 100-й по 106-ю и т.п. Опять-таки, как и в случае услуги перекодирования налету, эта услуга существенно сокращает время выкладки видеоролика на сайте. Например, корреспондент может загрузить видеоролик с места события в облако, а редактор там его смонтировать и выложить сразу на новостной сайт (вместо того, чтобы скачивать видеоролик, редактировать его на своем компьютере и закачивать обратно на сервер).
Я рассказал далеко не о полном перечне услуг CDN. В загашнике у CDN-ов есть еще и «виртуальные телеканалы» (создания потокового видео из видеороликов), и наложение текста на видео, и запись эфира телеканалов, и приземление телеканалов со спутника для вещания через CDN, и переключение видеопотока на предварительно записанный резервный видеоролик — всего не перечислишь. Кстати, если у вас есть пожелания по новым услугам — поделитесь ими, будем благодарны за идеи и с удовольствием их будем реализовывать (соревнуясь с конкурентами, которые тоже наверняка читают эту статью — кстати, им привет :) )