Quando ouvi falar sobre streaming pela primeira vez, foi no contexto de transmissão ao vivo com uma webcam. Portanto, um host está transmitindo conteúdo de vídeo e o outro host está recebendo o conteúdo de vídeo. Então, isso está fluindo? Bem ... sim ... mas uma transmissão ao vivo é um conceito concreto, e acho que a pergunta se refere ao conceito abstrato de Streaming. Veja https://en.wikipedia.org/wiki/Live_streaming
Então vamos seguir em frente.
O vídeo não é o único recurso que pode ser transmitido. O áudio também pode ser transmitido. Então, agora estamos falando sobre streaming de mídia. Veja https://en.wikipedia.org/wiki/Streaming_media . O áudio pode ser entregue da fonte ao destino de várias maneiras. Então, vamos comparar alguns métodos de entrega de dados entre si.
Download de arquivo clássico O download de arquivo
clássico não acontece em tempo real. Antes de usar o arquivo, você deverá aguardar a conclusão do download.
Download
progressivo Os blocos de download progressivo baixam dados do arquivo de mídia transmitido para um buffer temporário. Os dados nesse buffer são viáveis: os dados de áudio e vídeo no buffer são reproduzíveis. Por esse motivo, os usuários podem assistir / ouvir o arquivo de mídia transmitido durante o download. É possível avançar e retroceder rapidamente, fora do curso dentro do buffer. De qualquer forma, o download progressivo não é uma transmissão ao vivo.
Streaming
Acontece em tempo real e agrupa dados. O streaming é implementado em transmissões ao vivo. Os clientes que estão ouvindo a transmissão não podem avançar ou retroceder rapidamente. Nos fluxos de vídeo, os dados são descartados após a reprodução.
Um servidor de streaming mantém uma conexão bidirecional com seu cliente, enquanto um servidor da Web fecha a conexão após uma resposta do servidor.
Áudio e vídeo não são a única coisa que pode ser transmitida. Vamos dar uma olhada no conceito de fluxos no manual do PHP.
um fluxo é um objeto de recurso que exibe um comportamento flexível. Ou seja, ele pode ser lido ou gravado de maneira linear e pode ser capaz de buscar () em um local arbitrário no fluxo. Link: https://www.php.net/manual/en/intro.stream.php
No PHP, um recurso é uma referência a uma fonte externa, como um arquivo, conexão com o banco de dados. Portanto, em outras palavras, um fluxo é uma fonte que pode ser lida ou gravada. Então, se você trabalhou com fopen()
, então você já trabalhou com fluxos.
Um exemplo de um arquivo de texto que está sujeito a streaming:
// Let's say that cheese.txt is a file that contains this content:
// I like cheese, a lot! My favorite cheese brand is Leerdammer.
$fp = fopen('cheese.txt', 'r');
$str8 = fread($fp, 8); // read first 8 characters from stream.
fseek($fp, 21); // set position indicator from stream at the 21th position (0 = first position)
$str30 = fread($fp, 30); // read 30 characters from stream
echo $str8; // Output: I like c
echo $str30; // Output: My favorite cheese brand is L
Arquivos zip também podem ser transmitidos. Além disso, o streaming não se limita a arquivos. As conexões HTTP, FTP, SSH e Entrada / Saída também podem ser transmitidas.
O que a wikipedia diz sobre o conceito de Streaming?
Na ciência da computação, um fluxo é uma sequência de elementos de dados disponibilizados ao longo do tempo. Um fluxo pode ser considerado como itens em uma correia transportadora sendo processados um de cada vez, e não em grandes lotes.
Veja: https://en.wikipedia.org/wiki/Stream_%28computing%29 .
Os links da Wikipedia para isso: https://srfi.schemers.org/srfi-41/srfi-41.html
e os escritores têm isso a dizer sobre fluxos:
Os fluxos, às vezes chamados de listas preguiçosas, são uma estrutura de dados seqüencial contendo elementos computados somente sob demanda. Um fluxo é nulo ou é um par com um fluxo em seu cdr. Como os elementos de um fluxo são computados apenas quando acessados, os fluxos podem ser infinitos.
Portanto, um fluxo é realmente uma estrutura de dados.
Minha conclusão: um fluxo é uma fonte que pode conter dados que podem ser lidos ou gravados de maneira seqüencial. Um fluxo não lê tudo o que a fonte contém de uma só vez, lê / grava sequencialmente.
Links úteis:
- http://www.slideshare.net/auroraeosrose/writing-and-using-php-streams-and-sockets-zendcon-2011 Fornece uma apresentação muito clara
- https://www.sk89q.com/2010/04/introduction-to-php-streams/
- http://www.netlingo.com/word/stream-or-streaming.php
- http://www.brainbell.com/tutorials/php/Using_PHP_Streams.htm
- http://www.sitepoint.com/php-streaming-output-buffering-explained/
- http://php.net/manual/en/wrappers.php
- http://www.digidata-lb.com/streaming/Streaming_Proposal.pdf
- http://www.webopedia.com/TERM/S/streaming.html
- https://en.wikipedia.org/wiki/Stream_%28computing%29
- https://srfi.schemers.org/srfi-41/srfi-41.html