• Nenhum resultado encontrado

4.6 Avaliação das Funcionalidades do Sistema

4.6.1. Cenário de Uso

“Paula, uma gerente de 30 anos chega a sua casa após o trabalho, conecta seu tablet à rede sem fio de seu domicilio e vai jantar. Logo após a refeição, ela decide ligar a sua TV digital para assistir algum filme com seu filho Renato, sabendo que neste horário sempre há algum sendo transmitido. Notando que ainda faltavam alguns minutos para o inicio do filme, Renato prontamente

vai buscar o seu smartphone para jogar um pouco enquanto aguarda o início do filme. No momento em que o filme começa a ser exibido pela emissora, Renato se espanta ao receber uma notificação no dispositivo em suas mãos informando sobre o início da transmissão do filme, seguindo-se pela exibição de uma página da Internet contendo informações detalhadas sobre o filme em exibição. A Figura 14 e Figura 15a seguir demonstram, respectivamente, o conteúdo sendo exibido pela TV e pelo smartphone no momento da notificação.

Figura 14 - Imagem da TV no primeiro sincronismo

Em outros momentos durante a exibição do filme, Renato e Paula notaram que novas notificações eram recebidas, sempre trazendo novos conteúdos relacionados ao filme exibido, como por exemplo, na Figura 16 e Figura 17 abaixo, no momento em que o personagem principal do filme é exibido pela primeira vez a página da Internet é rapidamente atualizada disponibilizando a possibilidade da compra de um brinquedo semelhante ao personagem.

Figura 16 - Imagem da TV no segundo sincronismo

Este novo tipo de abordagem utilizando um dispositivo de segunda tela em sincronismo com o conteúdo exibido pela TV representou, para ambos telespectadores, uma nova experiência, ainda mais rica e inovadora, do meio de assistir televisão.”

A estória contada acima elucida um cenário real da utilização da solução Synced- DTV, apresentada por este trabalho, na melhoria e enriquecimento da experiência de assistir televisão. Obviamente a estória segue a narrativa do telespectador, e a forma com a qual ele interage com as interfaces dos módulos da solução. Entretanto, o ponto de vista da solução deve ser analisado para que haja uma melhor compreensão das etapas necessárias para que o sincronismo entre os dispositivos, elucidando os requisitos necessários à comunicação e os artefatos trafegados entre os dispositivos.

Nesta nova ótica, a emissora tem basicamente duas responsabilidades, o envio da aplicação, caracterizada pelo módulo Synced-TVApp, e o envio dos dados necessários ao sincronismo através das tabelas EIT. No caso do cenário de uso descrito acima, os dados de sincronismo enviados são descritos pelo texto abaixo.

Basicamente o que a informação acima descreve é que, após 100 segundos do início da transmissão desta programação o conteúdo da página “http://www.synceddtv.com.br/iceage1” deve ser exibido. Após mais 20 segundos, a página deve ser atualizada para exibir o conteúdo da página “http://www.synceddtv.com.br/iceage2”.

Uma vez que esta informação é recebida pela TV e processada pelo módulo Synced-TVApp, os dados necessários ao sincronismo são então enviados por broadcast para os dispositivos de segunda tela que contenha a aplicação Synced-SecondScreenApp

{"syncpoints":[

{"time":"100","inttype":0,"url":"http://www.synceddtv.com.br/iceage1"}, {"time":"120","inttype":1, "url":"http://www.synceddtv.com.br/iceage2"} ]}

instalado e que esteja na mesma rede sem fio da TV. O texto abaixo demonstra a informação enviada entre a TV e a segunda tela.

Observe que além das informações dos pontos de sincronismo enviados pela emissora, novas informações necessárias ao sincronismo são adicionadas aos dados transmitidos à segunda tela, como por exemplo a hora de início e duração do programa e a hora atual, que corresponde ao momento em que a informação foi recebida na TV.

Em posse destas informações, a aplicação Synced-SecondScreenApp é capaz de determinar os momentos, considerando o horário atual do dispositivo de segunda tela, em que o sincronismo deve acontecer, agendando alarmes para estes momentos específicos. O texto abaixo demonstra, utilizando logs do terminal Android, o que acontece após o recebimento das informações de sincronismo.

{ "ProgramInfo": {"Name":"Ice Age", "Genre":"0xC", "CurrentTime":"1409168202207", "ProgramInitialTime":"1409168157000", "ProgramDuration":"1800", "syncpoints":[{"time":"100","inttype":0, "url":"http://www.synceddtv.com.br/iceage1"},{"time":"120","i nttype":1, "url":"http://www.synceddtv.com.br/iceage2"}] } }

