Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHOD FOR RECORDING AND PLAYING BACK A MEDIA-SYNCHRONIZED USER BROWSING SESSION
Document Type and Number:
WIPO Patent Application WO/2018/129598
Kind Code:
A1
Abstract:
The present invention describes a web application containing a module comprised of a recording submodule and a playback submodule. When recording of a session is initiated, there commences a process of capturing media and listening to certain application events broadcast according to the user's browsing, in conjunction with the state of the application and the date/time, so that the actions performed in the application in conjunction with the audio and video capture can be played back later in synchronicity.

Inventors:
SANTOS MARCUS (BR)
Application Number:
PCT/BR2017/000002
Publication Date:
July 19, 2018
Filing Date:
January 11, 2017
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
FOUVRY GEOFFREY (BR)
SANTOS MARCUS (BR)
International Classes:
G06F9/44; G06F3/048; G06F17/30; G09B5/00
Foreign References:
US20120089905A12012-04-12
US8566718B12013-10-22
US20070015118A12007-01-18
US20170070559A12017-03-09
Attorney, Agent or Firm:
GRUENBAUM, POSSINHAS & TEIXEIRA LTDA (BR)
Download PDF:
Claims:
REIVINDICAÇÕES

1. Método para gravar e reproduzir sessão de navegação do usuário sincronizada com mídia CARACTERIZADO pelo fato de compreender as etapas de:

a. Definição ou parametrização dos eventos a serem capturados; b. Adequação do código fonte;

c. Gravação dos itens de comando;

d. Interação com a webcam (ou similar);

e. Criação de meta comandos;

f. Disponibilização da gravação da sessão;

g. Serialização da lista dos itens de comando;

h. Deserialização da lista de itens de comandos, e

i. Agendamento da execução dos comandos.

2. Método, de acordo com a reivindicação 1 ,

CARACTERIZADO pelo fato de que na etapa (a), a definição ou parametrização dos eventos a serem capturados ou todos os eventos são capazes de reproduzir a sessão de forma satisfatória, que pode variar para cada caso particular, onde a raiz de todas as ações na aplicação vem de eventos que podem ser entradas de usuário, entradas de servidor e entradas do sistema operacional.

3. Método, de acordo com a reivindicação 1 ,

CARACTERIZADO pelo fato de que na etapa (b), a adequação do código fonte é realizada para que determinados eventos de entrada de usuário, entradas de servidor e entradas do sistema operacional sejam

repassados seletivamente pela aplicação como eventos da aplicação para que sejam escutados pelo submódulo de gravação e sejam armazenados na lista de itens de comando.

4. Método, de acordo com a reivindicação 1 ,

CARACTERIZADO pelo fato de que na etapa (c), a gravação dos itens de comando, que possuem um objeto concreto de comando e outros dados, são necessários para recriar esse comando de forma correta, depois que estes foram serializados.

5. Método, de acordo com a reivindicação 1 ,

CARACTERIZADO peio fato de que na etapa (c), a gravação nos itens de comando, do objeto de comando, um objeto que representa estado da aplicação antes da ação ter sido executada, é realizada para obter um comportamento consistente no momento da reprodução e por fim um objeto de data/hora para marcar o momento exato da ação.

6. Método, de acordo com a reivindicação 1 ,

CARACTERIZADO pelo fato de que na etapa (d), a interação com a webcam ou similar é para gravar seus fluxos de entrada.

7. Método, de acordo com a reivindicação 1 ,

CARACTERIZADO pelo fato de que na etapa (e), a criação de meta comandos é para permitir ao usuário as ações de iniciar, pausar e retomar a gravação, onde tais eventos são armazenados para que se possa excluir o tempo pausado durante uma gravação, por exemplo, e sinalizar informações de controle ao módulo.

8. Método, de acordo cem a reivindicação 1 ,

CARACTERIZADO pelo fato de que na etapa (f), a disponibilização da gravação da sessão em memória momentos após o seu término é para permitir ao usuário a verificação da qualidade da gravação.

9. Método, de acordo com a reivindicação 1 ,

CARACTERIZADO pelo fato de que na etapa (g), a serialização da lista dos itens de comando é para permitir que esses objetos sejam

representados em uma forma serializada dentro de um sistema de armazenamento permanente que pode ser local ou remoto.

10. Método, de acordo com a reivindicação 1 ,

CARACTERIZADO pelo fato de que na etapa (h), a deserialização da lista de itens de comandos e instanciação de novos objetos é realizada com base nos objetos serializados recebidos.

11. Método, de acordo com a reivindicação 1 ,

CARACTERIZADO peio fato de que na etapa (i), o agendamento da execução dos comandos é de acordo com o instante no tempo capturado durante a gravação e ajustado a possíveis pausas que possam ter ocorrido.

12. Método, de acordo com qualquer uma das reivindicações de 1 a 11 , CARACTERIZADO pelo fato de que na reprodução, com base nas entradas do usuário, são identificados os arquivos a serem baixados do serviço de armazenamento para inícialização do procedimento.

13. Método, de acordo com qualquer uma das reivindicações de 1 a 12, CARACTERIZADO pelo fato de que antes que cada comando seja executado, é verificado se a aplicação está num estado consistente para que a ação possa ser realizada, onde a açâo de um dado comando é mover um item para o canto da tela e se o usuário pausar a reprodução momento antes de este comando ser executado e remover esse item da tela, a aplicação, quando retomar a execução da reprodução, precisará recriar o item e adicionar ele novamente na tela, ficando essa informação no objeto que guarda o estado da aplicação dentro do item de comando.

14. Método, de acordo com a reivindicação 13,

CARACTERIZADO pelo fato dos elementos serem ajustados na aplicação para que se possa ter uma execução adequada se a aplicação não estiver num estado consistente.

15. Método, de acordo com qualquer uma das reivindicações de 1 a 14, CARACTERIZADO pelo fato de a disponibilização das ações de "pausar", "retroceder" e "avançar" a reprodução de uma dada gravação, tanto para a reprodução dos arquivos mídia quanto para o agendamento da execução dos comandos, operarem em sincronia, cancelando os agendamento de execuções dos comandos anteriores e fazendo um novo reagendamento com base no novo tempo de início para o casos de "avançar" e "retroceder".

16. Método, de acordo com qualquer uma das reivindicações de 1 a 15, CARACTERIZADO pelo fato de ser implementado por método de computador para gravar e reproduzir sessão de navegação do usuário juntamente com arquivos de mídia (áudio e vídeo) de maneira

sincronizada.

REIVINDICAÇÕES MODIFICADAS

Recebidas pela Secretaria Internacional no dia 30 de outubro de 2017 (30.10.2017)

1. Método para gravar e reproduzir sessão de navegação do usuário sincronizada com mídia CARACTERIZADO pelo fato de compreender as etapas de:

5 a. Definição ou parametrização dos eventos a serem capturados; b. Adequação do código fonte;

c. Gravação dos itens de comando;

d. Interação com a webcam (ou similar);

e. Criação de meta comandos;

10 f. Coordenação temporal dos arquivos de mídia (áudio e/ou vídeo) e dos comandos gerados pela navegação do usuário durante o processo de gravação para depois reproduzir ambos, isto é, a navegação junto com a mídia de maneira síncrona e em paralelo,

g. Disponibilização da gravação da sessão;

15 h. Serialização da coleção dos itens de comando;

i. Deserialização da coleção dos itens de comandos,

j. Disponibilização dos arquivos mídia a serem sincronizados a reprodução da sessão, e

k. Agendamento da execução dos comandos.

20 2. Método, de acordo com a reivindicação 1 , CARACTERIZADO pelo fato de que na etapa (a), a definição ou parametrização dos eventos a serem capturados pode incluir todos os somente os eventos escolhidos que são suficientes para reproduzir a sessão de forma satisfatória, que pode variar para cada caso particular de aplicação, incluindo eventos de alto nível da

25 aplicação que podem ser gerado pelo usuário, eventos gerados pelo

servidor e eventos gerados pelo sistema operacional.

3. Método, de acordo com a reivindicação 1. CARACTERIZADO pelo fato de que na etapa (b), a adequação do código fonte é realizada para que determinados eventos de entrada de usuário, entradas de

