Así que soy un ingeniero de software que intenta comprender algunos detalles esenciales sobre cómo funcionan los medios de transmisión. He pasado la mayor parte del día tratando de comprender los diversos códecs, formatos de contenedor y protocolos de transmisión que son pertinentes para mi aplicación. Hasta ahora, aquí está mi comprensión de cómo funciona, que bien podría confundirse:
- La transmisión de medios realmente se reduce a formato de contenedor y protocolo de transmisión :
- Todos los datos de audio están codificados (a través de un códec de audio) en un flujo de bits de audio
- Todos los datos de video están codificados (nuevamente, a través de un códec) en un flujo de bits de video
- Las dos corrientes se fusionan ( ¿multiplexan? ) Juntas en un contenedor que finalmente se convierte en un archivo (como MP4, etc.)
- Un servidor de medios especial sirve este contenedor (archivo MP4 u otro formato) a un cliente (quizás un reproductor de video HTML5 que se ejecuta dentro del navegador de alguien) a través de algún protocolo de transmisión estándar, como RTSP
- En el caso de un cliente de navegador, supongo que el navegador en sí tiene un cliente RTSP que luego presenta de alguna manera a los usuarios HTML5 Video Player
- Yo podía anfitrión de un archivo MP4 de una web servidor, como Nginx o httpd, pero desde aquellos servidores que no son servidores RTSP, sólo sería capaz de solicitudes placer para el MP4 como solicitudes de descarga , y por lo tanto, no sería capaz de transmitir los archivos multimedia
- Del mismo modo, si tuviera que usar
curl
para recuperar los archivos de un servidor nginx, ya que nicurl
ni nginx hablan RTSP, se trataría como una descarga de archivos
- Del mismo modo, si tuviera que usar
- Pero, cuando alojo un archivo MP4 de un servidor de transmisión de medios (VideoLAN, Red5, Wowza, etc.), y uso un cliente RTSP (o cualquier cliente de transmisión de medios compatible) para solicitar una transmisión de ese servidor, ese entonces y solo a continuación, haga algún real de streaming se producen
- Por lo tanto, a pesar de que los "videos" de YouTube o Vimeo están alojados en páginas HTML servidas a través de HTTP (S) por servidores HTTP, supongo que los reproductores de video incrustados en esas páginas (que son donde realmente se reproducen los videos) en realidad están comenzando un segundo , conexión posterior a un servidor de transmisión y la transmisión se produce a través de RTSP o algún otro protocolo que no sea HTTP
Así que eso es lo que entiendo, y supongo que primero pediría que si algo de lo que he dicho anteriormente es incorrecto, ¡ comience por corregirme! Asumiendo que soy más o menos correcto:
¿Cómo los reproductores de medios de transmisión, que se ejecutan dentro de páginas HTML y son atendidos por servidores HTML, establecen conexiones de transmisión (RTSP, etc.) con servidores de medios de transmisión (que atienden solicitudes RTSP)?
Respuestas:
Aplicaciones comunes
RTSP actualmente parece usarse más con aplicaciones / interfaces de dispositivos que transmiten directamente en vivo (por ejemplo, cámara IP) o retransmiten (como un motor) que para transmitir archivos multimedia guardados desde una ubicación física a través de una interfaz de reproducción web HTTP con jugador incrustado
Parece que RTSP es un protocolo con estado y usa UDP más que TCP cuando se transmite, y se usa más como un dispositivo de servidor (como una cámara IP) que está conectado a una red TCP / IP y alimenta las transmisiones a través de UDP, etc. Luego se conecta a estos feeds (el servidor) como el cliente en la misma red y puede emitir solicitudes RTSP para utilizar en consecuencia.
Flujo lógico
La forma en que entiendo el flujo de transmisión de medios en este formulario es:
Consulte la sección Tecnologías de transmisión a continuación para obtener una comparación general de HTTP versus RTSP.
además
En las siguientes 10 razones por las que nunca deberías alojar tus propios videos , he citado las partes que llegan al punto para ayudarte a responder tu pregunta en "general" sin ser demasiado específico.
Esencialmente dice que el sitio web que tiene los controles del reproductor multimedia incorporado:
fuente
Trataré a continuación principalmente su pregunta de lo que sucede cuando se muestra un video en el navegador. El tema es amplio, por lo que solo tocaré los elementos relevantes.
HTML5 ha introducido la
<VIDEO>
etiqueta que resolvió el problema de integrar el video que se muestra en el navegador al usar JavaScript y CSS. La<OBJECT>
etiqueta anterior requería software externo y estaba mal integrada con la página. La nueva etiqueta en efecto requería que el navegador también se convirtiera en un reproductor de video, aunque no se impusieron estándares. El resultado fue una fragmentación total de los estándares, para lo cual la única solución es que el servidor de video pondrá a disposición varios formatos de video y que todas estas fuentes alternativas se especificarán en la<VIDEO>
etiqueta, de la cual el navegador elegirá la que admite.Un ejemplo de una etiqueta con múltiples fuentes:
La
<VIDEO>
etiqueta en sí es independiente del protocolo, por lo que puede usar cualquier protocolo compatible con el navegador, incluido RTSP. El soporte para el protocolo MPEG-DASH (Dynamic Adaptive Streaming over HTTP) se ha vuelto muy completo últimamente, por lo que se reproducirá en la mayoría de los dispositivos y navegadores nativos, o usando HTML5, lo que significa que no se requieren complementos adicionales. Consulte esta tabla de compatibilidad de dispositivos y navegadores . Consulte también este artículo de Mozilla para preparar su servidor para servir MPEG-DASH. DASH funciona a través de HTTP, por lo que funcionará siempre que su servidor HTTP admita solicitudes de rango de bytes y esté configurado para servir archivos .mpdmimetype="application/dash+xml"
.La interacción normal entre el cliente y el servidor es similar a la siguiente. Para HTML5 VIDEO, el navegador también es el reproductor, aunque puede abrir una nueva conexión para jugar.
La conexión inicial proporciona los metadatos que el cliente usa para mostrar el video. Si se utilizó el protocolo RTSP para obtener esos metadatos, luego se crea una conexión RTP para transferir los datos de video + audio. El protocolo RTCP se usa para transferir comandos adicionales al servidor.
RTP, RTCP y RTSP operan en diferentes puertos. Por lo general, cuando RTP está en el puerto N, RTCP está en el puerto N + 1. Una sesión RTP puede contener múltiples flujos para ser combinados al final del receptor; por ejemplo, el audio y el video pueden estar en canales separados.
Para que nadie quede bloqueado de su contenido, debe poner a disposición códecs libres de regalías, webM o Theora, y video H.264, y audio Vorbis y MP3. (Fácil, difícil de hacer).
Esto es lo que sucede en detalle para RTSP:
El cliente establece una conexión TCP a los servidores, generalmente en el puerto TCP 554, el conocido puerto para RTSP.
Luego, el cliente comenzará a emitir una serie de comandos de encabezado RTSP que tienen un formato similar a HTTP, cada uno de los cuales es reconocido por el servidor. Dentro de estos comandos RTSP, el cliente describirá al servidor los detalles de los requisitos de la sesión, como la versión de RTSP que admite, el transporte que se utilizará para el flujo de datos y cualquier información de puerto UDP o TCP asociado. Esta información se pasa usando los encabezados DESCRIBE y SETUP y se aumenta en la respuesta del servidor con una ID de sesión que el cliente y cualquier dispositivo proxy transitorio pueden usar para identificar la secuencia en intercambios posteriores.
Una vez que se haya completado la negociación de los parámetros de transporte, el cliente emitirá un comando PLAY para indicar al servidor que comience la entrega del flujo de datos RTP.
Una vez que el cliente decide cerrar la secuencia, se emite un comando de DESPLAZAMIENTO junto con la ID de sesión que indica al servidor que cese la entrega de RTP asociada con esa ID.
Otras lecturas :
fuente
Aquí hay una respuesta rápida y sucia.
Hay una diferencia entre reproducir videos en la web y transmitirlos en tiempo real.
La reproducción se realiza por medio de un reproductor que está incluido en la página web (podría estar usando flash, JS o un objeto de video html5). El cliente (navegador) descarga este reproductor y lo ejecuta. El reproductor, a su vez, obtiene video de una simple URL de descarga. De hecho, incluso con Youtube, hay programas que le permiten acceder a los archivos de video alojados directamente y descargarlos como lo haría con cualquier archivo. Dado que el sistema usa un enlace de descarga antiguo regular, no hay necesidad de protocolos de transmisión complejos como RTSP
La transmisión en tiempo real (por ejemplo, desde una cámara web) es ... bueno, más complicada. Flash tiene esta funcionalidad incorporada, pero ya no debería usarse. El video HTML5 no admite la transmisión en tiempo real, pero las personas han podido "engañarlo" haciendo que el servidor de alojamiento de archivos cambie constantemente el archivo de video que ofrece.
fuente