Você está na página 1de 8

Introdução

O protótipo de cliente IPTV proposto diferencia-se pelo módulo de sinalização utilizado em VoD, tanto para
estabelecimento como a nível do controlo da sessão.

O modelo de sinalização proposto é em tudo semelhante ao utilizado nas aplicações de Voz sobre IP – VoIP, ou
seja, recorre ao protocolo SIP, o que facilitará a integração de aplicações de Vídeo (como o IPTV, Mobile TV,
etc) com aplicações de Voz fixa e móvel.

Funcionalidades Principais
• Play
• Stop
• Pause
• Fast Forward
• Fast Rewind
• Alteração dinâmica dos parametros de encoding da stream.
• Monitorização de QoS/QoE (por implementar?)

Protótipo:
O menu de controlo da sessão caracteriza-se essencialmente por uma input box para o SIP uri do recurso a
negociar, e outra para o porto de escuta do servidor de streaming. Este uri é enviado em numa mensagem SIP
INVITE para o servidor após ser clicado o botão de play.

Segue exemplo de visualização do filme ET em streaming, utilizando o codec H.264:

Prótotipo do cliente em ambiente Unix

Fluxo de execução do Programa Cliente


Sinalização
Ínicio da sessão

Terminação da sessão

Podem ocorrer duas situações. Na primeira, o cliente toma a iniciativa de terminar a sessão (por exemplo,
carregando no STOP). Na segunda é o servidor que termina, normalmente devido ao recurso pedido ter
chegado ao fim.

Controlo/Actualização da sessão

A mensagem enviada SIP UPDATE é utilizada em situações distintas que deverão ser interpretadas do lado do
servidor de acordo com a informação que consta no body SDP (ex: negociação dos parametros da stream,
pause, re-play, fast-forward, etc).
Mensagens SIP

Inicio da Sessão
Cliente envia a mensagem SIP INVITE ao servidor, pedindo um dado recurso através do sip uri na forma
sip:[movie-name]@[server-ip], e negociando através do sip body – SDP – os parametros da stream: quality,
framerate, bandwidth, portos disponíveis (?).

INVITE sip:Lost.mp4@192.168.100.1 SIP/2.0


From: <sip:cliente-iptv@192.168.100.2>
To: <sip:server-iptv@192.168.100.1>
CSeq: 1 INVITE
Content-Type: application/sdp
Content-Length: 367

v=0
o=SIP Server/Proxy 1234567890 1234567890 IN IP4 192.168.100.1
i=SIP IPTV Client session description
c=IN IP4 192.168.100.2
t=0 0
m=application 9 TCP/SIP sip
b=AS:300
a=connection:new
a=setup:active
a=quality:6
a=framerate:23
a=fmtp:media uri=sip:Lost.mp4@192.168.100.1
m=audio 1235 RTP/AVP 97
a=recvonly
a=rtcp:0
m=video 1235 RTP/AVP 96
a=recvonly
a=rtcp:0

SIP/2.0 100 Trying


From: <sip:cliente-iptv@192.168.100.2>
To: <sip:server-iptv@192.168.100.1>
CSeq: 1 INVITE
Max-Forwards: 70
Content-Length: 0
SIP/2.0 200 OK
From: <sip:cliente-iptv@192.168.100.2>
To: <sip:server-iptv@192.168.100.1>
CSeq: 1 INVITE
Content-Type: application/sdp
Max-Forwards: 70
Content-Length: 360

v=0
o=SIP Server 1234567890 1234567890 IN IP4 192.168.100.1
i=SIP IPTV Client session description
c=IN IP4 192.168.100.2
t=0 0
m=application 12345 TCP/SIP sip
b=AS:300.000
a=connection:new
a=setup:active
a=quality:6
a=framerate:23.00
a=fmtp:media url=Lost.mp4
m=audio 1235 RTP/AVP 97
a=recvonly
a=rtcp:0
m=video 1235 RTP/AVP 96
a=recvonly
a=rtcp:0

ACK sip:Lost.mp4@192.168.100.1 SIP/2.0


From: <sip:cliente-iptv@192.168.100.2>
To: <sip:server-iptv@192.168.100.1>
CSeq: 2 ACK
Content-Length: 0

Alteração dos parametros de qualidade da stream IPTV

O cliente envia uma mensagem SIP UPDATE para o servidor com alteração do campo a=quality no SDP.

UPDATE sip:Lost.mp4@192.168.100.1 SIP/2.0


From: <sip:cliente-iptv@192.168.100.2>
To: <sip:server-iptv@192.168.100.1>
CSeq: 3 UPDATE
Content-Type: application/sdp
Content-Length: 367

v=0
o=SIP Server/Proxy 1234567890 1234567890 IN IP4 192.168.100.1
i=SIP IPTV Client session description
c=IN IP4 192.168.100.2
t=0 0
m=application 9 TCP/SIP sip
b=AS:300
a=connection:new
a=setup:active
a=quality:8
a=framerate:23
a=fmtp:media uri=sip:Lost.mp4@192.168.100.1
m=audio 1235 RTP/AVP 97
a=recvonly
a=rtcp:0
m=video 1235 RTP/AVP 96
a=recvonly
a=rtcp:0
SIP/2.0 200 OK
From: <sip:cliente-iptv@192.168.100.2>
To: <sip:server-iptv@192.168.100.1>
CSeq: 3 UPDATE
Content-Type: application/sdp
Max-Forwards: 70
Content-Length: 374