30 servidor e entradas do sistema operacional sejam repassados

seletivamente pela aplicação como eventos da aplicação para que sejam

FOLHA MODIFICADA (ARTIGO 19) escutados pelo submódulo de gravação e sejam armazenados na lista de itens de comando.

4. Método, de acordo com a reivindicação 1. CARACTERIZADO pelo fato de que na etapa (c), a gravação dos itens de comando, que

5 possuem um objeto concreto de comando e outros dados, são

necessários para recriar esse comando de forma correta, depois que estes foram serializados.

5. Método, de acordo com a reivindicação 1 , CARACTERIZADO pelo fato de que na etapa (c), a gravação nos itens de comando, do objeto

10 de comando, um objeto que representa estado da aplicação antes da ação ter sido executada, é realizada para obter um comportamento consistente no momento da reprodução e por fim um objeto de data hora para marcar o momento exato da ação.

6. Método, de acordo com a reivindicação 1. CARACTERIZADO

15 pelo fato de que na etapa (d), a interação com a webcam ou similar é para gravar seus fluxos de entrada.

7. Método, de acordo com a reivindicação 1. CARACTERIZADO pelo fato de que na etapa (e), a criação de meta comandos ó para permitir ao usuário as ações de iniciar, pausar e retomar a gravação, onde tais

20 eventos são armazenados para que se possa excluir o tempo pausado durante uma gravação, por exemplo, e sinalizar informações de controle ao módulo.

8. Método, de acordo com a reivindicação 1 , CARACTERIZADO pelo fato de que na etapa (f), arquivos de mídia (áudio ou áudio e vídeo) são

25 gravados de maneira síncrona e paralela a gravação de comandos

gerados pela navegação do usuário, permitindo pausar tanto a gravação dos arquivos de mídia quanto a gravação dos comandos ao mesmo tempo, e reiniciar a gravação de ambos na mesma linha do tempo.

9. Método, de acordo com a reivindicação 1. CARACTERIZADO pelo fato 30 de que na etapa (g), a disponibilização da gravação da sessão em

FOLHA MODIFICADA (ARTIGO 19) memória momentos após o seu término é para permitir ao usuário a verificação da qualidade da gravação.

10. Método, de acordo com a reivindicação 1. CARACTERIZADO pelo fato de que na etapa (h), a serialização da lista dos itens de comando é

5 para permitir que esses objetos sejam representados em uma forma

serializada dentro de um sistema de armazenamento permanente que pode ser local ou remoto.

11. Método, de acordo com a reivindicação 1. CARACTERIZADO pelo fato de que na etapa (i), a deserialização da lista de itens de comandos e ío instanciação de novos objetos é realizada com base nos objetos

serializados recebidos.

12. Método, de acordo com a reivindicação 1. CARACTERIZADO pelo fato de que na etapa (k), o agendamento do processo de reprodução (a) incluindo a execução dos comandos é de acordo com o instante no tempo

15 capturado durante a gravação e ajustado a possíveis pausas que possam ter ocorrido, (b) usa um determinado ponto no tempo dentro da duração da reprodução para (1) começar a reprodução dos arquivos de mídia em paralelo e sincronamente com os comandos, (2) incluir apenas os comandos a serem executados após o ponto escolhido no tempo.

20 3. Método, de acordo com a reivindicação 1 , CARACTERIZADO pelo fato de que na etapa (j). a captura do arquivo de mídia é guardado em memória temporária.

14. Método, de acordo com qualquer uma das reivindicações de 1 a 13, CARACTERIZADO pelo fato de que na reprodução, são identificados os

25 arquivos a serem baixados do serviço de armazenamento para

inicialização do procedimento, que incluem os arquivos para a reprodução da navegação da sessão pelo usuário (comandos) e os arquivos de mídia a serem sincronizados com a reprodução da navegação da sessão.

15. Método, de acordo com qualquer uma das reivindicações de 1 a 14, 30 CARACTERIZADO pelo fato de que antes que cada comando seja

executado, é verificado se a aplicação está num estado consistente para

FOLHA MODIFICADA (ARTIGO 19) que a ação possa ser realizada, onde a ação de um dado comando é mover um item para o canto da tela e se o usuário pausar a reprodução momento antes de este comando ser executado e remover esse item da tela, a aplicação, quando retomar a execução da reprodução, precisará

5 recriar o item e adicionar ele novamente na tela, ficando essa informação no objeto que guarda o estado da aplicação dentro do item de comando; método que opera em conexão com a verificação da sequência temporal, para reiniciar a reprodução do vídeo no momento certo; método que pode detectar inconsistências com base em um número não pré-determinado

10 de estados criados através de uma sessão gravada pelo usuário

aleatoriamente.

16. Método, de acordo com a reivindicação 15, CARACTERIZADO pelo fato dos elementos serem ajustados na aplicação para que se possa ter uma execução adequada se a aplicação não estiver num estado

15 consistente, que não interrompe a execução da aplicação, mas corrige o estado dela no momento.

17. Método, de acordo com qualquer uma das reivindicações de 1 a 16, CARACTERIZADO pelo fato de a disponibilização das ações de "pausar", "retroceder" e "avançar" a reprodução de uma dada gravação, tanto para

20 a reprodução em paralelo e sincronia com os arquivos midia quanto para o agendamento da execução dos comandos, operarem em sincronia, cancelando os agendamento de execuções dos comandos anteriores e fazendo um novo reagendamento com base no novo tempo de início para o casos de "avançar" e "retroceder" e para os arquivos de mídia retomar a

25 reprodução na nova sequência temporal escolhida pelo usuário em

paralelo e de maneira síncrona com as sequências dos comandos.

18. Método, de acordo com qualquer uma das reivindicações de 1 a 17, CARACTERIZADO pelo fato de ser implementado por método de computador para (1) gravar (a) sessão de navegação (b) e de maneira

30 sincronizada e paralela a captura de vídeo ou mídia (c) todos os estados sucessivos criado pela interações do usuário com aplicação sem limitação

FOLHA MODIFICADA (ARTIGO 19) de combinações possíveis, (2) reproduzir (a) sessão de navegação do usuário (b) e de maneira sincronizada e a paralela os arquivos de mídia (áudio e vídeo), (3) detectar qualquer inconsistência de estado de aplicação sem limitação a uma lista de sequencias predeterminada, mais

5 ao contrário, consertando para qualquer sequência de estados gerados pelo usuário no momento das gravações que implica combinações possíveis infinitas, e consertando o estado da aplicação sem parar a aplicação, (4) pausar avançar e retroceder na sequência de comandos que agiliza a reprodução de sessão quando o media de maneira síncrona ío e paralela pausando, avançando e retrocedendo para o novo ponto

escolhido dentro da duração do processo de reprodução.

FOLHA MODIFICADA (ARTIGO 19)

Description:
MÉTODO PARA GRAVAR E REPRODUZIR SESSÃO DE NAVEGAÇÃO

DO USUÁRIO SINCRONIZADA COM MÍDIA CAMPO DE APLICAÇÃO

A presente invenção está relacionada a sistemas de gravação e reprodução, bem como arquivos de mídia de áudio e vídeo.

ANTECEDENTES DA INVENÇÃO

O ambiente de execução embutido nos navegadores da web, tais como Javascript, Java e Flash juntamente com "frameworks" front-end modernos, como, por exemplo, Angularjs, React, JQuery, dentre outros, têm fomentado o desenvolvimento de muitas aplicações web. Grandes quantidades de aplicações web existentes são aplicações cliente que são baixadas remotamente do servidor através do navegador e executadas em um ambiente de execução embutido nos navegadores. Essas aplicações fornecem aos usuários ricas interfaces, que interagem com servidores remotos e baixam mídias através da Internet.

