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.
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 (?).
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
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
O cliente envia uma mensagem SIP UPDATE para o servidor com alteração do campo a=quality no SDP.
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
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.
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
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
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.
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