v=0
o=SIP Server 1234567890 1234567890 IN IP4 192.168.100.1
i=SIP IPTV Client session description
c=IN IP4 192.168.100.2
t=0 0
m=application 12345 TCP/SIP sip
b=AS:300.000
a=connection:new
a=setup:active
a=quality:8
a=framerate:23.00
a=fmtp:media url=sip:Lost.mp4@192.168.100.1
m=audio 1235 RTP/AVP 97
a=recvonly
a=rtcp:0
m=video 1235 RTP/AVP 96
a=recvonly
a=rtcp:0

ACK sip:Lost.mp4@192.168.100.1 SIP/2.0


From: <sip:cliente-iptv@192.168.100.2>
To: <sip:server-iptv@192.168.100.1>
CSeq: 4 ACK
Content-Length: 0

Pausa na Transmissão
O cliente envia uma mensagem SIP UPDATE para o servidor com alteração do campo a=recvonly para
a=inactive, para o audio e para o vídeo no SDP.

UPDATE sip:ET.mp4@192.168.100.1 SIP/2.0


From: <sip:cliente-iptv@192.168.100.2>
To: <sip:server-iptv@192.168.100.1>
CSeq: 3 UPDATE
Content-Type: application/sdp
Content-Length: 365

v=0
o=SIP Server/Proxy 1234567890 1234567890 IN IP4 192.168.100.1
i=SIP IPTV Client session description
c=IN IP4 192.168.100.2
t=0 0
m=application 9 TCP/SIP sip
b=AS:300
a=connection:new
a=setup:active
a=quality:6
a=framerate:23
a=fmtp:media uri=sip:ET.mp4@192.168.100.1
m=audio 1236 RTP/AVP 97
a=inactive
a=rtcp:0
m=video 1236 RTP/AVP 96
a=inactive
a=rtcp:0

SIP/2.0 200 OK
From: <sip:cliente-iptv@192.168.100.2>
To: <sip:server-iptv@192.168.100.1>
CSeq: 3 UPDATE
Content-Type: application/sdp
Max-Forwards: 70
Content-Length: 372

v=0
o=SIP Server 1234567890 1234567890 IN IP4 192.168.100.1
i=SIP IPTV Client session description
c=IN IP4 192.168.100.2
t=0 0
m=application 12345 TCP/SIP sip
b=AS:300.000
a=connection:new
a=setup:active
a=quality:6
a=framerate:23.00
a=fmtp:media url=sip:ET.mp4@192.168.100.1
m=audio 1235 RTP/AVP 97
a=recvonly
a=rtcp:0
m=video 1235 RTP/AVP 96
a=recvonly
a=rtcp:0

ACK sip:ET.mp4@192.168.100.1 SIP/2.0


From: <sip:cliente-iptv@192.168.100.2>
To: <sip:server-iptv@192.168.100.1>
CSeq: 4 ACK
Content-Length: 0

Para retomar a sessão (re-play)

UPDATE sip:ET.mp4@192.168.100.1 SIP/2.0


From: <sip:cliente-iptv@192.168.100.2>
To: <sip:server-iptv@192.168.100.1>
CSeq: 5 UPDATE
Content-Type: application/sdp
Content-Length: 365

v=0
o=SIP Server/Proxy 1234567890 1234567890 IN IP4 192.168.100.1
i=SIP IPTV Client session description
c=IN IP4 192.168.100.2
t=0 0
m=application 9 TCP/SIP sip
b=AS:300
a=connection:new
a=setup:active
a=quality:6
a=framerate:23
a=fmtp:media uri=sip:ET.mp4@192.168.100.1
m=audio 1235 RTP/AVP 97
a=recvonly
a=rtcp:0
m=video 1235 RTP/AVP 96
a=recvonly
a=rtcp:0
SIP/2.0 200 OK
From: <sip:cliente-iptv@192.168.100.2>
To: <sip:server-iptv@192.168.100.1>
CSeq: 5 UPDATE
Content-Type: application/sdp
Max-Forwards: 70
Content-Length: 372

v=0
o=SIP Server 1234567890 1234567890 IN IP4 192.168.100.1
i=SIP IPTV Client session description
c=IN IP4 192.168.100.2
t=0 0
m=application 12345 TCP/SIP sip
b=AS:300.000
a=connection:new
a=setup:active
a=quality:6
a=framerate:23.00
a=fmtp:media url=sip:ET.mp4@192.168.100.1
m=audio 1235 RTP/AVP 97
a=recvonly
a=rtcp:0
m=video 1235 RTP/AVP 96
a=recvonly
a=rtcp:0

ACK sip:ET.mp4@192.168.100.1 SIP/2.0


From: <sip:cliente-iptv@192.168.100.2>
To: <sip:server-iptv@192.168.100.1>
CSeq: 6 ACK
Content-Length: 0

Terminação da Sessão
Cliente envia uma mensagem sip BYE para o servidor, pedindo para terminar a transmissão da stream,
aguardando pela resposta do servidor.

BYE sip:ET.mp4@192.168.100.1 SIP/2.0


From: <sip:cliente-iptv@192.168.100.2>
To: <sip:server-iptv@192.168.100.1>
CSeq: 7 BYE
Content-Length: 0

SIP/2.0 200 OK
From: <sip:cliente-iptv@192.168.100.2>
To: <sip:server-iptv@192.168.100.1>
CSeq: 7 BYE
Max-Forwards: 70
Content-Length: 0

Bibliotecas
• libosip – geração e interpretação de mensagens sip
• libvlc – decoders de aúdio e vídeo, extractor de pacotes RTP, video/audio output
• GTK+ - Criação da GUI