A sofisticação dessas aplicações aumentou a necessidade de seções de ajuda e tutoriais para o usuário entender como usar a aplicação e executar tarefas específicas nelas. Os métodos atuais de tutoriais fornecidos, para explicar como usar uma aplicação, estão geralmente em duas categorias. No primeiro caso, constitui-se de texto e imagens da aplicação, a fim de explicar a sequência das etapas para o usuário ser capaz de executar uma determinada tarefa. O primeiro método requer que o usuário leia o texto que explica como usar a aplicação, que pode ser longo e trabalhoso. O segundo caso de tutoriais envolve a captura de tela da aplicação em execução, enquanto ao mesmo tempo um arquivo de áudio/vídeo é gravado a partir da webcam. Este arquivo de áudio/vídeo oriundo da webcam registra o tutor explicando quais passos são necessários para executar uma dada tarefa. O vídeo é então reproduzido com a captura de tela da aplicação no fundo e num canto da tela, o vídeo ou áudio do "tutor" explica o que está acontecendo e quais etapas precisam ser executadas. Às vezes, há somente uma voz sobre a captura de tela da aplicação. Este segundo método é

simplesmente um vídeo, ou uma sequência de captura da tela/pixels junto com som e vídeo do tutor. O segundo método é geralmente mais fácil para o usuário que o primeiro, mas requer a execução em duas janelas diferentes do navegador para assim acompanhar os passos. A aplicação é executada em uma janela enquanto o vídeo tutorial em outra. O usuário normalmente precisará pausar na janela do tutorial e voltar para a aplicação para executar as etapas explicadas no vídeo tutorial. Esse processo aconteceria de um lado para o outro, da janela do tutorial para a janela da aplicação para assim tentar reproduzir na aplicação as etapas explicadas.

Documentos do Estado da Técnica

O documento US 7330887 B1 , "Method and system for testing web- based applications " descreve uma maneira de gravar uma série de eventos com um temporizador, porém, este documento difere da presente invenção pois não inclui a capacidade de reprodução, nem qualquer forma de gravar arquivos de mídia (áudio e vídeo) através da webcam ou outro periférico.

O documento US 2007/0106692 A1 , "System and method for recording and replaying a session with a web server without recreating the actual session " descreve como gravar uma sessão web para fins de ajuda e suporte e tem a capacidade de reproduzir a gravação. Este documento difere da presente invenção pois escuta a eventos de entrada do usuário e metadados. Neste documento americano, o sistema funciona como um rastreador de pacote de dados, registrando o que está no pacote, o que significa que os dados que são passados através de GET, PUT, POST e outros verbos do protocolo HTTP são analisados. Já na presente invenção, o gravador está dentro da aplicação, o que significa que todos os eventos podem ser gravados a partir da aplicação

independentemente de haver transferências de dados entre o servidor ou não, sem contar a presente invenção não se restringe a termos que trocar dados com um servidor. Ainda, o método deste documento americano registra os metadados dos pacotes trocados numa sessão e usa estes metadados para reproduzir a sessão sem ter que recriá-la. Jà a presente invenção é capaz de gravar todos os eventos da aplicação, não apenas os metadados do pacote que é trocado entre a aplicação e o servidor e na verdade a presente invenção reproduz a sessão juntamente com os arquivos de áudio/video em perfeita harmonia. A gravação dos arquivos de mídia é um processo separado da gravação da sessão. Em outras palavras, todos os eventos podem ser gravados na presente invenção, se forem parametrizados, e ao mesmo tempo também temos uma gravação dos arquivos de mídia (áudio e vídeo). Na reprodução, as ações do usuário que foram parametrizadas são replicadas, mas a webcam não estará executando a mesma tarefa que realizou na fase de gravação.

O documento US 2002/0065912 A1 , "Web session cotlaboration ", descreve um método de monitoramento das interações de uma aplicação web no lado do servidor. Este método não registra as ações que aconteceram no navegador sem uma conexão, isto é, sem interagir com o servidor, bem como não há arquivos de mídia sincronizados com a navegação envolvidos nessa patente. Já na presente invenção, ocorre a gravação da ação de um scroll ou pode-se, ainda, riscar um documento pdf, ou mesmo outras ações que sequer envolvem qualquer transação com um servidor remoto.

O documento US 7529798 B2, "System and method forrecord and playback of collaborative web browsing session", descreve um método capaz de gravar a captura de tela da aplicação para reprodução posterior, diferindo da presente invenção, que grava uma representação do comportamento da aplicação para cada ação do usuário. O documento americano aqui analisado registra a captura de tela para determinadas regiões da tela do usuário, visto que a presente invenção registra as ações dentro da aplicação sob a forma de comandos e também grava os arquivos de áudio e video por meio de uma webcam ou similar a fim de reproduzir mais tarde ambos sincronamente.

O documento US 2011/0173239 A1 , "Web Application Record- Replay System and Method ", descreve um dispositivo capaz de registrar as ações do usuário e se propõe a reproduzi-las. Este documento difere da presente invenção devido a ausência do registro do estado de aplicação para cada ação, bem como a ausência de arquivos de mídia sincronizados as ações do usuário durante a sessão. A gravação dos arquivos de mídia também se faz diferente. Na reprodução, a presente invenção não repete a ação de gravar novamente os arquivos de mídia, na reprodução da sessão, a mídia não será "gravada novamente", ao invés disto, reproduz-se a mídia que já foi gravada.

BREVE DESCRIÇÃO DA INVENÇÃO

Uma aplicação web contém um módulo formado por um submódulo de gravação e outro submódulo de reprodução. Quando se inicializa a gravação da sessão, sincronizada com mídia, inícia-se o processo de captura de mídia e escuta de determinados eventos da aplicação emitidos conforme a navegação do usuário juntamente com o estado da aplicação e a data/hora, de modo que as ações realizadas na aplicação juntamente com a captura de áudio e vídeo possam ser reproduzidas mais tarde em sincronia.

O módulo interage com a "webcam" ou a câmera e o microfone em separado instalados na máquina para capturar a mídia a ser reproduzida mais tarde. O submódulo de gravação interage ao mesmo tempo com os eventos lançados pela aplicação para indicar o tipo de navegação a ser gravada de forma sincronizada com o arquivo de mídia, representam-se essas ações sob a forma de comandos. Para cada evento capturado grava-se o comando, o estado da aplicação e a data/hora a fim de permitir que o usuário possa pausar, tanto na gravação quanto na reprodução. Ao acionar o processo de reprodução, o módulo recupera os dados do serviço de armazenamento, que contém os comandos, os arquivos de mídia, o estado da aplicação para cada evento e a data/hora gerados durante o processo de gravação. Isto é feito a fim de reproduzir a sequência da navegação gravada pelo usuário de forma síncrona com os arquivos de áudio e/ou vídeo. O usuário pode avançar ou retroceder no modo reprodução. O usuário pode continuar a navegar enquanto o processo de gravação ou reprodução é interrompido ou pausado e pode até interagir ao mesmo tempo em que o modo de reprodução do está sendo executado.

BREVE DESCRIÇÃO DAS FIGURAS

A figura 1 representa o diagrama de blocos do ambiente de uma aplicação web.

A figura 2 representa o diagrama de blocos do submódulo de gravação.

A figura 3 representa o diagrama de blocos do submódulo de reprodução.

A figura 4 representa a estrutura exemplificada do serviço de armazenamento.

A figura 5 representa uma exemplificação do padrão de projeto comando (UML do Padrão de Projeto Comando).

A figura 6 representa um exemplo de fluxograma para gravar determinados eventos de uma sessão de navegação de forma síncrona com os arquivos de mídia (áudio e vídeo).

A figura 7 representa um exemplo de fluxograma para reproduzir uma sessão gravada previamente de maneira síncrona com os arquivos de mídia (áudio e vídeo).

DESCRIÇÃO DETALHADA DA INVENÇÃO

Uma ou mais formas de realização do presente invento

proporcionam métodos para gravar determinados eventos da aplicação numa lista de comandos juntamente com o estado da aplicação para cada evento e a data/hora em que acontecem, sincronizados com mídia. Esses eventos, o estado de aplicação corrente e a data/hora são armazenados em um arquivo juntamente com os arquivos de mídia (que podem ser arquivos de vídeo e áudio separados, áudio apenas ou vídeo/áudio combinados em um único arquivo). A mídia é o áudio + vídeo da pessoa que está executando a sessão da web. Esse método permite que uma pessoa apresente como usar uma aplicação, por exemplo, mas em vez de mostrar um vídeo de pixels da aplicação, a aplicação está sendo executada ao vivo como se tivesse alguém navegando. O usuário vai então assistir a gravação da navegação junto com os arquivos de mídia sincronizadamente e pode pausar a qualquer momento e usar a aplicação em vez de ter que abrir duas janelas, conforme descrito anteriormente. A sessão gravada pode ser usada para apresentar pontos importantes em uma navegação e ensinar ao usuário como localizar os dados, por exemplo. Numa forma de realização do presente invento, uma aplicação web contém um módulo que contem dois submódulos. O primeiro submódulo é o de gravação que interage com o ambiente de execução do navegador para interceptar eventos que foram previamente e

