Видео и аудио поток - сервер только для клиентов
Есть ли способ транслировать видео и аудио на веб-сайте только клиентам, используя камеру, установленную на сервере, например, как это делает YouTube?
Я начал читать webrtc
, но если я использую webrtc, я должен создать сервер stun/turn и другие вещи, которые для одностороннего потока, я думаю, не нужны (это просто мое понимание вещей..), потому что мне ничего не нужно от клиентов буквально ни их видео, ни аудио..
Так есть ли способ добиться этого с помощью html5
Потоковое только в одном направлении:
server (camera) -> clients
Есть ли что-то об этом там, или я должен придерживаться webrtc
?
1 ответ
Я собираюсь объяснить возможное решение для этого сценария, могут быть и другие, но я надеюсь, что мое даст вам приблизительное представление о том, как вы могли бы сделать это, и отправную точку, чтобы узнать больше об удивительных возможностях WebRTC. Пожалуйста, дайте мне знать, если что-то не поняли.
Итак, WebRTC - это бесплатный открытый проект, который предоставляет браузерам и мобильным приложениям функции связи в реальном времени (RTC) с помощью простых API. Приятно то, что WebRTC имеет неплохую поддержку браузеров (хотя не в каждом браузере Safari только начал поддерживать его месяц назад с Safari 11). Но в этом случае мы хотим использовать WebRTC на стороне сервера. В конце концов, мы все еще можем думать об одноранговой связи в реальном времени, где один из наших пиров является сервером.
Я не знаю, знакомы ли вы с Node.js, но я рекомендую вам написать свое серверное приложение с ним (<3 Javascript!):
Есть несколько библиотек, которые обертывают функциональность WebRTC для использования на стороне сервера, например, node-webrtc и node-rtc-peer-connection.
Но я рекомендую вам взглянуть на electronic-werbrtc, так как другие могут использовать устаревшие методы или быть неполными. Electron-webrtc в фоновом режиме запускает клиент Electron без головы, чтобы использовать встроенную реализацию Chromium WebRTC. Таким образом, с его помощью вы сможете получить доступ к камере на вашем сервере и создать поток, который будет обслуживаться другим узлом (браузером).
Все вышеизложенное относится к задачам, связанным с WebRTC, в данном случае: потоковое видео peer (сервер)-to-peer(браузер).
Теперь поговорим о процессе сигнализации, оглушении и повороте.
Сигнализация: представьте себе сценарий одноранговой связи с двумя браузерами, они хотят установить прямое соединение и передавать потоковое видео и аудио между собой. Но они не знают друг друга, например, если я не знаю ваш домашний адрес, я не могу отправить вам письмо. Поэтому им нужен сервис, который помогает им узнать друг друга, чтобы у них был IP-адрес другого. Это должно быть сделано так называемым "сервером сигнализации". Если каким-то образом вы знаете другой одноранговый IP-адрес, вам не понадобится сервер сигнализации.
STUN/TURN: приведенная выше схема отлично работает в локальной сети, где каждый узел имеет свой собственный IP-адрес, и между ними нет межсетевых экранов и маршрутизаторов. Но в противном случае у вас могут быть одноранговые узлы за NAT или межсетевыми экранами, и тогда ваш сервер сигнализации не сможет заставить обоих узлов обнаруживать себя. Если у вас есть одноранговые узлы за NAT, вам понадобится сервер STUN, а если у вас есть одноранговые узлы за брандмауэрами, вам понадобится сервер TURN. Это немного упрощено, но я просто хочу, чтобы вы имели общее представление о том, когда вам могут понадобиться серверы STUN/TURN.
Чтобы лучше понять Сигнализацию, STUN и TURN, есть очень графическая статья, которая объясняет их отлично.
Теперь по вашему сценарию:
- Я думаю, что вам, вероятно, не нужны серверы STUN/TURN,
а также вам не нужно реализовывать процесс сигнализации, потому что браузеры, которые должны принимать поток от сервера, будут знать этот адрес сервера, верно?Таким образом, они могут установить соединение WebRTC с ним. - РЕДАКТИРОВАТЬ: вполне вероятно, что вам потребуется реализовать какое-то рукопожатие между сервером и клиентами (браузерами), так что это будет процесс сигнализации. Это не является частью WebRTC, и поэтому вам нужно реализовать его самостоятельно. Как я уже сказал, именно так 2 партнера могут обнаруживать друг друга, но они также обмениваются информацией в качестве условий локального носителя, таких как кодеки, разрешения, с которыми они могут работать, и т. Д. В вашем случае ваш сервер сигнализации может быть размещен на том же сервере. вы используете для strea: вы можете создать небольшое приложение node.js, которое там работает и которое легко управляет всем процессом сигнализации, это не имеет большого значения. Я рекомендую вам прочитать эту статью, а особенно раздел " Как я могу создать службу сигнализации? ". В целом все статьи WebRTC с этого сайта очень полезны.
Это имеет смысл для вас? Я думаю, что с этим вы можете начать копать немного больше и посмотреть, достаточно ли этого, или вам нужно реализовать больше вещей. Надеюсь, поможет!