Então, eu sou um engenheiro de software tentando entender alguns detalhes básicos sobre como a mídia de streaming funciona. Passei a maior parte do dia tentando entender os vários codecs, formatos de contêiner e protocolos de streaming que são pertinentes ao meu aplicativo. Até agora, aqui está o meu entendimento de como funciona, que pode muito bem ser enganado:
- A mídia de streaming realmente se resume ao formato do contêiner e ao protocolo de streaming :
- Todos os dados de áudio são codificados (via codec de áudio) em um fluxo de bits de áudio
- Todos os dados de vídeo são codificados (novamente, via codec) em um fluxo de bits de vídeo
- Os dois fluxos são mesclados ( multiplexados? ) Em um contêiner que acaba se tornando um arquivo (como MP4, etc.)
- Um servidor de mídia especial serve esse contêiner (arquivo MP4 ou algum outro formato) para um cliente (talvez um player de vídeo HTML5 sendo executado no navegador de alguém) por meio de algum protocolo de streaming padrão, como o RTSP
- No caso de um cliente de navegador, presumo que o próprio navegador tenha um cliente RTSP que, de alguma forma, apresente aos usuários o HTML5 Video Player
- Eu poderia hospedar um arquivo MP4 de um servidor da web , como nginx ou httpd, mas como esses servidores não são servidores RTSP, apenas seria possível tratar solicitações para o MP4 como solicitações de download e, portanto, não conseguiria transmitir o arquivo arquivos de mídia
- Da mesma forma, se eu fosse
curl
buscar os arquivos de um servidor nginx, já quecurl
nem o nginx falam RTSP, ele seria tratado como um download de arquivo
- Da mesma forma, se eu fosse
- Mas, quando eu hospedo um arquivo MP4 de um servidor de mídia de streaming (VideoLAN, Red5, Wowza etc.), e uso um cliente RTSP (ou qualquer outro cliente de mídia de streaming compatível) para solicitar um fluxo desse servidor, que então e somente em seguida, faz qualquer real streaming de ocorrer
- Portanto, mesmo que os "vídeos" do YouTube ou Vimeo estejam hospedados em páginas HTML veiculadas em HTTP (S) por servidores HTTP, presumo que os reprodutores de vídeo incorporados nessas páginas (onde os vídeos realmente são reproduzidos) estão realmente começando um segundo , conexão subseqüente a um servidor de streaming e o streaming está ocorrendo através de RTSP ou outro protocolo não HTTP
Portanto, esse é o meu entendimento, e acho que pediria primeiro que, se algo que afirmei acima estiver incorreto, comece me corrigindo! Supondo que eu esteja mais ou menos correto:
Como os players de mídia de streaming, executados em páginas HTML e servidos por servidores HTML, estabelecem conexões de streaming (RTSP, etc.) com servidores de mídia de streaming (atendendo solicitações de RTSP)?
Respostas:
Aplicações comuns
RTSPAtualmente, o parece ser usado mais com interfaces de aplicativos / dispositivos que transmitem diretamente ao vivo (por exemplo, câmera IP) ou retransmitem (como um mecanismo) do que para transmitir arquivos de mídia salvos de um local físico por meio de uma interface de reprodução na Web HTTP com uma interface de reprodução HTTP. player incorporado.
Parece que o RTSP é um protocolo estável e usa UDP mais do que TCP ao transmitir, e é usado mais como um dispositivo de servidor (como uma câmera IP) conectado a uma rede TCP / IP e que transmite fluxos via UDP, etc. Em seguida, você se conecta a esses feeds (o servidor) como o cliente na mesma rede e pode emitir solicitações RTSP para utilizar de acordo.
Fluxo Lógico
A maneira como entendo o fluxo de mídia de streaming neste formulário é:
Consulte a seção Tecnologias de streaming abaixo para obter uma comparação geral de HTTP versus RTSP.
além disso
Nas 10 razões abaixo, você nunca deve hospedar seus próprios vídeos , citei as partes que chegam ao ponto de ajudar a responder sua pergunta em "geral" sem ser muito específico.
Essencialmente, ele diz que o site que possui o media player incorporado controla:
fonte
A seguir, tratarei principalmente da sua pergunta sobre o que acontece quando um vídeo é exibido no navegador. O assunto é vasto, por isso só tocarei nos itens relevantes.
O HTML5 introduziu a
<VIDEO>
tag que resolveu o problema de integrar o vídeo exibido no navegador ao usar JavaScript e CSS. A<OBJECT>
tag anterior exigia software externo e estava mal integrada à página. A nova tag em vigor exigia que o navegador também se tornasse um player de vídeo, embora nenhum padrão fosse imposto. O resultado foi uma fragmentação total dos padrões, para a qual a única solução é que o servidor de vídeo disponibilize vários formatos de vídeo e que todas essas fontes alternativas sejam especificadas na<VIDEO>
tag, na qual o navegador escolherá o que ele suporta.Um exemplo de uma tag com várias fontes:
A
<VIDEO>
tag em si é independente de protocolo, portanto, pode usar qualquer protocolo suportado pelo navegador, incluindo o RTSP. Ultimamente, o suporte ao protocolo MPEG-DASH (Dynamic Adaptive Streaming over HTTP) tornou-se muito abrangente, sendo reproduzido na maioria dos dispositivos e navegadores nativos ou usando HTML5, o que significa que nenhum plug-in extra é necessário. Consulte esta tabela de compatibilidade de dispositivos e navegadores . Consulte também este artigo da Mozilla para preparar seu servidor para servir MPEG-DASH. O DASH funciona via HTTP; portanto, isso funcionará desde que o servidor HTTP suporte solicitações de intervalo de bytes e esteja configurado para veicular arquivos .mpd commimetype="application/dash+xml"
.A interação normal entre cliente e servidor é semelhante à seguinte. Para o HTML5 VIDEO, o navegador também é o reprodutor, embora possa abrir uma nova conexão para reprodução.
A conexão inicial fornece os metadados que o cliente usa para exibir o vídeo. Se o protocolo RTSP foi usado para obter esses metadados, uma conexão RTP é criada posteriormente para transferir os dados de vídeo + áudio. O protocolo RTCP é usado para transferir comandos adicionais para o servidor.
RTP, RTCP e RTSP todos operam em portas diferentes. Normalmente, quando o RTP está na porta N, o RTCP está na porta N + 1. Uma sessão RTP pode conter múltiplos fluxos a serem combinados no final do receptor; por exemplo, áudio e vídeo podem estar em canais separados.
Para que ninguém fique bloqueado no seu conteúdo, você deve disponibilizar codecs isentos de royalties, webM ou Theora e vídeo H.264 e áudio Vorbis e MP3. (Fácil, difícil de fazer.)
É o que acontece em detalhes para o RTSP:
O cliente estabelece uma conexão TCP com os servidores, normalmente na porta TCP 554, a porta conhecida para RTSP.
O cliente começará a emitir uma série de comandos de cabeçalho RTSP que têm um formato semelhante ao HTTP, sendo que cada um é reconhecido pelo servidor. Dentro desses comandos RTSP, o cliente descreverá para o servidor detalhes dos requisitos da sessão, como a versão do RTSP que ele suporta, o transporte a ser usado para o fluxo de dados e qualquer informação de porta UDP ou TCP associada. Essas informações são transmitidas usando os cabeçalhos DESCRIBE e SETUP e são aumentadas na resposta do servidor com um ID de sessão que o cliente e qualquer dispositivo proxy transitório podem usar para identificar o fluxo em trocas adicionais.
Após a conclusão da negociação dos parâmetros de transporte, o cliente emitirá um comando PLAY para instruir o servidor a iniciar a entrega do fluxo de dados RTP.
Depois que o cliente decide fechar o fluxo, um comando TEARDOWN é emitido junto com o ID da sessão instruindo o servidor a interromper a entrega RTP associada a esse ID.
Leitura adicional:
fonte
Aqui está uma resposta rápida e suja:
Há uma diferença entre reproduzir um vídeo na Web e transmiti-lo em tempo real.
A reprodução é feita por meio de um player incluído na página da web (pode estar usando flash, JS ou um objeto de vídeo html5). O cliente (navegador) baixa esse player e o executa. O player, por sua vez, busca o vídeo a partir de um simples URL de download. De fato, mesmo com o Youtube, existem programas que permitem acessar diretamente os arquivos de vídeo hospedados e baixá-los como faria com qualquer arquivo. Como o sistema usa um link de download antigo e regular, não há necessidade de protocolos de streaming complexos, como o RTSP
O streaming em tempo real (por exemplo, de uma webcam) é ... bem, mais complicado. O Flash possui essa funcionalidade incorporada, mas não deve mais ser usada. O vídeo HTML5 não suporta streaming em tempo real, mas as pessoas conseguem "enganá-lo", fazendo com que o servidor de hospedagem de arquivos altere constantemente o arquivo de vídeo que ele oferece.
fonte