seletivamente parametrizados a fim de serem capturados. Esses eventos correspondem a entradas de dados recebidas pela aplicação web, tais como entradas do usuário, entradas do servidor remoto e entradas do sistema operacional (por exemplo, temporizador, eventos de alarme etc) em que o ambiente de execução do navegador está sendo executado. O submódulo de gravação também captura o estado da aplicação para cada evento e interage com a webcam ou outro dispositivo de áudio e vídeo, a fim de capturar os arquivos de mídia para serem sincronizados com a navegação do usuário. Na reprodução, os arquivos armazenados são lidos pelo segundo submódulo. que é o submódulo de reprodução. A reprodução acontece com base nos dados dos arquivos armazenados para simular os eventos de entrada previamente selecionados que ocorreram durante a sessão de gravação, enquanto os arquivos de áudio e vídeo são reproduzidos de forma síncrona aos comandos/eventos.

O módulo global pode ser dividido em dois submódulos: primeiro, o submódulo de gravação; segundo, o submódulo de reprodução. O primeiro submódulo acessa a câmera e o microfone do usuário e captura os arquivos de mídia. Ele também escuta os eventos que foram

parametrizados para serem capturados. Quando esses eventos são lançados pela aplicação, provenientes da açâo do usuário 220, das respostas do servidor 225 ou mesmo de entradas do sistema operacional 215, os comandos sáo capturados. Cada comando representa uma ação especifica do usuário na aplicação (ou navegação). Junto com os comandos, o estado da aplicação também é registrado para cada ação do usuário, a fim de garantir consistência no modo de reprodução e também captura-se a data/hora dessa ação. Ao final da gravação, os arquivos de navegação obtidos juntamente com os arquivos de mídia são

disponibilizados na memória (RAM) para o usuário reproduzir e decidir se eles têm qualidade adequada para serem enviados ao serviço de armazenamento ou se eles devem ser destruídos porque a gravação não foi satisfatória.

O módulo global também contém um segundo submódulo responsável pela reprodução da gravação (submódulo de reprodução). O processo começa com o usuário acionando a reprodução de uma determinada gravação feita anteriormente. Os arquivos gravados podem estar na memória RAM, quando o usuário acaba de concluir uma gravação, mas ainda não enviou esses arquivos para o serviço de armazenamento. O usuário também pode reproduzir uma gravação feita previamente e armazenada no serviço de armazenamento (tanto pelo próprio usuário quanto por outro). Uma vez que os arquivos de mídia foram carregados junto com os comandos, os estados da aplicação e a data/hora desses eventos, o módulo inicia o processo de reprodução, gerenciando a sincronização entre os arquivos de mídia e os comandos. As variáveis que representam o estado da aplicação são mantidas em cada item de comando oriundos do processo de gravação e são usadas para verificar se as condições atuais da aplicação são adequadas para a execução dos comandos. Caso não sejam, o módulo pode usar o estado gravado e corrigir o estado atual da aplicação. Em outras palavras, caso o estado atual da aplicação não seja compatível com a execução do comando corrente, o estado é trocado para o estado armazenado junto ao comando.

A figura 1 representa o diagrama de blocos do ambiente de uma aplicação web. No lado do cliente, um computador 100 está acoplado a (ou inclui) um teclado 105, um mouse 110, um alto-íalante 117, um microfone 115 e uma câmara 120 ou microfone e câmara combinados (webcam) para capturar as entradas do usuário, bem como arquivos de mídia de áudio e vídeo do usuário oriundos da sessão. O sistema operacional 125 do computador do cliente 100 suporta uma camada de aplicação 130 incluindo um ou mais software(s) tal como um navegador de Internet 135, com ambiente de execução embutido para plataformas de programação tais como javascript, java, Flash e similares (por exemplo, instalado via Plug-ins baixados e técnicas semelhantes, etc). A camada de aplicação também inclui um ambiente de execução autónomo, tal como o ambiente de execução 140 para tais plataformas de

programação (por exemplo, Java Runtime Environment (JRE), Adobe Integrated Runtime (AIR) e semelhantes). Numa forma de realização, uma aplicação web 145 é baixada a partir de um sitio na web através do navegador de Internet 135 e é apresentada como uma página web dentro do ambiente de execução embutido no navegador. Por exemplo, um usuário pode carregar uma página web no navegador de Internet 135, cuja URL aponta para um arquivo .swf (ou seja, arquivo Flash Player). Neste exemplo, a aplicação Web 145 é baixada como um arquivo .swf e apresentada numa página Web através do ambiente de execução Flash (também conhecido como máquina virtual Flash do Flash Player) que foi instalada no navegador de Internet 135. Em alternativa, um ambiente de execução autónomo, tal como o ambiente de execução 140, pode suportar uma aplicação de Internet autónoma 150 que funciona fora dos limites do navegador de Internet 135, mas oferecem as mesmas funcionalidades ou semelhanças de uma aplicação web 145. Em qualquer dos casos, as porções apresentadas da aplicação web 145 ou aplicação de Internet autónoma 150 (por exemplo, interfaces gráficas, etc.) são apresentadas no navegador de Internet 135 ou no ambiente de execução 140, respectivamente, num monitor 175 que está acoplado ao computador 100.

A aplicação web 145 comunica através de uma rede 155, tal como a Internet, com um servidor de aplicações 160 que roda num servidor remoto 170 e recebe dados e outros conteúdos do servidor de aplicações. Conforme utilizado aqui, as referências à aplicação web 145 irão também aplicar-se à aplicação de internet autónoma 150, dadas as suas

semelhanças. Adicionalmente, na ilustração da figura 1 , um serviço de armazenamento 165 é proporcionado pelo servidor remoto 170. Os dados podem ser recuperados mais tarde pela aplicação 145 conforme detalharemos a seguir. Antes do serviço de armazenamento ser acionado, a aplicação fornece os arquivos de sessão e os arquivos de mídia em memória, no ambiente de execução 140. Os comandos (gravações de sessão) e os estados da aplicação estão em memória em um formato não serializado juntamente com os arquivos de áudio e vídeo. Esses dados estão disponíveis em memória primeiro para que o usuário possa verificar se a sessão gravada está adequada. Se a sessão gravada for de qualidade adequada, o usuário pode enviar os dados para o serviço de armazenamento 165. O conteúdo dos dados salvos no serviço de armazenamento 165 consiste nos arquivos de mídia, que podem ser o arquivo de áudio, arquivos de áudio e vídeo separados, ou um único arquivo de áudio/vídeo combinados, juntamente com os comandos, os estados da aplicação e a data/hora para cada comando, conforme será descrito posteriormente. O serviço de armazenamento 165 pode ser fornecido como um serviço dentro do servidor de aplicação 160, ou como um serviço independente dentro do servidor remoto 170,. (conforme ilustrado na Figura 1). Cabe ressaltar que, em outras formas de realização, o serviço de armazenamento 165 pode estar em outro local, incluindo, por exemplo, um servidor remoto ou computador-cliente 100 diferente.

A figura 2 ilustra o processo de gravação do primeiro submódulo, o submódulo de gravação, como um diagrama de blocos formado por componentes de uma aplicação e a interação dos componentes dentro do ambiente da aplicação. Como muitos ambientes de execução nos quais essa explicação se aplica são baseados em plataformas de programação que se enquadram no paradigma de programação orientada a objetos (por exemplo, Java, ActionScript para Flash, etc), as explanações aqui apresentadas utilizarão tal paradigma para descrever. No entanto, a funcionalidade descrita para a aplicação web 145 pode ser escrita utilizando programação procedural ou qualquer outro paradigma de linguagem de programação existente. O submódulo de gravação 200 é responsável por gravar a seção e os arquivos de mídia. O processo inicializa com o usuário solicitando uma gravação de sessão e mídia, com o teclado 105 e mousel 10 solicitando 260 a aplicação web 145 e gerando entradas de eventos do usuário 220 a fim de inicializar o processo de gravação. A aplicação 145, através do caminho 270, solicita ao

