• No results found

Problemstilling 2: Har pasienter mest mulig likeverdig tilgang til å delta i kliniske

A opção “PTZ” do menu superior só se encontra ativa se a câmara selecionada suportar PTZ. Esta opção permite ao utilizador:

 obter a imagem transmitida por parte da câmara;

 obter os valores da configuração PTZ da câmara;

var newvalue = {};

if (currentImgOptions.Brightness != null) {

var brilho = parseFloat($("#sBrightness").slider("value")); newvalue.Brightness = brilho;

}

objimg.updateSettings(newvalue, function (data) { if (data.status.value == 1) { … } else { … } });

83

 movimentar a câmara em termos absolutos e relativos, alterando os valores definidos ao nível do PTZ da câmara;

obter e alterar os presets definidos;

 definir a posição por defeito da câmara (Home position)

 ir para a posição por defeito definida;

Após selecionar a opção PTZ surge ao utilizador o seguinte ecrã:

Figura 41 - Ecrã PTZ

Como se pode verificar na Figura 41, a descrição exaustiva deste ecrã seria demasiado extensa pelo que, tal como já foi realizado anteriormente, vamos apenas exemplificar para uma das funcionalidades por ele disponibilizadas.

Assim como na funcionalidade descrita na secção anterior, para a implementação dos sliders foi utilizado o plugin Slider disponibilizado por JQuery UI [65]. Neste caso, os intervalos de valores válidos para cada slider será obtido das opções de configuração de PTZ do perfil media selecionado, exemplificando para a posição vertical (Tilt):

84

Caso o utilizador selecione nos respetivos sliders: Tilt= -0.7, TiltSpeed=0.3, Zoom=0.5, ZoomSpeed=0.9 e posteriormente clique em “Movimento Absoluto”, a imagem devolvida pela câmara passará a ser a apresentada na Figura 42.

Figura 42 - Imagem após movimento vertical com zoom

Ou seja, tal como seria de esperar, a câmara faz um movimento vertical descendente e um

zoom de aproximação. Assim, o evento “click” do botão “Movimento Absoluto” obtém os

valores definidos nos sliders e realiza uma chama assíncrona ao método do “movePtz” do objeto de serviço “objptz” (do tipo objPTZ), inicializado com o objeto CurrentCamera que contém a informação de contexto da câmara selecionada e o token/identificador do perfil

media atual:

Para o exemplo apresentado acima, o objeto JSON “newvalue”está definido da seguinte forma:

$("#sTilt").slider({ step: 0.1,

min: currentProfile.ptz.PanTiltLimits.Range.YRange.Min, max: currentProfile.ptz.PanTiltLimits.Range.YRange.Max, value: currentPTZ.Position.PanTilt.y,

orientation: "vertical", slide: function (event, ui) { $("#lblTilt").text(ui.value); }

});

$("#lblTilt").text($("#sTilt").slider("value"));

objptz.movePtz(newvalue, function (data) { if (data.status.value == 1) { hideMessages(); $('#ssettings').hideLoading(); } else { hideMessages(); $('#ssettings').hideLoading(); showError(data.status.msg); } });

85

As restantes operações são em tudo idênticas à descrita variando apenas:

 no método do objeto objPTZ a ser executado de forma assíncrona (e.g.: para o caso da alteração da posição “home” definida o método seria updateHomePosition);

 no objeto JSON passado ao método do objeto PTZ.

