Estou criando um aplicativo Web que deve reproduzir um fluxo RTSP / RTP a partir de um servidor http://lscube.org/projects/feng .
A tag de vídeo / áudio HTML5 suporta rtsp ou rtp? Caso contrário, qual seria a solução mais fácil? Talvez vá para um plugin VLC ou algo assim.
Respostas:
Tecnicamente 'Sim'
(mas não realmente...)
A
<video>
tag do HTML 5 é independente de protocolo - não importa. Você coloca o protocolo nosrc
atributo como parte da URL. Por exemplo:ou talvez
Dito isto, a implementação da
<video>
tag é específica do navegador. Como é cedo para o HTML 5, espero mudar frequentemente o suporte (ou falta de suporte).Na especificação HTML5 do W3C ( o elemento de vídeo ):
fonte
GET rtp://239.255.0.1:6970 net::ERR_UNKNOWN_URL_SCHEME
. Parece que apenas esquemas HTTP [S] são permitidos emvideo
elementos.Acho que o espírito da pergunta não foi realmente respondido. Não, você não pode usar uma tag de vídeo para reproduzir fluxos rtsp a partir de agora. A outra resposta sobre o link para o "nunca" do Chromium é enganosa, pois o thread / resposta vinculado não se refere diretamente ao Chrome tocando rtsp por meio da tag de vídeo. Leia todo o tópico vinculado, especialmente os comentários na parte inferior e os links para outros tópicos.
A resposta real é esta: Não, você não pode simplesmente colocar uma tag de vídeo em uma página html 5 e reproduzir rtsp. Você precisa usar uma biblioteca Javascript de algum tipo (a menos que queira começar a jogar coisas com players flash e silverlight) para reproduzir vídeo streaming. {IMHO} Na velocidade da discussão e implementação do vídeo html 5, os vários fornecedores de padrões de vídeo proprietários não estão interessados em ajudar a avançar, por isso não conte com a facilidade prometida de uso da tag de vídeo, a menos que os fabricantes do navegador se encarregam de resolver de alguma forma o problema ... novamente, não é provável. {/ IMHO}
fonte
Esta é uma pergunta antiga, mas eu tive que fazer isso sozinho recentemente e consegui algo funcionando assim (além de respostas como a minha me pouparia algum tempo): Basicamente, use o ffmpeg para alterar o contêiner para HLS, a maioria do fluxo IPCams h264 e alguns tipo básico de PCM, use algo assim:
Em seguida, use o video.js com o plug-in HLS. Isso reproduzirá muito bem a transmissão ao vivo. Também há um exemplo do jsfiddle no segundo link).
Nota: embora este não seja um suporte nativo, não requer nada extra no frontend do usuário.
fonte
ffmpeg -v info -rtsp_transport tcp -i rtsp://host:port/[sdp] -c:v copy -c:a copy -maxrate 400k -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
ffmpeg.exe -fflags nobuffer -rtsp_transport tcp -i rtsp://[SOURCE] -flags +cgop -g 30 -hls_flags delete_segments [DESTINATION]
O Chrome nunca implementará suporte ao streaming RTSP.
Pelo menos, nas palavras de um desenvolvedor de Chromium aqui :
fonte
Existem três protocolos / tecnologia de streaming em HTML5:
Transmissão ao vivo, baixa latência - WebRTC - Websocket
VOD e transmissão ao vivo, alta latência - HLS
1. WebRTC
De fato, o WebRTC é SRTP (protocolo RTP seguro). Assim, podemos dizer que a tag de vídeo suporta RTP (SRTP) indiretamente via WebRTC.
Portanto, para obter o fluxo RTP no seu Chrome, Firefox ou outro navegador HTML5, você precisa de um servidor WebRTC que entregue o fluxo SRTP ao navegador.
2. Websocket
É baseado em TCP, mas com menor latência que o HLS. Novamente, você precisa de um servidor Websocket.
3. HLS
Protocolo de streaming de alta latência mais popular para VOD (vídeo pré-gravado).
fonte
Com o VLC, sou capaz de transcodificar um fluxo RTSP ao vivo (mpeg4) para um fluxo HTTP no formato OGG (Vorbis / Theora). A qualidade é ruim, mas o vídeo funciona no Chrome 9. Também testei com um trancoding no WEBM (VP8), mas não parece funcionar (o VLC tem a opção, mas não sei se ele realmente foi implementado por enquanto. .)
O primeiro a ter um documento sobre isso deve nos notificar;)
fonte
"C:\Program Files\VideoLAN\VLC\vlc.exe" -I dummy screen:// :screen-fps=16.000000 :screen-caching=100 :sout=#transcode{vcodec=theo,vb=800,scale=1,width=600,height=480,acodec=mp3}:http{mux=ogg,dst=127.0.0.1:8080/desktop.ogg} :no-sout-rtp-sap :no-sout-standard-sap :ttl=1 :sout-keep
- este é o comando VLC que flui a sua entrada (por exemplo, dispositivo de captura de tela) para um fluxo de dados de saída (por exemplo 127.0.0.1:8080/desktop.ogg )<video id="video" src="http://localhost:8080/desktop.ogg" autoplay="autoplay">
.my_ip:port
endereço e do que eu costumava HTML5<video>
tag como esta:<video width="640"><source src="http://my_ip:port/test" type="video/ogg">HTML5 not supported</video>
.Minhas observações sobre a tag de vídeo HTML 5 e os fluxos rtsp (rtp) são que ele só funciona com o konqueror (KDE 4.4.1, Phonon-backend definido como GStreamer). Eu recebi apenas vídeo (sem áudio) com um fluxo H.264 / AAC RTSP (RTP).
Os fluxos de http://media.esof2010.org/ não funcionaram com o konqueror (KDE 4.4.1, Phonon-backend definido como GStreamer).
fonte
O Chrome não implementa suporte ao streaming RTSP. Um projeto importante para verificar o WebRTC.
"O WebRTC é um projeto aberto e gratuito que fornece aos navegadores e aplicativos móveis recursos de Comunicação em Tempo Real (RTC) por meio de APIs simples"
Navegadores suportados:
Chrome, Firefox e Opera.
Plataformas móveis suportadas:
Android e IOS
http://www.webrtc.org/
fonte