Так что я - инженер-программист, пытающийся понять некоторые мелкие детали о том, как работает потоковая передача мультимедиа. Я потратил львиную долю дня, пытаясь понять различные кодеки, форматы контейнеров и потоковые протоколы, которые имеют отношение к моему приложению. Итак, вот мое понимание того, как это работает, что вполне может ввести в заблуждение:
- Потоковое мультимедиа действительно сводится к формату контейнера и протоколу потоковой передачи :
- Все аудиоданные кодируются (через аудиокодек) в аудиопоток
- Все видеоданные закодированы (опять же через кодек) в видеопоток
- Два потока объединяются ( мультиплексируются? ) Вместе в контейнер, который в конечном итоге становится файлом (таким как MP4 и т. Д.)
- Затем специальный медиасервер передает этот контейнер (файл MP4 или другой формат) клиенту (возможно, проигрывателю HTML5 Video, работающему внутри чьего-либо браузера) через некоторый стандартный потоковый протокол, такой как RTSP
- В случае клиента браузера, я предполагаю, что в самом браузере есть клиент RTSP, который затем каким-то образом представляет пользователям HTML5 Video Player
- Я мог бы разместить файл MP4 с веб- сервера, такого как nginx или httpd, но, поскольку эти серверы не являются серверами RTSP, я мог бы обрабатывать только запросы MP4 как запросы на загрузку и, следовательно, не мог бы выполнять потоковую передачу. медиа файлы
- Аналогично, если бы я использовал
curl
для извлечения файлов с сервера nginx, поскольку ниcurl
nginx, ни RTSP не говорят на RTSP, это будет рассматриваться как загрузка файла
- Аналогично, если бы я использовал
- Но когда я размещаю файл MP4 с сервера потокового мультимедиа (VideoLAN, Red5, Wowza и т. Д.), И я использую RTSP-клиент (или любой поддерживаемый клиент потокового мультимедиа) для запроса потока с этого сервера, то тогда и только затем делает любое фактическое потоковое происходит
- Следовательно, даже несмотря на то, что «видео» YouTube или Vimeo размещаются на страницах HTML, обслуживаемых через HTTP (S) HTTP-серверами, я предполагаю, что встроенные проигрыватели видео на этих страницах (с которых видео действительно воспроизводятся) фактически начинают второй последующее подключение к потоковому серверу, и потоковая передача происходит по протоколу RTSP или некоторому другому не HTTP-протоколу
Так что это мое понимание, и я полагаю, что сначала спрошу, что если что-то, что я изложил выше, неверно, пожалуйста, начните исправлять меня! Предполагая, что я более или менее прав:
Как проигрыватели потокового мультимедиа, работающие внутри страниц HTML и обслуживаемые серверами HTML, устанавливают потоковые (RTSP и т. Д.) Соединения с серверами потокового мультимедиа (обслуживающими запросы RTSP)?
Ответы:
Общие приложения
RTSP в настоящее время, кажется, больше используется с интерфейсами приложений / устройств, которые непосредственно транслируют (например, IP-камера) или повторно (как движок), чем для потоковой передачи сохраненных медиафайлов из физического местоположения через интерфейс веб-воспроизведения HTTP с встроенный плеер
Кажется, что RTSP является протоколом с отслеживанием состояния , и он использует UDP больше, чем TCP при потоковой передаче, и он больше используется в качестве серверного устройства (например, IP-камеры), который подключен к сети TCP / IP и передает потоки через UDP и т. Д. Затем вы подключаетесь к этим каналам (серверу) как клиент в той же сети, и вы можете выдавать RTSP-запросы для соответствующего использования.
Логический поток
Как я понимаю поток потокового мультимедиа в этой форме:
Пожалуйста, ознакомьтесь с разделом « Технологии потоковой передачи» ниже для общего сравнения HTTP и RTSP.
более того
В приведенных ниже 10 причинах, почему вы никогда не должны размещать свои собственные видео », я процитировал части, которые помогут вам ответить на ваш вопрос «в общих чертах», не будучи слишком конкретными.
По сути, это говорит о том, что веб-сайт, который имеет встроенные элементы управления медиаплеером, будет:
источник
Ниже я рассмотрю главным образом ваш вопрос о том, что происходит, когда видео отображается в браузере. Тема обширна, поэтому я буду касаться только соответствующих пунктов.
HTML5 ввел
<VIDEO>
тег, который решил проблему интеграции отображаемого видео в браузер при использовании JavaScript и CSS. Предыдущий<OBJECT>
тег требовал внешнего программного обеспечения и был плохо интегрирован со страницей. По сути, новый тег требовал, чтобы браузер также стал видеоплеером, хотя никаких стандартов не было. Результатом стала полная фрагментация стандартов, единственное решение которой состоит в том, что видеосервер предоставит доступ к нескольким форматам видео и что все эти альтернативные источники будут указаны в<VIDEO>
теге, из которого браузер выберет тот, который он поддерживает.Пример тега с несколькими источниками:
Сам
<VIDEO>
тег не зависит от протокола, поэтому может использовать любой протокол, поддерживаемый браузером, включая RTSP. Поддержка протокола MPEG-DASH (динамическая адаптивная потоковая передача по HTTP) в последнее время стала очень всеобъемлющей, поэтому она будет воспроизводиться на большинстве устройств и в собственных браузерах или с использованием HTML5, что означает, что дополнительные плагины не требуются. См. Эту таблицу совместимости устройств и браузеров . Смотрите также эту статью Mozilla для подготовки вашего сервера для обслуживания MPEG-DASH. DASH работает через HTTP, поэтому он будет работать до тех пор, пока ваш HTTP-сервер поддерживает запросы диапазона байтов и настроен на обслуживание файлов .mpd сmimetype="application/dash+xml"
.Нормальное взаимодействие между клиентом и сервером выглядит следующим образом. Для HTML5 VIDEO браузер также является плеером, хотя он может открыть новое соединение для воспроизведения.
Исходное соединение предоставляет метаданные, которые клиент использует для отображения видео. Если для получения этих метаданных использовался протокол RTSP, то позднее создается соединение RTP для передачи видео + аудиоданных. Протокол RTCP используется для передачи дополнительных команд на сервер.
RTP, RTCP и RTSP работают на разных портах. Обычно, когда RTP находится на порту N, RTCP находится на порту N + 1. Сеанс RTP может содержать несколько потоков, которые должны быть объединены на стороне получателя; например, аудио и видео могут быть на отдельных каналах.
Чтобы никто не блокировался из вашего контента, вы должны предоставить как бесплатные кодеки, видео webM или Theora, так и видео H.264, а также аудио-файлы Vorbis и MP3. (Легко сказано, трудно сделать.)
Вот что происходит в деталях для RTSP:
Клиент устанавливает TCP-соединение с серверами, обычно через TCP-порт 554, известный порт для RTSP.
Затем клиент начнет выдавать серию команд заголовка RTSP, которые имеют формат, аналогичный HTTP, каждая из которых подтверждается сервером. В рамках этих команд RTSP клиент будет описывать серверу подробности требований сеанса, таких как версия RTSP, которую он поддерживает, транспорт, который будет использоваться для потока данных, и любая связанная информация о порте UDP или TCP. Эта информация передается с использованием заголовков DESCRIBE и SETUP и дополняется в ответе сервера идентификатором сеанса, который клиент и любые промежуточные прокси-устройства могут использовать для идентификации потока в последующих обменах.
Как только согласование транспортных параметров завершено, клиент выполнит команду PLAY, чтобы дать серверу указание начать доставку потока данных RTP.
Как только клиент решает закрыть поток, выдается команда TEARDOWN вместе с идентификатором сеанса, который инструктирует сервер прекратить доставку RTP, связанную с этим идентификатором.
Дальнейшее чтение :
источник
Вот быстрый и грязный ответ:
Существует разница между воспроизведением видео в Интернете и его передачей в реальном времени.
Воспроизведение осуществляется с помощью проигрывателя, который включен в веб-страницу (возможно, с использованием Flash, JS или видеообъекта html5). Клиент (браузер) загружает этот проигрыватель и запускает его. Плеер, в свою очередь, получает видео с простого URL-адреса для скачивания. На самом деле, даже с Youtube, есть программы, которые позволяют вам получать доступ к размещенным видеофайлам напрямую и загружать их, как любой другой файл. Поскольку система использует обычную старую ссылку для скачивания, нет необходимости в сложных потоковых протоколах, таких как RTSP
Потоковое вещание в реальном времени (скажем, с веб-камеры) ... ну, сложнее. Flash имеет эту встроенную функциональность, но ее больше не следует использовать. Видео HTML5 не поддерживает потоковую передачу в реальном времени, но люди смогли «обмануть» его, заставив сервер размещения файлов постоянно изменять предлагаемый им видеофайл.
источник