{"command": "move",

"move": {"Type": "Absolute", "ZoomPosX": 0.5, "ZoomSpeedX": 0.9, "PanTiltPosY": -0.7,"PanTiltSpeedY": 0.3}

87

6 Conclusão

6.1 Síntese de resultados

As câmaras IP têm um custo elevado, pelo que todo o trabalho foi desenvolvido recorrendo a câmaras disponibilizadas na web. Devido a este facto, nem sempre as mesmas se encontravam disponíveis quando necessário, o que levantou dificuldades ao nível do desenvolvimento. Por outro lado, o facto de se utilizarem câmaras disponibilizadas na web permitiu o teste da aplicação com várias marcas e modelos de câmaras o que possibilitou: por um lado comprovar o funcionamento da aplicação com várias marcas/modelos, por outro lado conluir que nem todas as câmaras que referem suportar ONVIF cumprem corretamente com a especificação. Ou seja, com este trabalho foi possível constatar que algumas implementações ONVIF (em algumas marcas/modelos) não cumprem com o especificado, devolvendo erros nas chamadas em vez de devolverem a informação esperada.

Durante o desenvolvimento foram efetuados testes de funcionalidade e testes de interface. Os testes de interface consistiram em verificar a correta visualização dos elementos da

interface em vários browsers e vários dispositivos (PCs, tablets, smartphones). Os testes de

funcionalidade foram realizados quer às várias camadas (serviço web, biblioteca JavaScript), quer ao sistema como um todo (aplicação web). Assim, relativamente aos testes de funcionalidade, foram testadas as funções e métodos implementados de modo a garantir a deteção e correção de eventuais erros. Para efetuar o teste das funções do servidor foi utilizado um cliente desenvolvido para o efeito que permite realizar chamadas (GET,PUT, POST e DELETE) ao serviço REST, obter o JSON devolvido e mostrar o mesmo numa caixa de texto. O cliente de teste permite, no caso de pedidos PUT e POST, o envio dos parâmetros em formato JSON no corpo do pedido. Uma vez que a aplicação web usa a biblioteca JavaScript implementada esta serviu também para teste das suas funções. Relativamente à aplicação web, foram realizados testes nas últimas versões dos browsers Internet Explorer, Mozilla Firefox e Chrome do sistema operativo Windows, no browser Mozilla Firefox do sistema operativo XUbuntu e no browser Safari do sistema operativo IOS7, tendo-se comprovado o correto funcionamento da aplicação em todos eles.

88

Os objetivos definidos para este trabalho foram ambiciosos, tendo sido produzidas cerca de 12500 linhas de código (cerca de 7500 linhas para o serviço web REST, 1000 linhas para a biblioteca JavaScript e 4000 linhas para a aplicação cliente).

No desenvolvimento da aplicação cliente, aplicação servidora e biblioteca JavaScript não foram implementadas as classes de serviço “IO” e “Events”, uma vez que no desenrolar do trabalho concluiu-se não existir tempo para o completo desenvolvimento das mesmas. Optou-se então pela implementação completa das classes relativas aos quatro principais serviços ONVIF: Device Management, Media, Imaging e PTZ.

A implementação do serviço web REST permitiu deslocar para o servidor a maior parte do processamento ONVIF, o que possibilitou que a aplicação web desenvolvida tivesse um peso computacional reduzido, ficando apenas responsável com o processamento relativo à

interface com o utilizador. O serviço web REST implementado cumpriu com os objetivos

específicos definidos:

ao expor as funcionalidades da biblioteca UMOC numa interface REST e ao fornecer uma API web, assegura uma interface intuitiva e maximiza a compatibilidade;

a utilização de um servidor HTTP faz com que o serviço web suporte um elevado número de clientes, pois lança automaticamente tantas instâncias do FastCGI quantas as necessárias. A eficiência do servidor assenta na utilização de uma linguagem não interpretada e pelo desenvolvimento de um algoritmo que acelera a parte mais importante do código: o mapeamento das URIs em funções da biblioteca. Desta forma, a utilização da biblioteca UMOC facilitou o desenvolvimento do serviço web REST, não só reduzindo o tempo implementação, mas também reduzindo a sua complexidade, uma vez que todo o processamento SOAP passou a ser realizado pela biblioteca UMOC. O serviço web segue a filosofia REST, fornecendo a informação de navegação necessária.

A adoção do JSON para o formato das mensagens permitiu reduzir tanto o volume de tráfego como a quantidade de processamento associada, assegurando desta forma um desempenho superior ao que seria conseguido utilizando XML.

89

O serviço web e a aplicação web foram implementados utilizando tecnologias de domínio livre e foram configurados sobre HTTPS (garantir a confidencialidade da informação), cumprindo desta forma com os requisitos gerais do sistema.

A biblioteca JavaScript implementada fornece uma API cliente de comunicação com o serviço web REST, ou seja, isola e abstrai o código que trata dessa comunicação. Este facto facilitou o desenvolvimento da aplicação web, uma vez que esta apenas teve que realizar chamadas à API JavaScript, não tendo que se preocupar com o serviço web. A biblioteca suporta chamadas síncronas e assíncronas sem duplicação de funções e está implementada de forma independente do formato das URI do serviço web.

A interface gráfica da aplicação web desenvolvida proporciona uma fácil e agradável interação do utilizador com o sítio web, disponibilizando funcionalidades para configurar câmaras ONVIF e aceder aos respetivos streams multimédia. A utilização de HTML5 e a implementação de um design responsivo asseguram a sua compatibilidade numa grande variedade de dispositivos, incluindo dispositivos móveis.

O objetivo da aplicação ser “universal” mostrou-se ser de difícil concretização devido à impossibilidade de utilizar o elemento <video> do HTML5 para disponibilização online das imagens de vídeo transmitidas pelas câmaras. Assim, foram implementados dois modos alternativos de visualização das imagens de vídeo: plugin web VLC e o “modo snapshot”. O

plugin web VLC permite stream de vídeo sobre RTSP [62] sendo suportado em três dos

principais browsers [61] (Internet Explorer, Mozilla Firefox e Safari). O “modo snapshot” consiste em atualizar periodicamente a imagem dando a ideia de movimento, e garante a visualização quer em dispositivos móveis (e.g.: IPAD), quer em dispositivos que não tenham o plugin web VLC instalado. Assim, conclui-se que a implementação deste modo alternativo foi uma mais-valia para a aplicação web desenvolvida.

6.2 Conclusão

O objectivo principal deste trabalho era implementar uma aplicação web que fosse capaz de configurar câmaras ONVIF, bem como disponibilizar acesso aos respetivos streams multimédia. Pretendia-se uma aplicação “universal”, isto é, que pudesse ser utilizada em todos os dispositivos com browser, desde computadores até smartphones. Para além deste objetivo geral, a aplicação deveria: utilizar tecnologias normalizadas (compatível com os

90

utilizada em todos os dispositivos incluindo dispositivos móveis, adaptar-se às diferentes dimensões de ecrãs e proporcionar uma utilização amigável mesmo em dispositivos móveis. A solução desenvolvida tem uma arquitetura cliente-servidor, devido à necessidade de fazer pedidos CORS e à restrição de segurança single origin policy implementada pelos browsers. Foi então definido que o servidor seria genérico e independente da aplicação cliente, fornecendo uma interface REST que expõe as funções da biblioteca ONVIF já existente. Este serviço web funciona como um proxy ONVIF, que esconde as especificidades ONVIF e fornece uma API mais eficiente para os clientes.

O deslocamento do processamento ONVIF para o servidor permitiu construir uma aplicação cliente AJAX bastante mais leve, e que pode ser utilizada em dispositivos com recursos limitados, como são os smartphones. Esta aplicação foi estruturada em duas camadas, uma biblioteca JavaScript para abstrair a comunicação com o serviço web REST e outra camada que implementa a interface com o utilizador. Tirando partido da rigorosa implementação do serviço web de acordo com a filosofia REST, a implementação da biblioteca JavaScript é independente do formato das URIs. Assim, é possível, no futuro, fazer alterações ao formato das URIs do serviço web sem ter que alterar a aplicação cliente.

O objetivo geral definido demonstrou ser de difícil concretização, uma vez que, com as tecnologias atuais, não foi possível chegar a uma solução universal para streaming de vídeo na web. Assim, foram implementados dois modos alternativos de visualização das imagens de vídeo: plugin web VLC e o “modo snapshot”. A implementação “modo snapshot” foi uma mais-valia para a aplicação web desenvolvida uma vez garante a visualização quer em dispositivos móveis (ex: IPAD), quer em dispositivos que não tenham o plugin web VLC instalado. Assim se conclui que, apesar das restrições tecnológicas, foi possível implementar uma solução alternativa que permitiu desenvolver uma aplicação web para configurar câmaras ONVIF e aceder aos respetivos streams multimédia. A utilização de HTML5 e a adoção de um design responsivo no seu desenvolvimento possibilitaram a compatibilidade numa grande variedade de dispositivos (incluindo dispositivos móveis) e uma interface gráfica que garante uma fácil e agradável interação do utilizador com o sítio web.

Os objetivos não foram totalmente atingidos pois não foram implementadas todas as funcionalidades da biblioteca existente. A dimensão do código produzido atesta o volume de trabalho subjacente à solução, sobretudo considerando também a compexidade e as

91

características que os componentes da arquitetura oferecem. Pode-se assim concluir que os objetivos deste trabalho mostraram ser muito ambiciosos.

6.3 Trabalho futuro

De futuro, este trabalho poderá ser completado, melhorado e estendido. Para completar as funcionalidades ONVIF propõe-se:

 Implementar quer ao nível do serviço REST, quer ao nível da biblioteca JavaScript, as classes relativas aos serviços “IO” e “Events”;

Utilização de server-sent events [66] para acesso, do lado do cliente, aos eventos das câmaras. Note-se que de momento o Internet Explorer é o único dos principais

browsers a não suportar esta tecnologia.

As melhoras que se poderão fazer incluem aspetos de desempenho e também da “universalidade” do cliente web:

Utilizar apontadores para funções, em substituição da instrução switch, para encaminhamento dos pedidos até à função respetiva da biblioteca UMOC;

Efetuar testes de carga ao serviço web REST (FastCGI) e ajustar os parâmetros de configuração do módulo FastCGI;

Assim que a evolução do HTML5 o permita, disponibilizar o streaming de vídeo sem necessidade do plugin web VLC (eliminando o modo snapshot).

Finalmente, este trabalho abre a porta para o desenvolvimento de aplicações complementares que utilizem o serviço web REST e/ou a biblioteca JavaScript implementadas. Por exemplo, aplicações mobile (IOS, Android, etc) que utilizem o serviço

93

7 Referências

[1] ONVIF, “ONVIF - Specifications.” [Online]. Available:

http://www.onvif.org/Documents/Specifications.aspx. [Accessed: 21-Apr-2013]. [2] E. (IPVM ) Ace, “IP Camera Standards Use Revealed,” 2012. [Online]. Available:

http://ipvm.com/report/ip_camera_standards_deployment. [Accessed: 26-May- 2013].

[3] S. F. Lopes, S. Silva, J. Cabral, and J. L. Monteiro, “UMOC – a C library for clients of ONVIF Network Video Transmitters Library design and Device Discovery support,”

Proceedings of the 10th International Conference on Informatics in Control, Automation and Robotics, 2013.

[4] W3C, “SOAP.” [Online]. Available: http://www.w3.org/TR/soap/.

[5] R. T. Fielding, “Architectural Styles and the Design of Network-based Software Architectures,” University of California, 2000.

[6] L. Richardson and S. Ruby, RESTful Web Services. O’Reilly, 2007.

[7] M. Mahemoff, “Tutorials Client-Side Storage,” HTML5 Rocks. [Online]. Available: http://www.html5rocks.com/en/tutorials/offline/storage/.

[8] M. D. Network, “IndexedDB - Basic concepts.” [Online]. Available: https://developer.mozilla.org/en-

US/docs/IndexedDB/Basic_Concepts_Behind_IndexedDB.

[9] M. D. Network, “IndexedDB.” [Online]. Available: https://developer.mozilla.org/en- US/docs/IndexedDB.

[10] Nicholas C. Zakas, Professional Javascript for Web Developers, 3rd Edition Wrox, 2012.

[11] “JavaScript Guide - JavaScript | Mozilla Developer Network.” [Online]. Available: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide. [Accessed: 23-Jun- 2013].

[12] W3C, “XMLHttpRequest.” [Online]. Available:

http://www.w3.org/TR/XMLHttpRequest/. [Accessed: 21-Apr-2013]. [13] W3schools, “The XMLHttpRequest Object.” [Online]. Available:

http://www.w3schools.com/xml/xml_http.asp. [14] Onvif, “ONVIF TM Core Specification,” 2011.

94

[15] “Native Client — Google Developers.” [Online]. Available: https://developers.google.com/native-client/.

[16] L. Shen, Y. Ren, and C. Yang, “Design and Implementation of WebGIS Based on FastCGI,” Geoinformatics, 2010.

[17] O. Market, “FastCGI : A High-Performance Web Server Interface.” Open Market, Inc, 1996.

[18] “FastCGI Programmer’s Guide - Chapter 2, Developing FastCGI Applications in C.” [Online]. Available: http://www.fastcgi.com/devkit/doc/fastcgi-prog-guide/ch2c.htm. [Accessed: 09-Jun-2013].

[19] W3C, “XML Schema Part 0: Primer Second Edition.” [Online]. Available: http://www.w3.org/TR/xmlschema-0/. [Accessed: 21-Aug-2013].

[20] S. F. Lopes, S. Silva, J. Mendes, J. C. Metrolho, and D. Duque, “Development of a library for clients of ONVIF video cameras : challenges and solutions,” Industrial

Technology (ICIT), 2013 IEEE International Conference, 2013.

[21] T. A. S. Foundation, “The Apache HTTP Server Project.” [Online]. Available: http://httpd.apache.org/. [Accessed: 21-Apr-2013].

[22] T. Suzumura, S. Trent, M. Tatsubori, A. Tozawa, and T. Onodera, “Performance Comparison of Web Service Engines in PHP, Java and C,” 2008 IEEE International

Conference on Web Services, pp. 385–392, Sep. 2008.

[23] P. Simons and R. Babel, “FastCGI — The Forgotten Treasure.” [Online]. Available: http://people.apache.org/~jim/ApacheCons/ApacheCon2002/pdf/simons-fastcgi- ACUSA02.pdf.

[24] V. Apte, T. Hansen, and P. Reeser, “Performance comparison of dynamic web platforms,” Computer Communications, vol. 26, no. 8, pp. 888–898, May 2003. [25] CppCMS, “Case Study: CppCMS benchmarks vs Java, C#, PHP.” [Online]. Available:

http://cppcms.com/wikipp/en/page/benchmarks_all.

[26] “Introducing JSON.” [Online]. Available: http://www.json.org/.

[27] N. Nurseitov, M. Paulson, R. Reynolds, and C. Izurieta, “Comparison of JSON and XML Data Interchange Formats : A Case Study,” CAINE, 2009.

[28] S. Allamaraju, RESTful Web Services Cookbook. O’Reilly, 2010. [29] M. Kelly, “JSON Hypertext Application Language.” [Online]. Available:

95

[30] M. Kelly, “HAL - Hypertext Application Language.” [Online]. Available: http://stateless.co/hal_specification.html. [Accessed: 08-Jun-2013]. [31] S. Allamaraju’s, “Generalized Linking.” [Online]. Available:

http://www.subbu.org/blog/2008/10/generalized-linking. [Accessed: 08-Jun-2013]. [32] P. J. Leach, T. Berners-Lee, J. C. Mogul, L. Masinter, R. T. Fielding, and J. Gettys,

“Hypertext Transfer Protocol -- HTTP/1.1.”

[33] R. Fielding, “rest-discuss:The REST Architectural Style List,” yahoo groups. [Online]. Available: http://tech.groups.yahoo.com/group/rest-discuss/message/9962.

[34] “Apache HTTP Server Version 2.2 Documentation - Apache HTTP Server,” The Apache

Software Foundation. [Online]. Available:

http://httpd.apache.org/docs/2.2/index.html. [Accessed: 08-Jun-2013]. [35] “mod_fcgid - FastCGI interface module for Apache 2 - The Apache HTTP Server

Project.” [Online]. Available: http://httpd.apache.org/mod_fcgid/. [Accessed: 17-Aug- 2013].

[36] “Apache module mod_fastcgi.” [Online]. Available:

http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html. [Accessed: 08-Jun- 2013].

[37] “Eclipse - The Eclipse Foundation open source community website.” [Online]. Available: http://www.eclipse.org/. [Accessed: 17-Aug-2013].

[38] M. R. Brown, “FastCGI Developer’s Kit,” Open Market, Inc. Open Market, Inc, 1996. [39] MIT, “json-cpp | Free Development software downloads at SourceForge.net.”

[Online]. Available: http://sourceforge.net/projects/jsoncpp/. [Accessed: 09-Jun- 2013].

[40] “cplusplus.com - The C++ Resources Network.” [Online]. Available: http://www.cplusplus.com/. [Accessed: 10-Jun-2013].

[41] “jQuery NailThumb.” [Online]. Available: http://www.garralab.com/nailthumb.php. [Accessed: 20-Jul-2013].

[42] P. Narasimhan, “IndexDB JQuery Plugin.” [Online]. Available: http://nparashuram.com/jquery-indexeddb/.

[43] P. Narasimhan, “IndexedDB Polyfill.” [Online]. Available:

http://nparashuram.com/IndexedDBShim/index.html. [Accessed: 06-Jul-2013]. [44] “Building a List/Grid View Switcher with jQuery | Vandelay Design Blog.” [Online].

Available: http://vandelaydesign.com/blog/web-development/list-grid-view-switch/. [Accessed: 07-Jul-2013].

96

[45] “4.4 Sections — HTML 5.1 Nightly.” [Online]. Available:

http://www.w3.org/html/wg/drafts/html/master/sections.html. [Accessed: 20-Apr- 2013].

[46] E. Marcotte, “Responsive Web Design · An A List Apart Article.” [Online]. Available: http://alistapart.com/article/responsive-web-design. [Accessed: 07-Jul-2013]. [47] N. Pettit, “Beginner’s Guide to Responsive Web Design - Treehouse Blog.” [Online].

Available: http://blog.teamtreehouse.com/beginners-guide-to-responsive-web- design. [Accessed: 07-Jul-2013].

[48] W3C, “Media Queries.” [Online]. Available: http://www.w3.org/TR/css3- mediaqueries/. [Accessed: 07-Jul-2013].

[49] “Using the viewport meta tag to control layout on mobile browsers - Mozilla | MDN.” [Online]. Available: https://developer.mozilla.org/en-

US/docs/Mozilla/Mobile/Viewport_meta_tag. [Accessed: 07-Jul-2013]. [50] “Targeting Screens from Web Apps | Android Developers.” [Online]. Available:

http://developer.android.com/guide/webapps/targeting.html. [Accessed: 07-Jul- 2013].

[51] Apple, “Safari Web Content Guide: Configuring the Viewport.” [Online]. Available: https://developer.apple.com/library/safari/#documentation/AppleApplications/Refer ence/SafariWebContent/UsingtheViewport/UsingtheViewport.html. [Accessed: 07- Jul-2013].

[52] “CSS: Responsive Navigation Menu.” [Online]. Available:

http://webdesignerwall.com/tutorials/css-responsive-navigation-menu. [Accessed: 07-Jul-2013].

[53] “Tabs | jQuery UI.” [Online]. Available: http://jqueryui.com/tabs/#ajax. [Accessed: 07-Jul-2013].

[54] “Playing Videos in HTML | w3schools.com.” [Online]. Available:

http://www.w3schools.com/html/html_videos.asp. [Accessed: 20-Jul-2013]. [55] T. Leadbetter., “The video element | HTML5 Doctor.” [Online]. Available:

http://html5doctor.com/the-video-element/. [Accessed: 20-Jul-2013]. [56] B. A. Peter Lubbers and F. Salim, Pro HTML5 Programming. APress, 2010. [57] J. Rocheleau, “HTML5 Videos: 10 Things Designers Need to Know.” [Online].

Available: http://www.hongkiat.com/blog/html5-videos-things-you-need-to-know/. [58] O. O. N. V. I. F. Inc., “ONVIF TM Streaming Specification,” 2012.

97

[59] S. Deering, “HTML5 Video RTSP Live Streams | jQuery4u.” [Online]. Available: http://www.jquery4u.com/flowplayer/html5-video-rtsp-live-streams/#.T9hzRjkpK0x. [Accessed: 20-Jul-2013].

[60] “VideoLAN - Official page for VLC media player, the Open Source video framework!” [Online]. Available: http://www.videolan.org/vlc/. [Accessed: 20-Jul-2013].

[61] “Documentation:WebPlugin - VideoLAN Wiki.” [Online]. Available:

http://wiki.videolan.org/Documentation:WebPlugin/. [Accessed: 20-Jul-2013]. [62] “VideoLAN - Streaming Features list.” [Online]. Available:

http://www.videolan.org/streaming-features.html. [Accessed: 20-Jul-2013]. [63] ONVIF, “ONVIF TM Application Programmer’s Guide,” 2011.

[64] “Window setInterval() Method.” [Online]. Available:

http://www.w3schools.com/jsref/met_win_setinterval.asp. [Accessed: 20-Jul-2013]. [65] “Slider | jQuery UI.” [Online]. Available: http://jqueryui.com/slider/. [Accessed: 21-

Jul-2013].

[66] “HTML5 Server-Sent Events | w3schools.com.” [Online]. Available:

http://www.w3schools.com/html/html5_serversentevents.asp. [Accessed: 21-Jul- 2013].

99

Anexos

Anexo A - Regras adotadas para a definição dos URIs do

serviço web REST

As regras adotadas para a definição dos URI do serviço web REST são:

1. O serviço é um proxy ONVIF, e portanto os recursos são os serviços de câmaras ONVIF (e respetivos recursos/entidades/conceitos ONVIF).

2. Para definir por completo um recurso ONVIF é necessário fornecer o URI de acesso ao serviço na câmara pretendida:

a. fica no formato /onvif/{serviço onvif},{endereco_servico_codificado}

b. o endereço do serviço na câmara não tem relação hierárquica com o serviço, daí a utilização da "," como separador para uma relação não hierárquica.

c. a codificação do URI de acesso ao serviço na câmara é necessário, pois o mesmo contém "/" o que na definição do recurso REST representa hierarquia. Como foi dito anteriormente o URI não tem relação hierárquica com o serviço ONVIF.

3. A biblioteca abstrai algumas entidades/conceitos ONVIF e o proxy reflete o mesmo nível de abstração.

4. O GET de um dado serviço ONVIF deverá devolver lista de recursos acessíveis a partir dessa “página”.

5. Os recursos devem devolver a lista de recursos a lista de recursos acessíveis, bem como a lista de operações sobre esses mesmos recursos. Esta informação deve ser refletida como uma lista de recursos.

6. Comandos/funções da biblioteca que sejam "sujeitos" são convertidos em recursos. 7. Todos os comandos que são verbos são convertidos em parâmetros no corpo de

100

8. Na especificação ONVIF existem recursos para os quais não faz sentido fazer um GET, pelo que há recursos apenas com PUT/POST/DELETE.

101

Anexo B – Lista de recursos REST e operações sobre os

mesmos

Na primeira coluna da tabela apresentada estão a funções implementadas na biblioteca UMOC. Nesta tabela não estão representados os parâmetros enviados no corpo do pedido.

Função da biblioteca UMOC Verbo URI (sufixo) Descrição

devicemgmt URI base: /onvif/devicemgmt,{endereco_servico_codificado} get_Device_Info_LL GET / Devolve as URI válidas para o serviço.

get_Device_Info_LL GET /DeviceInformation

Devolve as informações sobre cada câmara: fabricante, modelo, versão firmware e hardware e número de série.

reboot_LL PUT / Faz reboot a um dispositivo específico.

set_SystemFactory_LL PUT /SystemFactoryDefault

Recarrega o valor dos parâmetros da câmara para os seus valores de fábrica.

Hard (altera todos os parâmetros); Soft (os parâmetros relativos ao vendedor não são afectados).

get_Capabilities_LL GET /capabilities Devolve as capacidades de um dispositivo.

get_DateTime_LL GET /SystemDateAndTime Devolve as configurações data e hora de um dispositivo.

set_DateTime_LL PUT /SystemDateAndTime Altera a data e hora de um dispositivo. Type: (0 - Manual ; 1 - NTP)

get_Scopes_LL GET /scopes Devolve a lista de scopes de um dispositivo, e o tipo de cada um deles - fixed ou configurable.

remove_Scope_LL DELETE /scopes/{scope} Remove um scope de um dispositivo (do tipo Configurable)

add_Scope_LL POST /scopes Adiciona um scope (do tipo Configurable) a um dispositivo.

get_NTP_LL GET /ntp Devolve as configurações NTP de um dispositivo. set_NTP_LL PUT /ntp Altera as configurações NTP de um dispositivo.

get_DNS_LL GET /dns Devolve as configurações DNS de um dispositivo.

set_DNS_LL PUT /dns Altera as configurações DNS de um dispositivo.