Не секрет, что сегодня есть довольно много различных онлайн школ или торговцев курсами, где для обширной публики выставляется на продажу доступ к материалам. Иногда этот доступ пожизненный, иногда - ограничен некоторым сроком использования.
Что важно, так это то, что скачать данные материалы - нельзя. Но если очень надо, то можно. Давайте рассмотрим, как реализуется механизм защиты видеоматериалов (аудиоматериалы, по сути, обрабатываются так же).
Расскажу в теории, т.к. реализация и так не сложная и сильно зависит от площадки.
Краткий экскурс в видео
На сегодняшний день существует довольно большое количество различных видеокодеков, позволяющих кодировать и воспроизводить видео; однако все они работают в парадигме видеоконтейнера.
Видеоконтейнер - это правила организации и хранения данных. Обычно, представляет из себя набор пакетов, где каждый пакет имеет заголовок, идентификатор, позволяющий распознать, какой тип контейнера используется, порядковый номер, кодек, которым сжали видео и различные метаданные.
Кодеков довольно много, контейнеров - меньше. Но главное, что надо знать про них, есть некоторый набор оптимизированных для сети кодеков и контейнеров, где самое главное - попасть на начало пакета. Если какой-то пакет испорчен или отсутствует - он пропускается. Это может выражаться в том, что картинка распадается, а потом опять становится нормальной.
Чем это важно для нас? А тем, что любой набор данных потокового видео может (и, скорее всего, будет) содержать полезную нагрузку или то, что можно посмотреть и послушать.
Защита от воспроизведения
Правообладатель, чаще всего, хочет контролировать доступ к своим материалам. Ну как "контролировать" - он желает получать за каждый просмотр свою копеечку. И это в современном мире реализовать не то, чтобы очень сложно: достаточно отдавать материалы в частично зашифрованном виде (например, шифровать только часть информации в заголовках) делая воспроизведение невозможным без покупки ключа.
А чтобы купленные материалы не расползлись по интернетам, видео может маркироваться: в нём добавляется невидимая глазу некоторая метаинформация, которая, при этом, позволяет легко и достоверно определить покупателя ключа. Однако такую маркировку могут позволить себе не все: выдавать каждому пользователю уникальный набор байт, перекодированный налету - дорогое удовольствие, требующее больших вычислительных мощностей.
Техническая часть
Современный стандарт HTML5 вполне поддерживает потоковое видео, которое может постепенно подгружаться, но продавцу контента это не подходит, т.к. позволяет сразу скачать материалы и получить их не по подписке, а все сразу.
Зато есть клиент-серверные механизмы, позволяющие загружать видео по кусочкам, а, затем воспроизводить их. Но тут появляется первая проблема: писать свой собственный видеоплеер - долго, дорого и ненадёжно, а использовать существующий можно только с реальными ссылками. Однако и этот вопрос решается.
В современных браузерах существуют т.н. виртуальные ссылки, то есть ссылки, ведущие материалы, созданные внутри браузера. Почитать про них можно тут, а работают они следующим образом: разработчик из доступных ему данных конструирует некоторый бинарный объект (данные можно получить с сервера или загрузить из локального файла при содействии пользователя), который затем размещается в памяти и получает ссылку, которой вполне можно воспользоваться как обычной. Выглядит она, правда, несколько отлично (например, так: blob:https://play.mysite.com/8ffde72b-2c9d-430d-ace1e40-8b92ff23b), но во всём остальном ведёт себя как обычная ссылка.
Эту ссылку можно заполнять любыми данными, а также данные можно заменять или дополнять.
Если вы ещё не поняли, что это даёт, то объясняю: создав такую вот ссылку, в неё можно загрузить фрагмент видео (в зависимости от времени просмотра) и воспроизвести его; заранее загружая следующий фрагмент и подставляя его вслед за существующим.
Если же надо перемотать видео, то запрашивается просто кусочек видео с указанным временем смещения, но такой механизм можно реализовать по-разному: где-то разбить видео на много кусочков изначально, где-то - составить что-то вроде оглавления внутри файла с привязкой к началу очередного пакета.
Трудности защиты
В конечном счёте, данные, отправляемые клиенту - должны быть воспроизведены и тут наступает самое грустное место для правообладателя, потому что с тех пор, как данные, которые можно воспроизвести оказались на руках у клиента - они могут быть перехвачены:
- Если данные приходят зашифрованными, то перед добавлением их в объект ссылки они должны быть дешифрованы: изучение кода позволяет не только понять механизм шифрования, но и извлечь ключи шифрования.
- Видео подгружается по кусочкам, что значит, что определив механизм взаимодействия клиента и сервера (определение дополнительных служебных запросов, заголовков и прочего) можно просто встроенными средствами ОС организовать цепочку вызовов, позволяющих получить данные видео целиком и, если данные зашифрованы - расшифровать их.
- Если используются водяные знаки - видео можно перекодировать, подвергнуть автоматизированной обработке шейдерами, да, наконец, просто немного урезать качество картинки или звука.
Заключение
Как видите, все эти хвалёные защиты контента - не более чем небольшое затруднение для тех, кто этот контент желает скачать. Разобранная система защиты какой-то площадки, позволяет легко и быстро скачивать любые данные и раздавать на торрентах даром то, что, вроде как, продаётся за деньги.
Разумеется, существуют и более изощрённые защиты, самописные плееры, работающие на коммерческих закрытых кодеках. Но давайте будем честны, даже если система защиты выкручена на максимум, всегда остаётся последний вариант: запись видео и аудио с картинки, передаваемой на монитор. Даже специального оборудования не нужно. Только времени занимает немного больше.
Поэтому главный способ конкурирования с обходом защиты для правообладателей - предоставления материалов относительно дёшево в значительном объёме. Что сегодня повсеместно и наблюдается.