manipulador de eventos da aplicação 210 dentro do submódulo de gravação 200 para iniciar o processo de gravação.

Quando o processo é iniciado, a aplicação captura eventos que são acionados conforme o usuário interage com a aplicação através do teclado 105 e mouse 110. Esses eventos 220 são transmitidos ao submódulo de gravação 200. Ao iniciar a gravação da sessão, um evento capturado em 220 e repassado para o submódulo de gravação 200 dispara a abertura de uma pequena janela dentro da aplicação que mostra o resultado da captura do vídeo junto com uma interface com botões e/ou outros elementos visuais. O usuário interage com esta interface para acíonar o início da gravação. Neste momento, o submódulo começa a escutar os eventos da aplicação que foram escolhidos e parametrizados para serem processados (os demais são ignorados). Chamamos esses eventos de "eventos da aplicação" porque eles não são eventos padrão do ambiente de execução do navegador, são eventos customizados desenvolvido para implementar a solução descrita no presente invento.

A aplicação web 145 distribui eventos adicionais que o submódulo de gravação 200 escuta, quando ligado, recebendo-os no seu

manipulador de eventos da aplicação 210 e depois executa uma sequência específica de passos. O manipulador de eventos de entrada do usuário 220 escuta a interação entre o usuário e a aplicação utilizando o caminho 260, com a capacidade de enviar eventos, por sua vez, para o processador de eventos da aplicação no submódulo de gravação 210 através do caminho 270. A ação de processar esses eventos dependerá se uma ação em particular realizada pelo usuário foi parametrizada para ser observada no submódulo de gravação. Certo subconjunto de eventos gerado pelo usuário é referenciado para serem escutados no submódulo de gravação. No caso em que um dado evento esteja referenciado, a aplicação encaminha um novo evento, um evento específico para o submódulo de gravação com todas as informações de que ele precisa, conforme já citado: o comando, o estado da aplicação anterior a ação e a data/hora. Esta arquitetura específica poderia ser diferente e poderia fazer a escuta direta do evento de entrada do usuário pelo submódulo de gravação, mas a separação fornece uma maneira melhor de organizar as responsabilidades e filtrar determinados eventos que sejam relevantes conforme o contexto. Quando o usuário solicitar o início do processo de gravação, o submódulo 200 solicita o acesso ao microfone 115 e à câmara 120 que também pode ser uma webcam combinando num único dispositivo o microfone e a captura de vídeo. Se o sistema estiver conectado a uma câmera e microfone e esses dispositivos estiverem disponíveis, e se o usuário permitir o acesso à câmera e ao microfone, o submódulo de gravação iniciará então a gravação do áudio e do vídeo. Os arquivos de mídia podem ser arquivos separados ou um único arquivo combinado, que serão recebidos por dois fluxos 265 e 267 e recebidos pelo gravador de mídia 205.

Os eventos capturados são lançados pela aplicação e permitem que o submódulo de gravação seja notificado no seu manipulador de eventos de aplicação 210 de que uma ação em particular ocorreu, e assim o submódulo de gravação 200 executará uma sequência de ações específicas. À medida que o usuário executa determinadas ações na aplicação, são disparados eventos de entrada do usuário capturados pelo manipulador de eventos de entrada do usuário 220. A aplicação captura esses eventos a partir do ambiente de execução do navegador. Se, por exemplo, houver um evento particular proveniente do ambiente de execução e se este evento tiver sido escutado pelo manipulador de eventos de entrada do usuário 220, outro evento será então enviado ao manipulador de eventos da aplicação 210 e o módulo de gravação executará uma determinada ação após o recebimento deste "evento da aplicação". Desta forma, a aplicação envia diferentes eventos para o submódulo de gravação, o que pode resultar na gravação de um comando (explicado na Figura 4), ou iniciar a gravação ou parar a gravação, por exemplo. O manipulador de eventos de entrada do usuário escuta a interação do usuário com a aplicação, por exemplo, se o usuário clicar em um botão, selecionar um elemento, fechar uma aba, todos esses são considerados entradas do usuário. O manipulador de eventos da aplicação está dentro do submódulo de gravação. À medida que certas ações são executadas na aplicação, interação e processos ocorrem entre os componentes dentro da aplicação, e neste caso particular irá disparar eventos da aplicação que são escutados pelo submódulo de gravação. Estes incluem, por exemplo, um evento que representa a adição de um elemento na tela, ou um evento que representa a remoção de um elemento na tela e assim por diante. À medida que a aplicação lança eventos, o submódulo de gravação escuta-os e executa uma dada ação assim que recebe os mesmos. A aplicação repassa eventos do ambiente de execução, do servidor e do sistema (bem como do usuário). No caso do servidor, ele pode retornar dados que pode resultar em elementos aparecendo na tela, por exemplo. Neste momento, a aplicação pode lançar um evento, que se o submódulo de gravação estiver escutando, resultará na gravação do comando a ser reproduzido mais tarde. O processo é seletivo, dependendo de quais eventos foram parametrizados antes para serem observados. O submódulo de gravação escutará somente os eventos que foram parametrizados, ignorando os demais. A parametrização pode incluir todos os eventos e todas as ações. O submódulo de gravação pode ser configurado para escutar todos esses eventos, ou simplesmente, por exemplo, escutar eventos particulares e ignorar uma ação de zoom que não é considerada importante em um dado contexto. O que é considerado necessário pode ser gravado seletivamente. O submódulo também captura o conteúdo do microfone e da câmera. Por sua vez, o submódulo de gravação, tendo os fluxos da câmera e microfone, vai gravando os mesmos. No final, ao ser solicitado pelo usuário, o submódulo envia os arquivos de mídia junto com os comandos de navegação para o serviço de armazenamento.

Um evento é recebido pelo manipulador de eventos da aplicação do submódulo de gravação 210 juntamente com o comando (explicado abaixo) que é um conjunto de instruções para reproduzir as ações feitas pelo usuário, por exemplo exibir um elemento visual na tela ou selecionar um item em uma lista. Com o recebimento dos eventos junto com os itens de comandos, o submódulo de gravação tem as informações necessárias para gravar a ação para que mais tarde, no modo de reprodução, possa fazer aparecer um determinado elemento visual na tela ou selecionar um item em uma lista. Um comando concreto implementa a interface

Comando que possui um método "execute" e algumas configurações necessárias e específicas de cada comando. Um objeto de comando contém um modelo (ou receptor) e um objeto de configurações, que são necessárias para reproduzir o contexto desejado e as particularidades da execução de uma determinada ação, quando o comando é executado, de forma síncrona com os arquivos de mídia. O modelo (ou receptor) é o objeto que de fato contém as instruções necessárias para executar a tarefa quando o método execute do comando é invocado. O receptor tem todas as instruções específicas para executar uma determinada tarefa. Como as ações executadas pelo usuário em sequência diferem, cada ação terá um modelo diferente (receptor). Um estado da aplicação específico se faz necessário para que a ação do método execute do comando possa ocorrer. O objeto de configurações que guarda o estado da aplicação é usado para certifícar-se de que este estado específico é satisfeito anteriormente a execução do comando. Por exemplo, quando o usuário pressiona enter, a aplicação toma o id específico do elemento selecionado, faz uma requisição ao servidor remoto, recupera o conteúdo retornado pelo servidor e, com esse conteúdo, segue outras etapas para exibir um elemento visual no tela. Todas as etapas necessárias para executar esta ação particular podem ser encapsuladas dentro do método execute do comando responsável por executar esta ação em particular. Em seguida, em vez de simplesmente executar os passos um a um para executar a ação, um comando é criado que possui um método execute que contém as etapas necessárias para executar essa ação específica. O método execute deste comando chama o modelo (ou receptor) quer será explicado mais adiante.