08-28 17:05:07.794:E/ConnectionService(2997): From: /192.168.1.101:56885

08-28 17:05:07.794: E/ConnectionService(2997): Message: { "ProgramInfo": { "Name":"Ice Age", "Genre":"0xC", "CurrentTime":"1409168202207", "ProgramInitialTime":"1409168157000", "ProgramDuration":"1800","syncpoints":[{"time":"100","inttype":0, "url":"http://www.synceddtv.com.br/iceage1"},{"time":"120","inttype":1, "url":"http://www.synceddtv.com.br/iceage2"}] } } 08-28 17:05:07.799: D/ConnectionService(2997): handleMessage 08-28 17:05:07.799: D/ConnectionService(2997): STATUS_OK 08-28 17:05:07.799: D/ConnectionService(2997): unregisterPending

08-28 17:05:07.799: E/ConnectionService(2997): Waiting for datagram packet 08-28 17:05:07.809: D/ConnectionService(2997): sended intent

08-28 17:05:07.809: D/ParseJsonService(2997): ParseJsonService 08-28 17:05:07.814: D/ParseJsonService(2997): onHandleIntent [Intent { cmp=br.ufpe.cin/.service.ParseJsonService (has extras) }]

08-28 17:05:07.819: D/ParseJsonService(2997): parseReceivedData 08-28 17:05:07.849: D/ParseJsonService(2997): name = Ice Age 08-28 17:05:07.849: D/ParseJsonService(2997): genre = 12

08-28 17:05:07.849: D/ParseJsonService(2997): currentTime = 1409168202207 08-28 17:05:07.849: D/ParseJsonService(2997): programInitialTime = 1409168157000 08-28 17:05:07.849: D/ParseJsonService(2997): programDuration = 1800

08-28 17:05:07.849: D/ParseJsonService(2997): timeInSeconds = 100

08-28 17:05:07.849: D/ParseJsonService(2997): url = http://www.synceddtv.com.br/iceage1 08-28 17:05:07.849: D/ParseJsonService(2997): timeInSeconds = 120

08-28 17:05:07.849: D/ParseJsonService(2997): url = http://www.synceddtv.com.br/iceage2 08-28 17:05:07.854: D/ParseJsonService(2997): normalizeTime

08-28 17:05:07.854: D/ParseJsonService(2997): info.getCurrentTime() = 1409168202207 - DATE = Wed Aug 27 16:36:42 BRT 2014

08-28 17:05:07.854: D/ParseJsonService(2997): info.getProgramInitialTime() = 1409168157000 - DATE = Wed Aug 27 16:35:57 BRT 2014

08-28 17:05:07.859: D/ParseJsonService(2997): diffBTWInitialTimeAndCurrent = 45207 - 45seconds has passed 08-28 17:05:07.859: D/ParseJsonService(2997): localCurrTime = 1409256307851 - DATE = Thu Aug 28 17:05:07 BRT 2014

08-28 17:05:07.859: D/ParseJsonService(2997): deviceInitialTime = 1409256262644 - DATE = Thu Aug 28 17:04:22 BRT 2014

08-28 17:05:07.859: D/ParseJsonService(2997): endProgramTime = 1409258062644 - DATE = Thu Aug 28 17:34:22 BRT 2014

08-28 17:05:07.859: D/ParseJsonService(2997): normalizedTime[0] = 1409256362644 - DATE = Thu Aug 28 17:06:02 BRT 2014

08-28 17:05:07.859: D/ParseJsonService(2997): normalizedTime[0] VAI ALARMAR EM [54] Segundos 08-28 17:05:07.859: D/ParseJsonService(2997): normalizedTime[1] = 1409256382644 - DATE = Thu Aug 28 17:06:22 BRT 2014

