0 оценок0% нашли этот документ полезным (0 голосов)
26 просмотров9 страниц
Neste laboratório, você implementará um servidor de streaming vídeo e cliente que se comunica usando o protocolo de fluxo contínuo em tempo real (RTSP) e envia dados usando o protocolo de tempo real (RTP). Sua tarefa é implementar o protocolo RTSP no cliente e implementar o empacotamento RTP no servidor.
Forneceremos o código que implementa o protocolo RSTP no servidor, o desempacotamento RTP no cliente e trataremos de exibir o vídeo transmitido. Você não precisa mexer neste código.
Neste laboratório, você implementará um servidor de streaming vídeo e cliente que se comunica usando o protocolo de fluxo contínuo em tempo real (RTSP) e envia dados usando o protocolo de tempo real (RTP). Sua tarefa é implementar o protocolo RTSP no cliente e implementar o empacotamento RTP no servidor.
Forneceremos o código que implementa o protocolo RSTP no servidor, o desempacotamento RTP no cliente e trataremos de exibir o vídeo transmitido. Você não precisa mexer neste código.
Neste laboratório, você implementará um servidor de streaming vídeo e cliente que se comunica usando o protocolo de fluxo contínuo em tempo real (RTSP) e envia dados usando o protocolo de tempo real (RTP). Sua tarefa é implementar o protocolo RTSP no cliente e implementar o empacotamento RTP no servidor.
Forneceremos o código que implementa o protocolo RSTP no servidor, o desempacotamento RTP no cliente e trataremos de exibir o vídeo transmitido. Você não precisa mexer neste código.
Descrio da tarefa de programao a ser feita na disciplina de Redes de Alto
Desempenho (RAD) SSC-144. Turmas A e B. A tarefa de programao referente ao Captulo 7 do Livro: Redes de Computadores e a Internet: Uma abordagem top-down. (Kurose & Rosss, 2006).
Streaming vdeo com RTSP e RTP 1. O cdigo Neste laboratrio, voc implementar um servidor de streaming vdeo e cliente que se comunica usando o protocolo de fluxo contnuo em tempo real (RTSP) e envia dados usando o protocolo de tempo real (RTP). Sua tarefa implementar o protocolo RTSP no cliente e implementar o empacotamento RTP no servidor. Forneceremos o cdigo que implementa o protocolo RSTP no servidor, o desempacotamento RTP no cliente e trataremos de exibir o vdeo transmitido. Voc no precisa mexer neste cdigo. 2. Classes Existem quatro classes nesta tarefa. Client Esta classe implementa o cliente e a interface de usurio que voc usar para enviar comandos RTSP e que ser utilizada para exibir o vdeo. Abaixo vemos como a interface. Voc dever implementar as aes que so tomadas quando os botes so pressionados. Server Esta classe implementa o servidor que responde s requisies RTSP e encaminha o vdeo de volta. A interao RTSP j est implementada e o servidor chama as rotinas na classe RTPpacket para empacotar os dados de vdeo. Voc no precisa mexer nesta classe. RTPpacket Esta classe usada para manipular os pacotes RTP. Ela possui rotinas separadas para tratar os pacotes recebidos no lado cliente que j dado e voc no precisa modific-lo (mas veja os Exerccios opcionais). Voc dever completar o primeiro construtor desta classe para implementar o empacotamento RTP dos 2 dados de vdeo. O segundo construtor usado pelo cliente para desempacotar os dados. Voc no precisa modific-lo tambm. VideoStream Esta classe usada para ler os dados de vdeo do arquivo em disco. Voc no precisa modificar esta classe. 3. Executando o cdigo Aps completar o cdigo, voc pode execut-lo da seguinte forma: Primeiro, inicie o servidor com o comando: java Server server_port onde server_port a porta onde seu servidor escuta as conexes RTSP que chegam. A porta RTSP padro a 554, mas voc deve escolher um nmero de porta maior que 1024. Ento, inicie o cliente com o comando: java Client server_name server_port video_file onde server_name o nome da mquina onde o servidor est sendo executado, server_port a porta que o servidor est escutando, e video_file o nome do arquivo que voc quer requisitar (fornecemos um arquivo de exemplo movie.Mjpeg). O formato do arquivo est descrito no Apndice. O cliente abre uma conexo com o servidor e abre uma janela como esta:
3 Voc pode enviar comandos RTSP para o servidor pressionando os botes. Uma interao normal RTSP acontece assim: 1. O cliente envia SETUP. Esse comando usado para ajustar os parmetros de sesso e de transporte. 2. O cliente envia PLAY. Isso inicia a reproduo. 3. O cliente pode enviar PAUSE se ele quiser pausar durante a reproduo. 4. O cliente envia TEARDOWN. Isso termina a sesso e fecha a conexo. O servidor sempre responde a todas as mensagens que o cliente envia. Os cdigos de resposta so exatamente os mesmos do HTTP. O cdigo 200 indica que a requisio foi bem-sucedida. Neste laboratrio, voc no precisa implementar nenhum outro cdigo de resposta. Para mais informaes sobre o RTSP, veja a RFC-2326.
4. Cliente Sua primeira tarefa implementar o RTSP do lado cliente. Para fazer isso, voc deve completar as funes que so chamadas quando o usurio clica nos botes da interface de usurio. Para cada boto na interface, h uma funo manipuladora do cdigo. Voc deve implementar as seguintes aes em cada funo manipuladora. Quando o cliente iniciado, ele tambm abre o socket RTSP para o servidor. Use este socket para enviar todas as requisies RTSP. SETUP Crie um socket para receber os dados RTP e ajustar o tempo de expirao no socket para 5 milissegundos. Envie uma requisio SETUP para o servidor. Voc deve inserir o cabealho de Transporte onde voc especificar a porta para o socket de dados RTP que voc criou. Leia a resposta do servidor e analise o cabealho de Sesso na resposta para obter o ID da sesso. 4 PLAY Envie uma requisio PLAY. Voc deve inserir o cabealho de sesso e usar o ID de sesso fornecido na resposta ao SETUP. No coloque cabealho de Transporte nesta requisio. Leia a resposta do servidor. PAUSE Envie uma requisio PAUSE. Voc deve inserir o cabealho de Sesso e usar o ID de sesso fornecido na resposta ao SETUP. No coloque cabealho de Transporte nesta requisio. Leia a resposta do servidor. TEARDOWN Envie uma requisio TEARDOWN. Voc deve inserir o cabealho de Sesso e usar o ID de sesso fornecido na resposta ao SETUP. No preciso colocar cabealho de Transporte neste requisio. Leia a resposta do servidor. Nota: Voc deve inserir o cabealho CSeq em cada requisio que voc enviar. O valor do cabealho CSeq um numero que ser incrementado de 1 a cada requisio que voc enviar.
Exemplo Aqui est uma interao de amostra entre cliente e servidor. As requisies dos clientes so marcadas com C: e as respostas dos servidores com S:. Neste laboratrio, tanto o cliente quanto o servidor so bem simples. Eles no precisam ter rotinas de anlise sofisticadas e esperam sempre encontrar os campos do cabealho na ordem que voc ver abaixo, ou seja, numa requisio, o primeiro cabealho o CSeq, e o segundo ou o de Transporte (para SETUP) ou o de Sesso (para todas as outras requisies). Na resposta, CSeq novamente o primeiro e de Sesso o segundo. C: SETUP movie.Mjpeg RTSP/1.0 C: CSeq: 1 C: Transport: RTP/UDP; client_port= 25000 5
S: RTSP/1.0 200 OK S: CSeq: 1 S: Session: 123456
C: PLAY movie.Mjpeg RTSP/1.0 C: CSeq: 2 C: Session: 123456
Estado do cliente Uma das diferenas entre HTTP e RTSP que no RTSP cada sesso possui um estado. Neste laboratrio, voc precisar manter o estado do cliente atualizado. O cliente muda 6 de estado quando ele recebe uma resposta do servidor de acordo com o seguinte diagrama.
5. Servidor No servidor, voc precisar implementar o empacotamento dos dados de vdeo em pacotes RTP. Para isso, ser necessrio criar o pacote, ajustar os campos no cabealho do pacote e copiar a carga til (exemplo: um quadro de vdeo) dentro do pacote. Quando o servidor recebe a requisio PLAY do cliente, ele aciona um temporizador que ativado a cada 100ms. Nesses tempos, o servidor ler um quadro de vdeo do arquivo e o enviar para o cliente. O servidor cria um objeto RTPpacket, que o encapsulamento RTP do quadro de vdeo. O servidor chama o primeiro construtor da classe RTPpacket para realizar o encapsulamento. Sua tarefa escrever essa funo. Voc precisar fazer o seguinte: (as letras em parnteses se referem aos campos no formato do pacote RTP abaixo) 1. Ajuste o campo RTP-version (V). Voc deve ajust-lo para 2. 2. Ajuste os campos padding (P), extension (X), number of contributing sources (CC), e marker (M). Todos eles so ajustados em zero neste laboratrio. 3. Ajuste o campo carga til (PT). Neste laboratrio, usamos MJPEG e o tipo para ele 26. 4. Ajuste o nmero de seqncia. O servidor fornece esse nmero de seqncia como argumento Framenb para o construtor. 5. Ajuste a marca de tempo. O servidor fornece este nmero como argumento Time para o construtor. 7 6. Ajuste o identificador da fonte (SSRC). Este campo identifica o servidor. Voc pode usar o valor inteiro que desejar. Como no temos nenhuma outra fonte de contribuio (campo CC == 0), o campo CSRC no existe. O comprimento do cabealho do pacote de 12 bytes, ou as trs primeiras linhas do diagrama abaixo. 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |V=2|P|X| CC |M| PT | sequence number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | timestamp | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | synchronization source (SSRC) identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | contributing source (CSRC) identifiers | | .... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Voc deve preencher o cabealho na disposio header da classe RTPpacket. Voc tambm precisar copiar a carga til (fornecida como argumento data) para a varivel payload. O comprimento da carga til dado no argumento data_length. O diagrama acima est na ordem de byte de rede (tambm conhecido como big-endian). A Java Virtual Machine usa a mesma ordem de byte, ento voc no precisa transformar seu cabealho de pacote na ordem de byte de rede. Para mais detalhes sobre RTP, veja a RFC-3550.
Manipulando os bits Aqui esto alguns exemplos de como ajustar e verificar bits individuais ou grupo de bits. Note que no formato do cabealho do pacote RTP, os menores nmeros de bit se referem a maiores ordens de bits, ou seja, o bit nmero 0 de um byte 2^7, e o bit nmero 7 1 (ou 2^0). Nos exemplos abaixo, os nmeros de bit se referem aos nmeros no diagrama acima. 8 Como o campo header da classe RTPpacket um vetor do tipo byte, voc precisar ajustar o cabealho de um byte por vez, que um grupo de 8 bits. O primeiro byte possui os bits 0-7, o segundo byte possui os bits 8-15, e assim por diante. Em Java, um int tem 32 bits ou 4 bytes. Para ajustar o nmero n na varivel mybyte do tipo byte: mybyte = mybyte | 1 << (7 n); Para ajustar os bits n e n+1 para o valor de foo na varivel mybyte: mybyte = mybyte | foo << (7 n); Note que foo deve ter um valor que possa ser expresso com 2 bits, ou seja, 0, 1, 2 ou 3. Para copiar um foo inteiro de 16-bits em 2-bytes, b1 e b2: b1 = foo >> 8; b2 = foo & 0xFF; Aps fazer isso, b1 ter 8 bits de maior ordem de foo e b2 ter 8 bits de menor ordem de foo. Voc pode copiar um inteiro de 32-bits em 4-bytes de maneira similar. Se voc no se sente confortvel com o ajuste de bits, pode encontrar mais informaes no Java Tutorial.
Exemplo de bit Suponha que desejamos preencher o primeiro byte do cabealho do pacote RTP com os seguintes valores: V = 2 P = 0 X = 0 CC = 3 Em binrio, isso poderia ser representado como 1 0 | 0 | 0 | 0 0 1 1 V=2 P X CC = 3
2^7 . . . . . . . 2^0 9
Exerccios: Calcule as estatsticas sobre a sesso. Voc precisar calcular a taxa de perda de pacotes RTP, a taxa de dados de vdeo (em bits ou bytes por segundo) e qualquer outra estatstica interessante que voc conseguir encontrar. A interface de usurio no cliente possui 4 botes para as 4 aes. Se voc compar-la a um transdutor padro, tal como RealPlayer ou transdutor Windows, voc ver que eles possuem apenas 3 botes para as mesmas aes, chamadas, PLAY, PAUSE e STOP (correspondendo exatamente ao TEARDOWN). No h nenhum boto de SETUP disponvel para o usurio. Dado que o SETUP mandatrio numa interao RTSP, como voc implementaria isso? apropriado enviar TEARDOWN quando o usurio clica no boto stop? At aqui, o cliente e o servidor implementam apenas o mnimo necessrio de interaes RTSP e PAUSE. Implemente o mtodo DESCRIBE, que usado para passar informaes sobre o media stream. Quando o servidor recebe uma requisio DESCRIBE, ele envia de volta um arquivo de descrio de sesso que diz ao cliente que tipos de streams esto na sesso e quais codificaes esto sendo utilizadas. Apndice Formato do MJPEG (Motion JPEG) proprietrio do laboratrio. Neste laboratrio, o servidor encaminha um vdeo codificado com um formato de arquivo proprietrio MJPEG. Este formato armazena o vdeo como concatenao de imagens codificadas em JPEG, com cada imagem sendo precedida por um cabealho de 5-bytes que indica o tamanho em bits da imagem. O servidor analisa o bitstream do arquivo MJPEG para extrair as imagens JPEG no caminho. O servidor envia as imagens ao cliente em intervalos peridicos. O cliente ento exibe as imagens JPEG individuais conforme elas vo chegando do servidor. REFERNCIA:
(Kurose & Ross, 2006) Kurose, James F. Ross, Keith W. Redes de Computadores e a Internet: uma abordagem top-down. 3ed. So Paulo, Pearson Addison Wesley, 2006.