Uma ação que não tenha sido estruturada sob a forma de comando dentro da aplicação não pode fazer parte das ações registadas no submódulo de gravação. Em síntese, a aplicação precisa ser reformulada seguindo o padrão de projeto Comando para cada ação que se deseja parametrizar. Um mapeamento adequado das ações que se queira gravar se faz necessário. Essas ações precisam ser divididas e implementadas seguindo o padrão de projeto Comando. Uma vez que este processo foi feito cada vez que o usuário executa uma ação, a ação executada pelo usuário disparará a criação de um comando, que contem o modelo (ou receptor) e suas configurações necessárias e chamará então o método "execute" deste comando, nesse instante, um evento é lançado para o submódulo de gravação. Quando um evento da aplicação que foi parametrizado para a gravação é lançado, caso o submódulo de gravador esteja no processo de gravação de eventos, o submódulo de gravação recebe este evento, guarda este comando junto com o a data/hora, para depois pegar este comando específico e chamar seu método execute e assim executar a ação. Quando a gravação começa, o submódulo de gravação liga a escuta dos eventos, o que permite que o submódulo de gravação receba o objeto de comando, um objeto que guarda o estado da aplicação anterior a execução da ação e a data/hora. O estado anterior da aplicação permite gravar os elementos necessários para reproduzir as ações adequadamente. O submódulo de gravação nesse momento cria um item de comando, que contém um comando com a suas

configurações necessárias para reproduzir a instância certa do modelo (ou receptor), para a execução adequada durante o processo de reprodução. O item de comando também contém a data/hora e o objeto com o estado da aplicação no momento. Há casos em que a ação já possa ter acontecido, o que é particularmente aplicável para bibliotecas externas. Nesse caso, a ação já foi executada. Nesse caso, um

manipulador de eventos foi parametrizado para capturar o evento que indica que a ação foi executada, capturando ao mesmo tempo o objeto que acabou de ser criado com suas configurações e parâmetros apropriados. Neste caso, um comando é criado após a execução e a criação do comando não aciona a execução, um evento é simplesmente acionado e um item de comando é gravado pelo submódulo de gravação sem uma execução resultante na criação desse comando, uma vez que a execução já ocorreu.

Como mencionado anteriormente, ao ínicializar a gravação, o submódulo de gravação inicializa a escuta dos "eventos da aplicação" que foram parametrizados previamente, mas quando o usuário pausa ou para a gravação, o submódulo interrompe a escuta desses eventos durante esses estados. Nestes estados, com o submódulo de gravação parado ou pausado, a aplicação continua lançando os mesmos eventos para frente à medida que eles aconteçam. No entanto, o submódulo de gravação é seletivo e ele, enquanto pausado ou parado interrompe a escuta dos eventos necessários para capturar a sessão, porém contínua ouvindo os eventos necessários para que o usuário interaja com o submódulo do gravador para retomar a gravação após uma pausa, por exemplo, ou submeter a gravação finalizada para o serviço de armazenamento.

Quando o usuário submete os arquivos gravados para o serviço de armazenamento, esse armazenamento pode ser local ou no mesmo servidor da aplicação ou mesmo num outro servidor. A sessão gravada consiste numa lista de itens de comando junto com o(s) arquivo(s) de mídia e podem ambos estar em memória (RAM) ou em um serviço de armazenamento, conforme mencionado. Quando a sessão gravada é submetida para o serviço de armazenamento, a lista de itens de comando é, antes de tudo, serializada. Caso esteja na RAM, ela reside no navegador, dentro do ambiente de execução do navegador.

A figura 3 ilustra o diagrama de blocos do submódulo de

reprodução. Fora da aplicação temos um alto-falante 117 que está conectado ao computador. O usuário navega pela aplicação através dos elementos de interface que permitem a esse usuário escolher uma gravação que foi salva previamente. O submódulo de reprodução 300, mais especificamente o submódulo de reprodução síncrona 305, obtém o id de uma gravação feita previamente e carregam ambos os arquivos de mídia gravados juntamente com o arquivo de itens de comandos que foram armazenados no serviço de armazenamento 400 ou se o arquivo ainda está em memória, pega da memória RAM 242. O módulo de reprodução síncrona 305 receberá os dados, deserializa os itens de comando caso estejam serializados (explicados na figura 4) e carrega os arquivos de mídia. No caso dos itens de comando, o módulo de reprodução síncrona carrega o conjunto completo de comandos antes de iniciar a reprodução, mas no caso dos arquivos de mídia, o módulo de reprodução síncrona 305 faz um download de pequenas partes por vez a fim de executar a ínicialização imídiatamente sem ter que esperar por todos os arquivos de mídia serem baixado para assim poder iniciar a execução rapidamente. Cada item de comando da lista de itens de comando armazenados é um objeto que contém um comando em si, um objeto de data/hora, que foi capturado quando a ação aconteceu e o objeto com o estado da aplicação no momento da gravação desse comando. A lista de itens de comando estará em um formato serializado quando estes são obtidos do serviço de armazenamento, porém já estarão os objetos disponíveis "em memória" quando recuperados da RAM no caso em que uma gravação tenha sido realizada e ainda não foi submetida ao serviço de armazenamento. Quando a lista de itens de comando é obtida do serviço de armazenamento, o módulo deserializa esses itens de comando e em seguida inicializa a reprodução dos arquivos de mídia de maneira síncrona com os comandos. O módulo de reprodução síncrona pega o vídeo e o áudio e garante que ambos os arquivos reproduzam em perfeita harmonia. Várias combinações podem ser aplicadas, por exemplo, os arquivos de mídia podem ser gravados juntos áudio/vídeo em um único arquivo e armazenados como tal e, em seguida, recuperados na mesma forma. Outra alternativa seria enviar os arquivos de áudio e vídeo em separado para o servidor, em seguida converter esses arquivos em um único arquivo sincronizado e recuperar o arquivo que foi compactado e combinado do servidor durante o processo de reprodução. Esses métodos atenuam a necessidade de esforços em sincronização no lado do módulo de reprodução síncrona, cabe ressaltar que todas as abordagens apresentadas são possíveis.

A obtenção dos arquivos da memória RAM em vez do serviço de armazenamento acontece logo após um dado usuário tenha concluído uma gravação. Quando o usuário finaliza uma gravação, o submódulo de gravação disponibiliza ao usuário tanto os arquivos de mídia quanto a lista de itens de comando como objetos em memória (RAM). Neste momento, o usuário pode reproduzir a gravação, a fim de testar se o resultado está com boa qualidade, tanto na reprodução das ações da sessão quanto na reprodução dos arquivos áudio e vídeo. Caso o resultado da gravação seja satisfatório, o usuário poderá então submetê-los ao serviço de armazenamento.

A execução dos comandos que é administrada dentro do

submódulo é feita da seguinte forma: o submódulo agenda as execuções dos comandos. O submódulo de reprodução síncrona calcula em 305, pegando cada item de comando em ordem e verificando a diferença entra a data/hora deste item contra a do primeiro item de comando (o primeiro item de comando é um meta item de comando explicado na figura 4.) menos o tempo acumulado de pausas que houve no decorrer da gravação até esse momento. O tempo encontrado através deste cálculo é utilizado para agendar a execução de um determinado comando a partir do início da execução. Por exemplo, o submódulo executaria um dado comando em X quantidade de tempo a partir do início da execução. É importante notar que esse agendamento controla a execução dos comandos. Este agendamento não somente programa a execução dos comandos. Cabe ressaltar que cada item de comando contém o objeto que guarda o estado da aplicação antes de sua execução. Este objeto é usado para garantir que a execução do comando poça acontecer corretamente. Como o usuário pode pausar a reprodução de uma dada gravação de sessão e, em seguida, interagir diretamente com a aplicação alterando seu estado, alguns objetos na aplicação podem ser removidos ou simplesmente alterados pelo usuário tornando o estado da aplicação inconsistente para executar o comando quando o usuário decidir retomar a execução novamente. Por isso o objeto com o estado da aplicação imíd latamente antes da execução da ação desse comando se faz necessário.

Uma vez que a execução dos comandos foi agendada e chega a hora de executar um dado comando, o submódulo de gravação síncrona inspeciona se o estado atual da aplicação é consistente para a execução do comando. Ele compara o estado da aplicação corrente com o estado gravado no item de comando. Se o estado da aplicação estiver