08-28 17:05:07.859: D/ParseJsonService(2997): normalizedTime[1] VAI ALARMAR EM ~ [74] Segundos 08-28 17:05:07.864: D/ParseJsonService(2997): setAlarmList [ProgramInfoModel [mName=Ice Age, mGenre=12, mCurrentTime=1409168202207, mProgramInitialTime=1409168157000, mProgramDuration=1800000,

mList=[br.ufpe.cin.model.SyncPoint@42a8de68, br.ufpe.cin.model.SyncPoint@42a8e110, br.ufpe.cin.model.SyncPoint@42a8e2e8], mNormalizedList=[br.ufpe.cin.model.NormalizedSyncPoint@42a90c18, br.ufpe.cin.model.NormalizedSyncPoint@42a911e0, br.ufpe.cin.model.NormalizedSyncPoint@42a91760], mInterruptType=2]] 08-28 17:05:07.864: D/ParseJsonService(2997): normalizedList [[br.ufpe.cin.model.NormalizedSyncPoint@42a90c18, br.ufpe.cin.model.NormalizedSyncPoint@42a911e0, br.ufpe.cin.model.NormalizedSyncPoint@42a91760]]

08-28 17:05:07.874: D/ParseJsonService(2997): alarm [1409256362644] [http://www.synceddtv.com.br/iceage1] 08-28 17:05:07.884: D/ParseJsonService(2997): alarm [1409256382644] [http://www.synceddtv.com.br/iceage2]

Após o recebimento dos dados do sincronismo, as informações são extraídas e normalizadas, e os alarmes configurados e agendados. Nos momentos definidos pelos alarmes, o módulo responsável para ser informado que um sincronismo deve acontecer é executado, iniciando o processo de exibição do conteúdo Web associado ao alarme sendo processado. Este fluxo é demonstrado pelo texto abaixo, onde pode-se observar que os dois pontos definidos pela informação enviada pela emissora são executados de forma correta.

É importante notar que os alarmes acontecem precisamente no momento calculado durante a normalização dos tempos recebidos da TV, como por exemplo no cenário

08-28 17:06:02.674: D/ScheduleAlarmReceiver(2997): onReceive [Intent {

act=schedule.alarm.SCHEDULE_ACTION flg=0x14 cmp=br.ufpe.cin/.receiver.ScheduleAlarmReceiver (has extras) }]

08-28 17:06:02.679: D/ScheduleAlarmReceiver(2997): onReceive DATE [Thu Aug 28 17:06:02 BRT 2014] 08-28 17:06:02.679: D/ScheduleAlarmReceiver(2997): interruptType [2]

08-28 17:06:02.679: D/ScheduleAlarmReceiver(2997): url [http://www.synceddtv.com.br/iceage1] 08-28 17:06:02.679: D/ScheduleAlarmReceiver(2997): genre [12]

08-28 17:06:02.679: D/ScheduleAlarmReceiver(2997): interrupt [http://www.synceddtv.com.br/iceage1] [12] 08-28 17:06:02.694: D/ScheduleAlarmReceiver(2997): packageList []

08-28 17:06:02.694: D/ScheduleAlarmReceiver(2997): !isAtualTopStackActivityOnExcpetionList 08-28 17:06:02.924: D/WebActivity(2997): onCreate

08-28 17:06:03.049: I/webclipboard(2997): clipservice: android.sec.clipboard.ClipboardExManager@42ab2358 08-28 17:06:03.464: D/WebActivity(2997): loadWeb [http://www.synceddtv.com.br/iceage1]

--- 08-28 17:06:22.729: D/ScheduleAlarmReceiver(2997): onReceive [Intent {

act=schedule.alarm.SCHEDULE_ACTION flg=0x14 cmp=br.ufpe.cin/.receiver.ScheduleAlarmReceiver (has extras) }]

08-28 17:06:22.739: D/ScheduleAlarmReceiver(2997): onReceive DATE [Thu Aug 28 17:06:22 BRT 2014] 08-28 17:06:22.739: D/ScheduleAlarmReceiver(2997): interruptType [2]

08-28 17:06:22.739: D/ScheduleAlarmReceiver(2997): url [http://www.synceddtv.com.br/iceage2] 08-28 17:06:22.739: D/ScheduleAlarmReceiver(2997): genre [12]

08-28 17:06:22.739: D/ScheduleAlarmReceiver(2997): interrupt [http://www.synceddtv.com.br/iceage2] [12] 08-28 17:06:22.759: D/ScheduleAlarmReceiver(2997): packageList []

08-28 17:06:22.759: D/ScheduleAlarmReceiver(2997): !isAtualTopStackActivityOnExcpetionList 08-28 17:06:22.819: D/WebActivity(2997): onNewIntent

descrito nesta seção, foi definido que os momentos de sincronismo ocorreriam nos horários:

O que pode ser confirmado pelo horário de disparo dos alarmes, responsáveis por invocar os Receivers Android que por fim realizam a ação de exibir a página Web, como pode ser observado no texto abaixo.

Documentos relacionados