Streaming vía RTSP o RTP en HTML5
Estoy creando una aplicación web que debería reproducir una transmisión RTSP/RTP desde un servidor http://lscube.org/projects/feng .
¿La etiqueta de vídeo/audio HTML5 es compatible con rtsp o rtp? Si no, ¿cuál sería la solución más sencilla? Quizás baje a un complemento VLC o algo así.
Técnicamente 'Sí'
(pero no realmente...)
La etiqueta de HTML 5 <video>
es independiente del protocolo, no le importa. Coloca el protocolo en el src
atributo como parte de la URL. P.ej:
<video src="rtp://myserver.com/path/to/stream">
Your browser does not support the VIDEO tag and/or RTP streams.
</video>
o tal vez
<video src="http://myserver.com:1935/path/to/stream/myPlaylist.m3u8">
Your browser does not support the VIDEO tag and/or RTP streams.
</video>
Dicho esto, la implementación de la <video>
etiqueta es específica del navegador. Dado que HTML 5 es temprano, espero que el soporte cambie con frecuencia (o la falta de soporte).
De la especificación HTML5 del W3C ( El elemento de video ):
Los agentes de usuario pueden admitir cualquier códec y formato contenedor de vídeo y audio.
Creo que el espíritu de la pregunta no fue realmente respondido. No, no puedes usar una etiqueta de video para reproducir transmisiones rtsp a partir de ahora. La otra respuesta con respecto al enlace al "nunca" del chico de Chromium es un poco engañosa ya que el hilo/respuesta vinculado no se refiere directamente a que Chrome reproduzca rtsp a través de la etiqueta de video. Lea todo el hilo vinculado, especialmente los comentarios al final y los enlaces a otros hilos.
La verdadera respuesta es esta: No, no puedes simplemente poner una etiqueta de video en una página HTML 5 y reproducir rtsp. Necesitas usar una biblioteca Javascript de algún tipo (a menos que quieras comenzar a reproducir cosas con reproductores flash y Silverlight) para reproducir video en tiempo real. {En mi humilde opinión} Al ritmo que avanza la discusión e implementación del video html 5, los diversos proveedores de estándares de video propietarios no están interesados en ayudar a que esto avance, así que no cuenten con la prometida facilidad de uso de la etiqueta de video a menos que los fabricantes de navegadores encargarse de resolver el problema de alguna manera... repito, no es probable.{/En mi humilde opinión}
Esta es una pregunta antigua, pero tuve que hacerlo yo mismo recientemente y logré algo que funcionara (además de una respuesta como la mía me ahorraría algo de tiempo): Básicamente use ffmpeg para cambiar el contenedor a HLS, la mayoría de las cámaras IP transmiten h264 y algunas tipo básico de PCM, así que use algo como eso:
ffmpeg -v info -i rtsp://ip:port/h264.sdp -c:v copy -c:a copy -bufsize 1835k -pix_fmt yuv420p -flags -global_header -hls_time 10 -hls_list_size 6 -hls_wrap 10 -start_number 1 /var/www/html/test.m3u8
Luego use video.js con el complemento HLS. Esto reproducirá bien la transmisión en vivo. También hay un ejemplo de jsfiddle en el segundo enlace).
Nota: aunque este no es un soporte nativo, no requiere nada adicional en la interfaz del usuario.
Hay tres protocolos/tecnología de transmisión en HTML5:
Transmisión en vivo, baja latencia - WebRTC - Websocket
VOD y streaming en vivo, alta latencia - HLS
1.WebRTC
De hecho, WebRTC es SRTP (protocolo RTP seguro). Por lo tanto, podemos decir que la etiqueta de video admite RTP (SRTP) indirectamente a través de WebRTC.
Por lo tanto, para obtener transmisión RTP en su Chrome, Firefox u otro navegador HTML5, necesita un servidor WebRTC que entregue la transmisión SRTP al navegador.
2. Enchufe web
Está basado en TCP, pero con menor latencia que HLS. Nuevamente necesitas un servidor Websocket.
3. SHL
El protocolo de transmisión de alta latencia más popular para VOD (vídeo pregrabado).