Tópicos
Áudio
O áudio é codificado como um sinal analógico e enviado a um rate constante. Este rate é ditado pelo número de samples enviadas num dado segundo. Cada sample é quantizada (convertida em dados digitais) e representada em bits.
Ou seja, se um dado áudio for amostrado a 16000 vezes por segundo e cada amostra for quantizada em 1024 níveis, termos que a taxa de bits resultante será igual a:
Streaming
No caso de streaming puro, o playout do vídeo pode começar antes do ficheiro ser completamente transferido, até porque o ficheiro é recebido de forma contínua.
No caso de vídeos guardados num servidor, a transmissão do mesmo poderá ocorrer mais rapidamente do que o que pode ser renderizado pelo cliente final, implicando mecanismos adicionais de buffering do lado deste.
A linha a vermelho representa o rate a que o vídeo está a ser transmitido (e o tempo em que aconteceu); a linha a preto o rate a que o vídeo está a ser recebido e a linha a azul o rate a que o vídeo está a ser tocado. De facto, existe algum delay entre os três processos.
O que importa ressaltar aqui é que quando o rate de playout do vídeo é inferior ao rate de receção, pode acontecer de estarmos a dar playout ao mesmo tempo que recebemos informação futura do vídeo. Esta informação deverá ser, portanto, buffered.
UDP
O envio de streams pode ser feito diretamente com recurso ao protocolo UDP. Neste caso, o servidor envia o vídeo num rate apropriado ao cliente. Resultando num quase perfeito playout do vídeo, se não considerarmos o congestionamento da rede.
No entanto, fatores como a correção de erros (se necessária) e o reenvio de pacotes perdidos (novamente, se necessário) terá de ser feito ao nível aplicacional.
HTTP
Aqui, utiliza-se o protocolo HTTP já existente e bem estabelecido para solicitar o ficheiro, através de um GET. Internamente, é utilizado o protocolo TCP que divide o ficheiro em chunks.
A reposição do vídeo (saltar para uma parte específica do ficheiro) requer que um novo GET seja feito, por parte do cliente, com o offset desejado.
DASH
Como já relatado anteriormente, este é um protocolo assente no HTTP, mas com a possibilidade de transmitir a diferentes rates.
O servidor tem o papel de dividir o ficheiro em múltiplos chunks, e fazer o respetivo encoding, a diferentes rates, de cada. A localização de um chunk a um certo rate encontra-se no ficheiro de manifesto providenciado pelo servidor.
O cliente tem o papel de medir periodicamente a largura de banda na sua ligação com o servidor, ajustando-a, se necessário. Dessa forma, pode ir pedindo chunks ao rate (variável) que mais lhe convém.
VoIP
Tecnologia, cima da camada de transporte, que permite a transmissão de áudio (voz) em tempo real através de redes baseadas no protocolo IP. Baseada em duas componentes: uma de inicialização e uma de gestão do transporte de voz.
Neste caso, um maior delay (ou jitter) é bastante percetível, então deverá existir um cuidado redobrado para minimizá-lo.
Em relação a perdas, se não forem significativas (1-10%), não são muito impactantes.
Adaptive Playout Delay
Técnica utilizada em VoIP para ajustar dinamicamente o tempo de reprodução dos pacotes de áudio recebidos, como forma de obter um equilíbrio entre a latência e a perda de pacotes.
Isto pois, se o atraso de reprodução for muito curto (baixa latência), os pacotes podem não chegar a tempo causando mais perdas. Se for muito longo, a comunicação torna-se menos interativa.
O atraso estimado para um pacote qualquer i é dado pela seguinte fórmula: Para o primeiro pacote, o atraso é calculado de forma diferente: Onde é o delay do pacote, calculado com base na diferença entre a timestamp na origem e a timestamp no destino. é um valor estimado como o jitter inicial.
Perda de pacotes
Como prevenção de perda de pacotes, é utilizada uma técnica de correção de erro antecipada (FEC), que consiste em adicionar redundância aos pacotes enviados.
Por exemplo, para cada grupo de N pacotes, um pacote individual (redundante) é criado. Este pacote é gerado a partir do XOR dos N pacotes originais.
No entanto, a recuperação é limitada e permite apenas uma perda por bloco de N + 1 pacotes.