inconsistente, o sistema retira os elementos relevantes na aplicação, pega os elementos que foram registrados no item de comando e injeta esses elementos na aplicação, corrigindo assim o seu estado. O módulo faz o agendamento dos comandos, a fim de gerenciar a execução no momento adequado de maneira síncrona com os arquivos de mídia, de modo que os arquivos de mídia e a sessão reproduzida estejam em perfeita harmonia. Enquanto o usuário está assistindo a gravação de sessão, ele pode pausar a execução, avançar ou mesmo retroceder. No modo de reprodução, o módulo não escuta eventos de gravação, porém escuta outros eventos como o evento de pausar a reprodução, o evento de parar, o de avançar e de retroceder por exemplo. Se o usuário assumir o controle da aplicação e navegar enquanto o player estiver pausado ou mesmo reproduzindo, os eventos de navegação serão enviados para frente, mas o módulo não estará ouvindo esses eventos nesse estado. Cabe ressaltar que embora estejamos descrevendo a solução para o caso de uma aplicação web, esta invenção não é restrita a tal tipo, ela pode ser aplicada no escopo de uma aplicação desktop, de aplicativos móveis como celulares e tablets ou web como descrito aqui.

A figura 4 ilustra o serviço de armazenamento. Antes de falar sobre os detalhes da ilustração, vaie a pena lembrar o propósito geral do serviço de armazenamento. Este é o local onde os arquivos de mídia e os itens de comando são armazenados quando a gravação de seção foi concluída e foi submetida para ser salva. O serviço de armazenamento pode ser parte do servidor da aplicação, que foi implantado na máquina servidor ou estar separado ou ainda ser implantado em outra máquina. Para os fins dessa invenção, nenhuma das formas faz diferença.

O serviço de armazenamento 400 é um serviço de persistência para os itens de comando armazenados no formato serializado e dos arquivos de mídia a fim de serem recuperados, para serem reproduzidos mais tarde. Podemos dividir seu conteúdo em duas partes: Os arquivos de mídia de um lado 420 e o arquivo contendo a lista dos itens de comando serializados do outro lado 410. Os itens de comando são armazenados em um vetor, pilha ou lista, os quais podem ser então reconvertidos para "objetos em memória" no módulo de reprodução síncrona 305 para assim reproduzir a sequência de navegação 312 do usuário que eles representam juntamente com o áudio e vídeo

harmonicamente 322. Todas as ações do usuário ou apenas algumas que foram previamente parametrizadas, quando são gravadas pelo submódulo de gravação, são traduzidas em itens de comando ou meta itens de comandos, à medida que o usuário navega pela aplicação. No processo de reprodução, o módulo pode executar as mesmas ações ou similares, conforme o caso, às ações do usuário durante a gravação.

Quando um objeto comando é criado, ele é encapsulado dentro de um item de comando 405, juntamente com o estado da aplicação e a data/hora dessa açâo. O sistema armazena uma lista de itens de comando serializados 410 através do submódulo de gravação 200. Os itens de comando na sua forma serializada armazenam o tipo de comando que representam e os dados necessários para recriar a instância do comando com as características apropriadas. Existem dois tipos diferentes de comandos na sua essência. De um lado, existem comandos cujos propósitos são unicamente para realizar ações na aplicação. Esses comandos na sua forma serializada contêm o tipo do comando e um objeto que guarda as variáveis para que se possa recriá-lo como o original. Do outro lado, os meta comandos sâo apenas "strings" que são usadas para expressar, por exemplo, o início da gravação. Neste caso, o item de comando que armazena esse meta comando "inicio" também armazenaria a data/hora e o estado da aplicação igualmente ao tipo anterior, díferenciando-se apenas que o objeto comando neste caso é uma simples string indicativa da ação. Podemos citar outros meta comandos como o "pausa" e o meta comando "parar" essenciais para a funcionalidade de pausa, retomada e fim de uma gravação.

O processo de deserialização de um comando consiste em pegar a lista serializada de itens de comando do serviço de armazenamento e reconstruir. As variáveis e objetos são recriados a partir da lista

serializada de itens de comando e uma instância nova de comando é criada a partir de cada item dessa lista. Para recriar uma instância de comando, o módulo verifica o tipo do comando para cada item, a fim de saber qual construtor será necessário para reconstruir o objeto e assim os objetos de comando são recriados novamente. Para instanciar os comandos de forma adequada, as configurações de deserialização de cada comando são mantidas dentro dos comandos serializados e são usadas pelo construtor de cada um para recriar um objeto com as mesmas características. Depois que os itens de comando forem

deserialízados, cada um deles será agendado para execução 305. O submódulo de reprodução, em posse dessa lista deserializada, agenda suas execuções no momento certo. O áudio e vídeo são os arquivos de mídia. Os arquivos de mídia podem estar separados se eles forem gravados em separado. Mas eles podem ser combinados no servidor ou não para formar um único arquivo ou eles podem ser deixados em separado para serem reproduzidos mais tarde. Se forem deixados em arquivos separados, durante o processo de reprodução, ambos

precisarão ser manipulados para fazer a reprodução sincronizada de ambos os arquivos. O presente invento funciona com os. arquivos de mídia em separado ou dispostos em um único arquivo.

FIG 5. ilustra uma representação do padrão de projeto Comando. Durante a gravação, o submódulo de gravação escuta os "eventos da aplicação" que foram parametrizados. E à medida que ocorrem, o submódulo armazena os vários itens de comando em uma lista, para serem reproduzidos mais tarde. O módulo geral, dentre outras funções, assume o papel do invocador 510 quando o modo de reprodução é iniciado, recuperando a lista de itens de comando e executando cada um no seu devido momento.

A método execute 540-555 é a ação que um comando concreto executará quando solicitado. Deve-se notar que o método execute de um dado comando concreto (540 ou 545) pode chamar um único método de um dado receptor (520, 530 e 540) ou chamar mais de um método num único receptor 550 ou mesmo chamar muitos métodos de diferentes receptores 555 que pertencem a um dado comando concreto 545.

Na realidade, tanto o submódulo de gravação quanto o submódulo de reprodução implementam, dentre outras funcionalidades, o

amplamente conhecido padrão de projetos Comando. Na verdade, a aplicação é quem cria os comandos concretos. Na aplicação, os comandos concretos são criados e enviados juntos aos eventos, que por sua vez são processados no submódulo de gravação. Dentro de um comando concreto, há um ou mais receptores, que são os modelos que na verdade executam a tarefa. Por exemplo, a tarefa de exibir uma caixa do tipo "alerta" na aplicação poderia ser responsabilidade de um modelo especializado que sabe todos os passos para realizar tal tarefa. De fato, o receptor é uma abstração, de modo que a implementação da execução da tarefa em sim não está dentro do Comando Concreto. O Comando Concreto (540 ou 545) não implementa a execução em si, mas sabe chamar os métodos apropriados no modelo (ou receptor) para executar a ação (550 ou 555), Dessa forma os Comandos Concretos delegam a execução da tarefa para os modelos ou receptores.

O Comando Concreto também contém uma variável ou objeto que guarda o estado da aplicação. Essa variável armazena o estado da aplicação imídiatamente antes da execução da ação que é representada por este Comando Concreto. Esta variável ou objeto permite que o submódulo de reprodução avalie se o contexto da aplicação é apropriado para executar a ação. Caso contrário, o submódulo de reprodução pode forçar a aplicação a usar o estado da aplicação armazenado nesta variável e desta forma garantir a execução adequada do comando sem erros ou inconsistências. Esta variável não pertence ao padrão de projetos Comando, mas foi adicionada no âmbito desta invenção.

A figura 6 Representa o fluxograma dos passos necessários para gravar uma sessão de uma aplicação web com os arquivos de mídia de maneira síncrona. No passo 600 o usuário aciona o início do processo de gravação do submódulo 200; No passo 605, o gravador de mídia verifica se tem acesso ao hardware do microfone 115 e da câmara 120. Se houver erro, então o módulo informa em 610 ao usuário que houve um problema e o processo é interrompido. Caso contrário, se o hardware estiver disponível, então o módulo inicializa o processo 615 de captura de mídia de áudio e vídeo que pode ser o arquivo de áudio apenas, o arquivo de áudio e vídeo em separado ou mesmo os arquivos de áudio e vídeo combinados a partir do microfone e/ou da câmera. O primeiro meta item de comando é adicionado na lista para indicar o inicio do processo. Este item de comando tem um comando do tipo "start", um objeto de data/hora, indicando quando a gravação começou e também um objeto com o estado inicial da aplicação. O módulo então inicializa a escuta dos eventos que foram parametrizados, armazenando os comandos da sessão do usuário que foram lançados pela aplicação. A variável com o estado da aplicação precisa ser armazenada a fim de certificarmos que os comandos possam ser executados. Então, o submódulo de gravação muda seu estado para o estado "gravando". No estado "gravando" 620, os fluxos de mídia de vídeo e áudio estão sendo capturados, juntamente com os itens de comando que foram parametrizados. Todos os itens de comando capturados são gravados com o tipo do comando, um objeto de data/hora e o objeto que representa o estado da aplicação. O tipo é necessário para saber que espécie um dado comando concreto

representa, cada tipo representa uma ação específica. Nesse momento, o usuário pode interagir com o submòduio de gravação de duas maneiras, ele pode pedir para o processo pausar ou pode pedir para o processo parar. Se o usuário acionar uma pausa 630, o processo 635 é acionado. No processo de pausar 635, o módulo interrompe a captura de mídia, tanto de vídeo quanto de áudio e interrompe durante esse estado a escuta de eventos da aplicação. O módulo registra um meta item de comando do tipo "pause", com um objeto de data/hora e o estado da aplicação. Mais tarde, quando a aplicação reiniciar o processo de gravação, vindo de uma pausa, outro meta comando do tipo "retomada" será gravado com seu próprio objeto de data/hora e o estado da aplicação, igualmente aos demais, novamente a escuta dos eventos da aplicação é ligada novamente. Isto permitirá calcular, no modo

reprodução, quanto tempo a gravação foi interrompida. Isso é feito, para que no modo reprodução, possamos garantir a sincronia dos arquivos de mídia com a execução dos comandos. O módulo interrompe a escuta de novos eventos da aplicação enquanto está no estado de pausa 640. Em síntese, o módulo não escuta eventos nem captura a mídia nesse estado, mas o usuário pode interagir livremente com a aplicação. Nesse estado (pausa), o usuário pode escolher entre duas ações possíveis: finalizar a gravação em 655 ou retomar a gravação (continuação). Se o usuário acionar a parada da gravação em 655, o módulo passa para o estado 660. Neste estado, o processo de gravação dos arquivos de mídia é interrompido. O submódulo de gravação para de escutar os eventos da aplicação e libera o acesso à câmera e ao microfone. O módulo então disponibiliza o resultado da gravação em memória para que o usuário verifique. Quando os arquivos em memória estão prontos, eles são disponibilizados em 665 para serem reproduzidos e testados pelo usuário para verificar se eles são satisfatórios. O usuário pode então decidir submeter os arquivos ao serviço de armazenamento em 670 ou descartá- los. Se o usuário decidir descartar os arquivos, os objetos em memória são destruídos em 675. Se, ao contrário, o usuário decidir salvar a gravação em 680, os objetos em memória contendo os itens de comando são primeiramente serializados e juntamente aos arquivos de áudio e vídeo são enviados para o serviço de armazenamento 400. Os dados são buscáveis no serviço de armazenamento em 680 para que o processo de reprodução possa recuperá-los (em oposição a reprodução dos dados em memória). Em contrapartida, se o usuário solícita a retomada da gravação em 645, então o submódulo move-se para 650. Nesta hora. um meta item de comando "retomar" é gravado, contendo um objeto de data/hora e um objeto com o estado da aplicação anterior a essa ação. O intervalo de tempo em que não houve gravação (tempo pausado) é calculado subtraindo os intervalos de tempo entre os meta comandos de "pausa" e "retomar". Isso é feito a fim de manter a sincronização entre os comandos e os arquivos de mídia. O estado da aplicação é sempre gravado para saber se os comandos são executáveis na hora que forem chamados. Quando o usuário pausa a gravação, ele pode modificar o estado da aplicação, e este novo estado precisa ser levado em consideração para os comandos que serão gravados apôs a pausa, pois o estado antes da pausa pode ser incompatível com os comandos gravados depois da retomada da gravação ("retomar"). O estado da aplicação, quando retomamos a gravação, precisa ser registrado para ser usado no caso de o estado modificado pelo usuário não permitir a execução dos comandos. Em seguida, o submódulo escuta os eventos da aplicação novamente e o submódulo muda seu estado para "gravando" 620.

A figura 7 Representa o fluxograma da reprodução de uma sessão gravada juntamente com os arquivos de mídia. Em 700, o usuário acessando a interface da aplicação seleciona um arquivo para ser reproduzido. O arquivo pode ter sido gravado por ele próprio ou por terceiros. O submódulo de reprodução em 710 verifica quais arquivos o usuário deseja reproduzir e se eles estão disponíveis. O submódulo faz uma requisição ao serviço de armazenamento 400 e pega os arquivos de mídia e a lista dos itens de comando, que contém o comando em sí, os estados da aplicação e os objetos de data/hora para cada item, sendo estes num formato serializado. Esses itens de comando são, em seguida, deserializados e carregados em memória. Uma vez que os arquivos foram deserializados e carregados, um evento é emitido para exibir a interface que permite ao usuário reproduzir os arquivos. Em 715 o usuário pode iniciar o processo de reprodução. No momento em que a reprodução se inicia em 715 essa data/hora é passada para o processo de agendamento dos comandos 720 juntamente com os itens de comando; Os arquivos de mídia também são transmitidos ao módulo. O processo de agendamento instrui o módulo a reproduzir os arquivos de midia a partir do tempo escolhido na interface do player, que fica na barra de tempo do piayer e assim podemos avançar a reprodução a partir de um dado instante futuro ou mesmo retroceder para um dado instante anterior a corrente

reprodução. Este tempo escolhido é passado de 715 para 720 e a mídia junto aos comandos é tocada a partir desse instante. Se o tempo de execução de um determinado comando está situado após o tempo escolhido no avanço ou retrocesso, o comando será agendado, caso contrário, ele será ignorado. O módulo usa a data/hora armazenada para cada comando, menos a data/hora do início da gravação, menos a quantidade de tempo que ficou pausada a gravação até a execução dessa ação e assim programar o agendamento desse comando. Deve-se notar para fins de revisão, que instantes após uma gravação de sessão, os arquivos de mídia, os comandos, os respectivos estados da aplicação e as data/hora(s) são disponibilizados para reprodução imídiata em 715. A gravação pode ser descartada se não atende as expectativas ou pode ser enviada para o serviço de armazenamento conforme já descrito

anteriormente. O submódulo de reprodução então entra no estado de reprodução 725, isto é, o módulo executa as ações dos comandos seguindo o agendamento junto com os arquivos de mídia em perfeita harmonia. O submódulo, para cada comando executado, verifica se o estado da aplicação é compatível. Caso não seja, o submódulo utiliza o estado da aplicação gravado no item de comando para ajeitar as condições necessárias. O usuário tem então duas opções a fazer. Na primeira, o usuário pode solicitar a pausa 730. O processo de "pausa" 735 interrompe a execução dos arquivos de mídia (áudio e vídeo). Todas as execuções de comandos que foram agendadas são canceladas. O submódulo entra no estado de pausa. A segunda opção é retroceder ou avançar a reprodução. Se solicitado avançar ou retroceder em 745, o submódulo entra no processo de reagendamento em 750. O módulo cancela a execução dos comandos previamente agendados. O

submódulo reproduz os arquivos de mídia a partir deste novo ponto no tempo, pega os comandos e reagenda-os a partir deste novo ponto. Se o tempo de execução de um dado comando está situado após o ponto do tempo escolhido na interface gráfica pelo usuário, ao solicitar um retrocesso ou avanço, o comando será agendado, caso contrário, será ignorado. Assim o submódulo entra novamente no estado de reprodução 725.