BRPI1012352B1 - método implementado por computador para manipular formatos de mídia extensíveis em uma plataforma de aplicação hospedada e sistema de computador para comunicação entre uma aplicação e uma plataforma de hospedagem - Google Patents
método implementado por computador para manipular formatos de mídia extensíveis em uma plataforma de aplicação hospedada e sistema de computador para comunicação entre uma aplicação e uma plataforma de hospedagem Download PDFInfo
- Publication number
- BRPI1012352B1 BRPI1012352B1 BRPI1012352-0A BRPI1012352A BRPI1012352B1 BR PI1012352 B1 BRPI1012352 B1 BR PI1012352B1 BR PI1012352 A BRPI1012352 A BR PI1012352A BR PI1012352 B1 BRPI1012352 B1 BR PI1012352B1
- Authority
- BR
- Brazil
- Prior art keywords
- media
- application
- platform
- hosted
- hosted application
- Prior art date
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/83—Generation or processing of protective or descriptive data associated with content; Content structuring
- H04N21/835—Generation of protective data, e.g. certificates
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/41—Structure of client; Structure of client peripherals
- H04N21/414—Specialised client platforms, e.g. receiver in car or embedded in a mobile appliance
- H04N21/4143—Specialised client platforms, e.g. receiver in car or embedded in a mobile appliance embedded in a Personal Computer [PC]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/443—OS processes, e.g. booting an STB, implementing a Java virtual machine in an STB or power management in an STB
- H04N21/4431—OS processes, e.g. booting an STB, implementing a Java virtual machine in an STB or power management in an STB characterized by the use of Application Program Interface [API] libraries
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/81—Monomedia components thereof
- H04N21/8166—Monomedia components thereof involving executable data, e.g. software
- H04N21/818—OS software
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/81—Monomedia components thereof
- H04N21/8166—Monomedia components thereof involving executable data, e.g. software
- H04N21/8193—Monomedia components thereof involving executable data, e.g. software dedicated tools, e.g. video decoder software or IPMP tool
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Library & Information Science (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
- Information Transfer Between Computers (AREA)
Abstract
PLATAFORMA DE APLICAÇÃO HOSPEDADA COM FORMATO DE MÍDIA EXTENSÍVEL. Descreve-se aqui um sistema de interação de mídia que permite que as aplicações hospedadas consumam e/ou produzam conteúdo de mídia rico independente do formato do conteúdo de mídia, mantendo ainda a segurança do hospedeiro. O sistema de interação de mídia aceita dados de mídia brutos e não compactados de uma aplicação hospedada, e permite que a aplicação hospedada forneça seu próprio codec através de uma API no modo seguro que restringe as ações que o codec pode executar a um conjunto de ações confiáveis. Em seguida, a aplicação fornece os dados não-compactados ao sistema para reprodução. Assim de interação de mídia fornece conteúdo de mídia rico em qualquer formato que o desenvolvedor de aplicações suporte, e mantém a segurança do sistema do computador do usuário.
Description
[0001] Os navegadores contemporâneos e outras aplicações dão suporte a extensões (plug-ins), que em geral compreendem código de software hospedado que interage com o navegador hospedeiro / aplicação para fornecer funcionalidades adicionais. Uma razão para o uso de extensões é o aumento da segurança, uma vez que o navegador hospedeiro limita as ações que o código hospedado (que geralmente não é confiável) pode executar. A Internet tornou-se muita perigosa, com sites mal-intencionados que muitas vezes tentam fazer o usuário baixar e executar códigos nocivos que podem danificar o sistema do computador do usuário ou destruir os dados do usuário. Assim, os navegadores da Rede muitas vezes incluem restrições no código que pode ser executado e nas extensões que estão autorizadas a executar ações no sistema do computador do usuário. As extensões aumentam o tamanho da área de segurança (sandbox) fornecida pelo navegador, pois permitem mais funcionalidades na Rede ao mesmo tempo em que diminuem o número de aplicações não confiáveis instaladas. Uma extensão desse tipo é o Microsoft ® Silverlight™, que oferece uma plataforma que permite que os desenvolvedores de aplicações criem apli-cações da Rede ricas hospedadas no navegador que geralmente incluem animação, gráficos vetoriais, e / ou reprodução de conteúdo multimídia (por exemplo, áudio / vídeo). Outra extensão exemplificati- va é o Adobe® Flash™.
[0002] Em geral, para reproduzir mídia, uma plataforma fornece Interfaces de Programação de Aplicativos (APIs) que hospedam chamadas de código de aplicação para especificar uma localização que armazena conteúdo de mídia específico, por exemplo, especificando um Localizador de Recursos Uniforme (URL) que identifica um arquivo ou outro recipiente em um servidor que contém o conteúdo de mídia. Em seguida, a plataforma gera solicitações de rede para começar a baixar a mídia. A plataforma analisa o conteúdo de mídia descompac- tando-o para extrair os fluxos de conteúdo de mídia para fornecê-los a um canal de comunicação (pipeline) de mídia para reprodução. O Microsoft ® Silverlight™, como outras plataformas, fornece funcionalidade para a reprodução de vídeo e áudio em uma variedade de formatos (WMV, WMA, MP3, H.264, AAC) permitindo que uma aplicação baixe ou transmita em fluxo um arquivo contendo combinações dos formatos suportados. Os tipos de formatos de áudio e vídeo que são permitidos não são extensíveis e a conversão para um dos formatos suportados faz uso intenso de recursos.
[0003] Infelizmente, como mencionado acima, tais plataformas normalmente estão limitadas à reprodução de conteúdo de mídia que está em um ou mais formatos conhecidos previstos pelos designers da plataforma. Por exemplo, a plataforma pode incluir compactadores e descompactadores (codecs) para tipos específicos de mídia, como o Motion Picture Experts Group Version 4 (MPEG4 ou MP4), DIVX, ou outros formatos. A evolução rápida é comum nos codecs, à medida que novos algoritmos são descobertos para compactar ainda mais o conteúdo de mídia e novas situações são identificadas para a transmissão de informações adicionais associadas ao conteúdo de mídia. Assim, ao longo do tempo, uma plataforma pode vir a suportar os formatos de mídia que estão desatualizados e não são mais populares ou os mais eficientes. As atualizações de plataforma são normalmente a única forma de adicionar suporte a novos formatos de mídia.
[0004] Além disso, os designers de plataforma precisam realizar trabalho extra para implementar o suporte para cada formato de mídia, o que pode tornar a implementação da plataforma grande e retardar o progresso da adição de um novo suporte a novos tipos de mídia para a plataforma. Alguns codecs são de propriedade particular, logo, os designers de plataforma não podem adicionar suporte a tipos de mídia que usam os codecs sem o licenciamento dos codecs pelo fornecedor de codec, se é que isso é possível. Uma razão pela qual as plataformas geralmente exercem controle sobre quais aplicações de codec podem ser usadas junto à plataforma é para garantir a segurança. Os codecs muitas vezes interagem diretamente com o hardware do sistema de computador para exibir vídeo e reproduzir áudio, e podem realizar ações que são prejudiciais ao sistema do computador do usuário. Os sistemas atuais abrem mão do suporte mais amplo a tipos de mídia em favor da segurança. Além disso, a velocidade de download é um critério geralmente examinado para as extensões, e à medida que aumenta o tamanho da plataforma, a velocidade de download diminui. Dessa forma, os designers de plataforma podem ter um incentivo para dar suporte a menos formatos de mídia para manter o tamanho da plataforma pequeno. SUMÁRIO
[0005] Descreve-se aqui um sistema de interação de mídia que permite que as aplicações hospedadas consumam e / ou produzam conteúdo de mídia rico independente do formato do conteúdo de mídia, mantendo ainda a segurança do hospedeiro. O sistema de interação de mídia aceita dados de mídia brutos e não compactados de uma aplicação hospedada, e permite que a aplicação hospedada forneça seu próprio codec através de uma API no modo seguro que restringe as ações que o codec pode executar a um conjunto de ações confiáveis. O sistema de interação de mídia invoca uma aplicação fornecida ao sistema. A aplicação é executada e baixa dados de mídia compactados a partir de um servidor ou pode criar dados de mídia dinamicamente. O sistema de interação de mídia oferece uma área de segu-rança em que a aplicação pode executar código de descompactação de forma segura, e a aplicação fornece código para converter os dados de mídia compactados em dados não compactados para reprodução. Em seguida, a aplicação fornece os dados não-compactados ao sistema para reprodução. Assim, o sistema de interação de mídia fornece conteúdo de mídia rico em qualquer formato que o desenvolvedor de aplicações suporte, e mantém a segurança do sistema do computador do usuário.
[0006] A intenção deste sumário é de apresentar, de maneira simplificada, uma seleção de conceitos que são descritos em detalhes a seguir na Descrição Detalhada. O presente Sumário não tem a intenção de identificar aspectos cruciais ou essenciais da matéria reivindicada e não deve ser usado para limitar o âmbito da matéria reivindicada.
[0007] A Figura 1 é um diagrama de blocos que ilustra os componentes do sistema de interação de mídia, em uma concretização.
[0008] A Figura 2 é um fluxograma que ilustra o processamento do sistema ao nível de plataforma para reprodução de mídia, em uma concretização.
[0009] A Figura 3 é um fluxograma que ilustra o processamento do sistema ao nível de aplicação para reprodução de mídia, em uma con-cretização.
[00010] A Figura 4 é um diagrama de blocos que ilustra um ambiente operacional do sistema de interação de mídia, em uma concretização.
[00011] A Figura 5 é um diagrama de blocos que ilustra um exemplo mais específico, no qual o código de nível de aplicação deriva de um tipo abstrato, em uma concretização.
[00012] A Figura 6 é um fluxograma que ilustra as etapas de reprodução correspondentes ao exemplo da Figura 5, em uma concretização.
[00013] A Figura 7 é um diagrama de fluxo de dados que ilustra a definição de subclasses de um MediaStreamSource para lidar com formatos de recipiente personalizados, em uma concretização.
[00014] Descreve-se aqui um sistema de interação de mídia que permite que as aplicações hospedadas consumam e / ou produzam conteúdo de mídia rico independente do formato do conteúdo de mídia, mantendo ainda a segurança do hospedeiro. O sistema de interação de mídia aceita dados de mídia brutos e não compactados de uma aplicação hospedada, e permite que a aplicação hospedada forneça seu próprio codec através de uma API no modo seguro que restringe as ações que o codec pode executar a um conjunto de ações confiáveis. O sistema de interação de mídia invoca uma aplicação fornecida ao sistema. Por exemplo, uma página da Rede pode incluir uma referência incorporada ao sistema e aos parâmetros que especificam a aplicação. A aplicação é executada e baixa dados de mídia compactados a partir de um servidor ou pode criar dados de mídia dinamicamente. Por exemplo, a aplicação pode baixar um vídeo a partir de um servidor de conteúdo baseado na Internet ou sintetizar um vídeo novo com base nas informações locais (por exemplo, uma visualização de áudio baseada nas batidas em um arquivo de áudio). O sistema de interação de mídia oferece uma área de segurança em que a aplicação pode executar código de descompactação de forma segura, e a aplicação fornece código para converter os dados de mídia compactados em dados não compactados para reprodução. Em seguida, a aplicação fornece os dados não-compactados ao sistema para reprodução. Assim, o sistema de interação de mídia fornece conteúdo de mídia rico em qualquer formato que o desenvolvedor de aplicações suporte, e mantém a segurança do sistema do computador do usuário.
[00015] Os dados de mídia brutos podem se referir a uma série de tipos de dados de mídia que tipicamente não estão compactados, formatos comuns que estão prontos para um canal de mídia reproduzi- los sem descompactação adicional ou processamento similar. Por exemplo, um decodificador de vídeo pode gerar quadros YV12 brutos ou um decodificador de áudio pode gerar amostras PCM. O conteúdo de mídia pode chegar a uma aplicação hospedada em uma variedade de formatos compactados ou de outra forma codificados (por exemplo, MP4 ou DIVX), ser descompactado pela aplicação hospedada, e então fornecido ao sistema de interação de mídia em um formato comum que está pronto para reprodução. As atualizações para novos tipos de mídia podem ocorrer mediante a atualização da aplicação sem atualizações na plataforma. As aplicações podem também produzir dados de áudio e vídeo ou por composição direta ou por processamento dos dados de áudio e vídeo existentes (por exemplo, aplicação de efeitos) para produzir dados brutos de mídia brutos. Por exemplo, um jogo pode produzir efeitos de som "dinamicamente" para evitar o envio e recebimento de dados de som através da Internet. Como outro exemplo, uma aplicação pode receber vídeo filmado em frente a uma tela verde e processar o vídeo para remover o fundo verde e inserir um fundo diferente dinamicamente. Em algumas aplicações, a plataforma pode receber dados de vídeo compactados em um formato que a plataforma suporta e dados de áudio descompactados ou vice-versa. Esses tipos de situações são difíceis ou impossíveis nas plataformas existentes, mas são facilmente suportadas pelo sistema de interação de mídia.
[00016] A Figura 1 é um diagrama de blocos que ilustra os compo- nentes do sistema de interação de mídia, em uma concretização. O sistema de interação de mídia 100 inclui um componente de aplicação de invocação 110, um componente de área de segurança de execução 120, um componente de interface de mídia bruta 130, um componente de dados de mídia de solicitação 140, um componente de reprodução de mídia 150 e um componente de interface de hardware 160.
[00017] O componente de aplicação de invocação 110 carrega e invoca o código de aplicação dentro da plataforma. Por exemplo, uma página da Rede pode fazer referência a um objeto que representa a plataforma e pode incluir um ou mais parâmetros que especificam a aplicação que a plataforma irá invocar. O componente de aplicação de invocação pode baixar a aplicação como outro conteúdo baseado na Rede, por exemplo, a partir de um servidor através de uma rede, tal como a Internet. Por exemplo, o Microsoft ® Silverlight™ recebe o código de aplicação em um pacote (por exemplo, um arquivo XAP) com outros dados (por exemplo, módulos de dependência, arquivos de mídia, parâmetros de aplicação, e assim por diante) úteis para a execução da aplicação. Um navegador da Rede, tal como o Microsoft® Internet Explorer™, invoca o Microsoft ® Silverlight ™ e o Microsoft ® Silverlight™ invoca a aplicação.
[00018] O componente de área de segurança de execução 120 fornece um ambiente de execução para código de aplicação que limita as ações que a aplicação pode executar. Por exemplo, o ambiente pode limitar os recursos de hardware, os dados do usuário, ou outras informações que a aplicação pode acessar. Devido ao fato de o componente de área de segurança execução 120 executar código de aplicação em uma área de segurança confiável, os usuários podem ter certeza de que o código não pode realizar ações mal-intencionadas que um código arbitrário não executando em uma área de segurança poderia. Usando o componente de área de segurança de execução 120, uma aplicação pode implementar ou invocar codecs para os tipos de mídia de processamento não suportados nativamente pela plataforma de aplicação. Diferente dos codecs que são executados usando código nativo, os codecs no modo área de segurança chamados por uma aplicação não são capazes de prejudicar o sistema do computador do usuário. A área de segurança de execução pode incluir um conjunto limitado de instruções ou bibliotecas que o código de aplicação pode executar, e pode incluir uma compilação Just in Time (JIT) do código de aplicação para o código-objeto executável de forma que o sistema 100 possa gerenciar as ações que o código de aplicação pode executar. A área de segurança de execução também pode fornecer uma forma segura para a aplicação chamar as APIs do sistema operacional para executar várias funções (por exemplo, acessar arquivos, conec- tar-se a servidores remotos, acessar as definições de configuração, e assim por diante).
[00019] O componente de interface de mídia bruta 130 fornece uma API por meio da qual as aplicações podem fornecer à plataforma de aplicação conteúdo de mídia bruto não compactado que a plataforma é capaz de reproduzir. Ao contrário das plataformas anteriores que recebem conteúdo de mídia compactado das aplicações e então usam codecs internos à plataforma para descompactar o conteúdo de mídia para um formato sem compactação, o sistema de interação de mídia 100 permite que as aplicações descompactem o conteúdo de mídia a partir de qualquer número de formatos antes de passar o conteúdo de mídia não compactado para a plataforma de aplicação para reprodução. Dessa forma, a plataforma de aplicação não limita o suporte a novos formatos de mídia, mas, em vez disso, suporta qualquer formato que uma aplicação seja capaz de descompactar e fornecer para a plataforma. Além disso, a descompactação ocorre apenas uma vez, em vez de um de uma solução alternativa potencial para plataformas ante- riores, em que uma aplicação poderia descompactar um formato de mídia e depois compactar o conteúdo de mídia em um segundo formato de mídia suportado pela plataforma. Note que esta solução alternativa adiciona uma etapa de descompactação adicional dentro da plataforma a fim de reproduzir o conteúdo de mídia.
[00020] O componente de dados de mídia de solicitação 140 opcio-nalmente chama a aplicação para receber dados de mídia. Os versados na técnica reconhecerão que os projetistas de software freqüen- temente fazem uma escolha entre um modelo “push” em que um componente recebe regularmente dados, e um modelo “pull” em que o componente interroga em busca de novos dados. O sistema de interação de mídia 100 pode receber dados periodicamente das aplicações para reprodução através do canal de mídia, ou o sistema 100 pode controlar a reprodução e, periodicamente, solicitar, da aplicação, a próxima fatia de dados de mídia (por exemplo, um quadro de vídeo ou amostra de áudio) para reprodução. O sistema 100 usa o componente de dados de mídia de solicitação 140 quando o sistema 100 controla a reprodução e solicita dados de mídia da aplicação (vide, por exemplo, A API GetSampleAsync descrita em mais detalhes aqui).
[00021] O componente de reprodução de mídia 150 renderiza mídia usando o componente de interface de hardware 160 e o conteúdo de mídia não-compactado recebido. O componente de reprodução de mídia 150 pode incluir várias etapas para preparar e reproduzir o conteúdo de mídia, por vezes denominado canal de processamento de mídia. Por exemplo, o componente de reprodução de mídia 150 pode incluir lógica de sincronização para o alinhamento e reprodução de amostras de áudio com quadros de vídeo associados em uma exibição audiovisual. O componente de reprodução de mídia 150 também pode incluir a capacidade de capturar novos dados de mídia (por exemplo, por meio de hardware, tal como um microfone ou outra fonte), e pode for- necer dados de mídia não compactados às aplicações por meio do componente de interface de mídia bruta 130 de modo que as aplicações possam compactar os dados de mídia em um formato específico suportado pela aplicação.
[00022] O componente de interface de hardware 160 interage com o hardware do computador para reproduzir e/ou capturar dados de mídia. O componente de interface de hardware 160 pode também fornecer controles de interface do usuário para controlar o sistema 100. Por exemplo, a interface de hardware pode fornecer acesso a um ou mais alto-falantes, meios de exibição, dispositivos de entrada, e assim por diante. O componente de interface de hardware 160 pode permitir que o usuário pause, busque e reproduza dados de mídia por meio de um ou mais controles de interface do usuário (por exemplo, botões na tela ou atalhos de teclado). Ao isolar as aplicações do hardware do sistema do computador, o sistema 100 impede que as aplicações realizem ações não autorizadas e prejudiquem o sistema do computador.
[00023] O dispositivo de computação no qual o sistema é implementado pode incluir uma unidade central de processamento, memória, dispositivos de entrada (por exemplo, teclado e dispositivos de apontamento), dispositivos de saída (por exemplo, dispositivos de exibição) e dispositivos de armazenamento (por exemplo, unidades de disco ou outros meios de armazenamento não-voláteis). Os dispositivos de memória e armazenamento são meios de armazenamento legíveis por computador que podem ser codificados com instruções executáveis por computador (por exemplo, software) que implementam ou viabilizam o sistema. Além disso, as estruturas de dados e estruturas de mensagem podem ser armazenadas ou transmitidas por meio de um meio de transmissão de dados, tal como um sinal em uma ligação de comunicações. Várias ligações de comunicação podem ser usadas, tal como a Internet, uma rede local, uma rede de longa distância, uma conexão discada ponto a ponto, uma rede de telefones celulares, entre outras.
[00024] As concretizações do sistema podem ser implementadas em vários ambientes operacionais que incluem computadores pessoais, computadores servidores, dispositivos portáteis ou laptop, sistemas multiprocessadores, sistemas baseados em microprocessadores, componentes eletrônicos programados pelo consumidor, câmeras digitais, PCs de rede, microcomputadores, computadores de grande porte, ambientes de computação distribuída que incluem qualquer um dos sistemas ou dispositivos acima, entre outros. Os sistemas de computador podem ser telefones celulares, assistentes digitais pessoais, telefones inteligentes (smartphones), computadores pessoais, componentes eletrônicos programados pelo consumidor, câmeras digitais, entre outros.
[00025] O sistema pode ser descrito no contexto geral de instruções executáveis por computador, tais como módulos de programa executados por um ou mais computadores ou outros dispositivos. Geralmente, os módulos de programa incluem rotinas, programas, objetos, componentes, estruturas de dados, entre outros, que efetuam tarefas específicas ou implementam tipos de dados abstratos específicos. Normalmente, a funcionalidade dos módulos de programa pode ser combinada ou distribuída conforme desejado em várias concretizações.
[00026] A Figura 2 é um fluxograma que ilustra o processamento do sistema ao nível de plataforma para reprodução de mídia, em uma concretização. No bloco 210, a plataforma baixa a aplicação. Por exemplo, a aplicação pode estar contida dentro de um recipiente compactado (por exemplo, um arquivo XAP) armazenado em um servidor na Internet. A plataforma recebe uma referência que indica onde encontrar a aplicação quando a plataforma é invocada. Por exemplo, se a plataforma for usada em um site da Rede, então uma página da Re- de pode conter uma referência à plataforma com uma indicação de uma aplicação para a plataforma executar. Continuando no bloco 220, a plataforma invoca a aplicação baixada. Por exemplo, a plataforma pode descompactar qualquer recipiente que empacote a aplicação (por exemplo, um módulo de software) e suas dependências (por exemplo, outros módulos), e então chamar uma função de inicialização fornecida pela aplicação. A aplicação pode fazer muitas coisas em resposta (vide a Figura 3), tal como acessar uma rede para recuperar conteúdo de mídia.
[00027] Continuando no bloco 230, a plataforma solicita a mídia a partir da aplicação. Por exemplo, a plataforma pode, periodicamente, chamar uma interface de recuperação de mídia acordada para receber um conjunto de quadros de vídeo ou amostras de áudio a partir da aplicação para reprodução. Em algumas concretizações, a aplicação pode, em vez disso, invocar a plataforma à medida que a mídia se torna disponível, em vez de a plataforma realizar a solicitação de mídia. Continuando no bloco 240, a plataforma recebe a mídia não compactada a partir da aplicação. A aplicação pode obter a mídia de diversas maneiras, inclusive baixando a mídia compactada pela rede e des- compactando a mídia usando um codec fornecido pela aplicação, criando a mídia usando técnicas comuns de síntese de mídia, ou modificando a mídia existente (por exemplo, por meio da aplicação de um ou mais efeitos de pós-processamento). Independentemente da origem da mídia, a aplicação fornece a mídia à plataforma em um formato compreendido pela plataforma que a plataforma consegue reproduzir sem descompactação adicional da mídia. Ao colocar a responsabilidade para extrair e descompactar a mídia sobre a aplicação, a plataforma permite que a aplicação use qualquer recipiente e formato de compactação de mídia que o autor da aplicação desejar.
[00028] Continuando no bloco 250, a plataforma envia a mídia não compactada através de um canal de processamento de mídia a reprodução utilizando o hardware disponível. Por exemplo, o canal de mídia pode usar uma API do sistema operacional (por exemplo, Microsoft ® DirectX ™) para reprodução de amostras de áudio usando alto- falantes ou para renderização de quadros de vídeo em um meio de exibição. Após o bloco 250, essas etapas terminam.
[00029] A Figura 3 é um fluxograma que ilustra o processamento do sistema ao nível de aplicação para reprodução de mídia, em uma con-cretização. No bloco 310, a aplicação recebe uma solicitação de mídia a partir da plataforma. Por exemplo, a plataforma pode invocar uma interface pré-definida que a aplicação implementa pelo fornecer dados de mídia. Continuando no bloco 320, a aplicação baixa a mídia compactada, tal como a partir de um servidor de rede. Por exemplo, a aplicação pode ser configurada para receber conteúdo de mídia a partir de um servidor da Rede que fornece conteúdo de mídia em um formato compactado, tal como MP4. Como alternativa ou adicionalmente, a aplicação pode criar conteúdo de mídia por meio de programação, tal como pela sintetização de uma série de notas musicais ou congregação de vários arquivos de mídia separados.
[00030] Continuando no bloco 330, a aplicação descompacta a mídia compactada. Por exemplo, a aplicação pode invocar um codec que descompacta dados de mídia para um formato específico da mídia compactada. A aplicação pode incluir o codec ou pode baixar o codec a partir de um servidor da rede. O codec, assim como a aplicação, roda em uma área de segurança de execução fornecida pela plataforma, que limita as ações que o codec pode executar para proteger o sistema do computador do usuário de código malicioso ou com defeito. Como a aplicação é responsável pela descompactação da mídia, as aplicações podem suportar novos tipos de mídia mediante a inclusão de codecs em seu próprio código de aplicação sem uma atualização de plataforma. Dessa forma, as aplicações podem suportar novos formatos rapidamente sem esperar que o desenvolvedor de plataforma adicione novo suporte a mídia.
[00031] Continuando no bloco 340, a aplicação opcionalmente aplica efeitos de pós-processamento à mídia descompactada. Nos sistemas tradicionais onde a plataforma realiza a descompactação, não é possível que as aplicações apliquem efeitos de pós-processamento à mídia. Os efeitos de pós-processamento podem incluir uma grande variedade de modificações de mídia, inclusive a modificação do fundo de um vídeo, a adição de uma sobreposição de vídeo (por exemplo, texto de legenda codificada), a adição de eco ao áudio, e assim por diante. A aplicação pode também ser capaz de economizar recursos mediante a inclusão de menos recursos de mídia, uma vez que a aplicação pode reutilizar recursos similares com pós-processamento para eliminar outros recursos. Por exemplo, uma aplicação que inclui um vídeo com cinco fundos que tradicionalmente baixaria cinco vídeos diferentes e forneceria o vídeo apropriado à plataforma para descompactação. Usando o sistema de interação de mídia, a aplicação poderia, em vez disso, incluir um vídeo com um fundo substituível (por exemplo, uma tela verde), e então fornecer imagens de tamanho menor para inserção como cada um dos cinco fundos durante o pós- processamento. A aplicação também pode usar o pós-processamento para inserir anúncios ou outras informações no fluxo de mídia.
[00032] Continuando no bloco 350, a aplicação fornece a mídia descompactada à plataforma para reprodução. A aplicação pode fornecer a mídia em blocos com base nas solicitações da plataforma, ou pode fornecer um link para um fluxo ou arquivo maior contendo mídia não-compactada para a plataforma reproduzir. Após o bloco 350, essas etapas terminam.
[00033] Em algumas concretizações, o sistema de interação de mí- dia oferece uma interface de hardware através do qual as aplicações podem renderizar mídia diretamente sem um canal de processamento de mídia. Por exemplo, o sistema pode fornecer uma região de mapa de bits gravável através da qual uma aplicação pode gravar dados diretamente na tela. O canal de processamento de mídia fornece a sincronização entre áudio e vídeo. No entanto, para aplicações que ren- derizam apenas o vídeo ou executam sua própria forma de sincronização, esse tipo de acesso direto é útil para o processamento mais eficiente do conteúdo de mídia.
[00034] Em algumas concretizações, o sistema de interação de mídia fornece uma interface de extensibilidade por meio da qual as aplicações podem adicionar suporte a codecs adicionais para a plataforma através de um modelo de extensão. Em vez de decodifi- car/descompactar os dados de mídia compactados diretamente, a aplicação pode invocar uma extensão de codec instalada e passar os dados compactados ou através da plataforma para o codec ou diretamente para o codec.
[00035] Em algumas concretizações, o sistema de interação de mídia fornece às aplicações acesso a suporte de hardware avançado para descompactar dados de áudio e vídeo. Por exemplo, muitos processadores modernos dão suporte a instruções para executar matemática vetorial e outras operações multimídia comuns. Um exemplo é o conjunto de instruções SSE2. O SSE é um acrônimo de dois níveis, em que SSE significa Streaming SIMD Extensions e SIMD significa Single Instruction, Multiple Data. A área de segurança de execução pode permitir que as aplicações usem tais instruções, tanto de maneira explícita quanto por compilação JIT do código de aplicação de uma maneira que produza código executável que utilize essas instruções. Como outro exemplo, o sistema de interação de mídia pode fornecer acesso a sombreadores de pixel ou vértice fornecidos por uma Unida- de de Processamento Gráfico (GPU), permitindo que as aplicações forneçam lógica de sombreamento ou código de sombreador executável por compilação J IT.
[00036] Em algumas concretizações, o sistema de interação de mídia dá suporte à codificação de uma maneira similar à decodificação. O sistema captura mídia por meio de hardware ou outra entrada (por exemplo, um dispositivo emulado por software) e fornece a mídia em um formato descompactado a uma aplicação. A aplicação seleciona e usa seu próprio codec para compactar os dados de mídia em um formato específico da aplicação. A aplicação pode então enviar a mídia a um servidor ou executar outras etapas relevantes à aplicação. O sistema também pode usar o modelo de extensão descrito na presente invenção para permitir que as aplicações registrem novos codecs de codificação que o sistema pode usar para fornecer a uma aplicação conteúdo de mídia em um formato selecionado pela aplicação.
[00037] Em algumas concretizações, o sistema de interação de mídia permite que as aplicações realizem o pós-processamento do conteúdo de mídia descompactado antes de fornecer o conteúdo de mídia ao sistema para reprodução. Por exemplo, as aplicações podem adicionar efeitos, como eco, ao áudio, ou modificar o vídeo alterando a velocidade de reprodução, corrigindo as cores, sobrepondo um logotipo, entre outros. As aplicações também podem usar o pós-processamento para oferecer um equalizador ou visualização de áudio ao usuário.
[00038] Vários aspectos da tecnologia aqui descrita são geralmente direcionados à dissociação da descompactação do conteúdo de mídia do processamento e reprodução de fluxo. Em geral, o código da aplicação hospedada realiza as operações de transferência, desempaco- tamento, e descompactação, em vez da plataforma. Como resultado, as aplicações podem suportar formatos novos e / ou de propriedade particular, tais como os fornecidos por terceiros, desenvolvidos fora de banda com a plataforma, por exemplo, o código independente pode desempacotar e descompactar fluxos de mídia WMB e WMA a partir de seus próprios formatos de recipiente possivelmente personalizados e injetar esses fluxos para reprodução. Como outro resultado, os dados de mídia podem provir de qualquer fonte ou fontes, por meio de quaisquer protocolos e / ou mecanismos de transporte. Ao mesmo tempo, a segurança é mantida através de um conjunto específico de APIs de plataforma que controlam as ações que o código hospedado pode realizar.
[00039] Em algumas concretizações, o sistema de interação de mídia fornece um ambiente de aplicação rodando em uma extensão de navegador com uma interface para permitir que o código em nível de aplicação não confiável forneça dados na forma de fluxos de vídeo, áudio e script simples para reprodução pelo ambiente de aplicação. Os dados podem provir de qualquer fonte e podem ser empacotados em qualquer formato, inclusive em formatos que os ambientes de aplicação anteriores não são capazes de processar. Note que, como usado aqui, "código de nível de aplicação" refere-se ao código que se comunica através de chamadas API para pelo menos um componente da plataforma de nível inferior, independentemente de qualquer nível real.
[00040] Embora muitos dos exemplos aqui apresentados sejam descritos com referência ao conteúdo de mídia reproduzido em um navegador / ambiente Microsoft ® Silverlight ™, entende-se que estes são apenas exemplos. Como pode ser prontamente apreciado, outros programas hospedeiros e / ou ambientes podem usar a tecnologia aqui descrita. Como tal, o sistema de interação da mídia não se limita a concretizações, aspectos, conceitos, estruturas, funcionalidades, ou exemplos particulares aqui descritos. Em vez disso, qualquer uma das concretizações, aspectos, conceitos, estruturas, funcionalidades ou exemplos aqui descritos não são limitantes, e o sistema pode ser usado de várias maneiras que oferecem assistência na computação e no processamento de conteúdo em geral.
[00041] A Figura 4 é um diagrama de blocos que ilustra um ambiente operacional do sistema de interação de mídia, em uma concretização. É ilustrado um dispositivo de reprodução de mídia 410, tal como um sistema de computador pessoal organizado com um nível de aplicação 412 e um nível de plataforma 414. Outros exemplos de dispositivos de reprodução de mídia incluem um telefone móvel ou outro dispositivo digital. O código em nível de aplicação 416, tal como uma aplicação da Rede ou outro código, está hospedado no nível de aplicação 412, e conforme descrito abaixo, processa (por exemplo, desempacota, extrai, descompacta e distribui) o conteúdo a partir de um recipiente 418. O código em nível de aplicação 416 pode ser qualquer código hospedado, tal como uma extensão de navegador baixada por meio de qualquer rede 420, tal como a Internet, conforme representado pelo conjunto de aplicações disponíveis 422. As aplicações 422 podem ser qualquer tipo de código executável, inclusive script ou outro código legível por humano que seja interpretado, ou código binário compilado ou intermediário que pode ser executado diretamente ou executado de alguma outra forma (por exemplo, por meio da compilação JIT). Note que, com respeito aos recipientes, uma opção de recipiente é “nenhum recipiente” ou somente áudio bruto (por exemplo, amostras PCM) ou vídeo, caso este em que a aplicação pode processar o conteúdo para reprodução, por exemplo, decriptografá-lo, dividí- lo em amostras, entre outros.
[00042] Como o código de nível de aplicação 416 processa o conteúdo do recipiente, o conteúdo pode estar em qualquer formato que o código de nível de aplicação 416 compreenda, permitindo que uma aplicação e/ou recipiente personalizado, por exemplo, seja hospeda- do e tenha seu conteúdo usado de alguma forma, por exemplo, reproduzido como mídia. Isto inclui recipientes / pacotes / formatos, formatos proprietários e extensões conhecidos para os pacotes / formatos existentes e pacotes de recipiente / formatos futuros ainda não desenvolvidos.
[00043] Além disso, o código em nível de aplicação 416 pode baixar um recipiente, tal como o recipiente 418, dentre um conjunto de recipientes 424 usando qualquer protocolo ou protocolos adequados por meio de qualquer transporte por rede adequado, por exemplo, Sockets / HTTP. Isso permite ao provedor de conteúdo flexibilidade significativa, por exemplo, o conteúdo pode ser distribuído entre servidores, inclusive para redundância, balanceamento de carga, segurança, e assim por diante. Por exemplo, uma única peça de conteúdo pode existir em diferentes formatos, em pacotes diferentes, ser separada em partes diferentes, ter diferentes requisitos de segurança, e assim por diante. Uma aplicação pode baixar os diferentes pacotes e combiná-los conforme a necessidade (ou selecionar um deles com base nas condições) para fornecer o conteúdo para reprodução.
[00044] Um recipiente pode compreender muitos tipos de dados diferentes. Enquanto que em um exemplo típico, os dados podem corresponder a várias mídias, tal como áudio, vídeo ou mídia de imagem, qualquer tipo de dado pode ser armazenado em um recipiente. Além disso, um recipiente pode ter dois ou mais conjuntos de dados diferentes, tal como áudio separado, vídeo, e conjuntos de dados de imagem fixa e / ou distribuir cada tipo de dado suportado usando recipientes diferentes. Alguns recipientes podem ser relativamente complexos e podem conter vários tipos de dados. Observe que, como código Silverlight ™ pode ser fatorado em bibliotecas de códigos, diferentes bibliotecas para download e desempacotamento de diferentes formatos podem ser criadas, reutilizadas e compartilhadas. Isso possibilita uma maneira de compartilhar quaisquer formatos novos de recipiente e empacotamento que sejam desenvolvidos com o tempo.
[00045] O código, tal como o código em nível de aplicação 416 exemplificado hospedado no nível de aplicação 412, se comunica com o nível da plataforma 414 por meio de um conjunto de APIs 430. Por exemplo, o código de nível de aplicação faz chamadas API para um ambiente de aplicação 432 (correspondente a um elemento de mídia) para fornecer conteúdo de mídia para reprodução, bem como para realizar outras operações relacionadas a mídia, tal como procurar, pausar, parar e assim por diante . Em geral, independentemente do formato do recipiente, o nível da plataforma 414 permanece inalterado e independente de qualquer aplicação em particular.
[00046] O código de nível de aplicação 416 também pode se comunicar com o ambiente de aplicação por outras razões, tal como para informar o código de nível de aplicação de quando uma licença para descriptografar mídia protegida (por exemplo, vídeo, áudio, e dados de fluxo de script) é necessária, assim como para permitir que o código de nível de aplicação forneça ao ambiente de aplicação os dados de licença, por exemplo, para descriptografar os fluxos. Desta forma, o gerenciamento de direitos digitais (DRM) pode ser gerenciado internamente e não por um provedor externo DRM, por exemplo, as solicitações de licença DRM não podem retornar através de solicitações da Rede gerenciadas ou APIs do cliente da Rede. Um vetor de inicialização DRM fornece dados sobre a amostra para descriptografar a amostra. No entanto, note que a flexibilidade da API permite que outros sistemas de gerenciamento de direitos sejam usados em conjunto com o sistema. Como exemplo, o conteúdo pode ser criptografado através da rede e, então, descriptografado antes de ser passado através do MediaStreamSource aqui descrito.
[00047] O ambiente de aplicação 432 pode ser uma extensão ou outro tipo de ambiente que usa um navegador como interface do usuário. O navegador pode ser um navegador da Rede, tal como um componente do sistema operacional, por exemplo, e pode servir como um meio de exibição e mecanismo de interface humana para código de nível de aplicação (por exemplo, o código de nível de aplicação 416) que pode ser executado em conjunto com o ambiente de aplicação. O ambiente de aplicação pode ser incorporado ao navegador. Como uma extensão, o navegador pode invocar o ambiente de aplicação 432 quando o navegador detectar uma aplicação, tal como o código de nível de aplicação 416 a ser executado. Por exemplo, um elemento de vídeo pode ser criado em uma página da Rede exibida por um navegador. O código de nível de aplicação 416 pode realizar várias ações para recuperar, processar, preparar e fazer a plataforma exibir o elemento de vídeo. O usuário pode ser capaz de manipular os controles dentro da interface do usuário para pausar o vídeo, saltar o vídeo para um certo ponto, e realizar outras operações com base na entrada do usuário.
[00048] A Figura 5 é um diagrama de blocos que ilustra um exemplo mais específico, no qual o código de nível de aplicação deriva de um tipo abstrato, em uma concretização. O código de nível de aplicação 416 deriva do tipo abstrato MediaStreamSource 538, para obter uma implementação concreta (instância do objeto), aqui chamada de CustomMediaStreamSource 540. Neste exemplo, que representa uma implementação típica, o CustomMediaStreamSource concreto 540 é fornecido em um conjunto separado que o código de nível de aplicação 416 inclui, representado aqui como uma biblioteca de vínculo dinâmico (DLL), CustomMediaStreamSource.dll, ou simplesmente DLL 542. Conforme descrito abaixo, o CustomMediaStreamSource concreto 540 recebe solicitações para fluxos de mídia elementares e diagnósticos do elemento de mídia, e a DLL 542 fornece respostas compreen- dendo fluxos elementares de mídia elementares e diagnósticos. Com essas respostas, o elemento de mídia toma as medidas apropriadas, inclusive fornecer os fluxos de mídia a um canal de processamento de mídia 544 para reprodução.
[00049] A Figura 6 é um fluxograma que ilustra as etapas de reprodução correspondentes ao exemplo da Figura 5, em uma concretização. O bloco 602 representa o código em nível de aplicação 416 associando um MediaStreamSource ao elemento de mídia. Por exemplo, a aplicação pode chamar um método “definir fonte”, apontando uma propriedade “fonte” (source) para o URI de um recipiente, e passar uma referência para a implementação do CustomMediaStream- Source concreto 540. Essa ação inicia uma conversação entre o elemento de mídia e o CustomMediaStreamSource concreto 540.
[00050] O elemento de mídia verifica se ele reproduzindo mídia atualmente, e, neste caso, interrompe essa reprodução, conforme re-presentado pelo bloco 606. Em qualquer caso, no bloco 608, o elemento de mídia solicita que o CustomMediaStreamSource 540 abra sua mídia. Se, no bloco 610, for encontrado um erro pelo CustomMediaStreamSource (MSS), por exemplo, a mídia não abriu, estava corrompida, entre outros, no bloco 610, o processamento pára, e, por exemplo, o CustomMediaStreamSource 540 pode, opcionalmente, fornecer uma mensagem ou similar para relatar o problema ao elemento de mídia, bem como para a aplicação, tal como para notificar o usuário de um problema.
[00051] No caso de não haver um problema, no bloco 612, o Cus-tomMediaStreamSource 540 informa o elemento de mídia de qual tipo de mídia ele representa, por exemplo, WMA, WMV, MP3 ou RAW. Como representado pelo bloco 616, o elemento de mídia começa então a solicitar amostras. Caso a mídia esteja disponível no bloco 618, e não há nenhum erro (bloco 620), o elemento de mídia reproduz a amostra de mídia no bloco 622, por exemplo, injeta-a no canal de processamento de mídia 544, tal como em um armazenamento temporário de reprodução de canal de processamento. O processo continua então até que não haja mais mídia disponível, ou seja, a mídia está esgotada, momento este em que o bloco 618 irá ramificar-se no bloco 624, onde o elemento de mídia solicita que o CustomMediaStream- Source 540 feche a mídia. No caso de ter ocorrido um erro durante o laço de reprodução de amostra, o bloco 620 sai do laço de reprodução para que o processamento de mídia termine, com uma mensagem opcional (bloco 626), como descrito acima.
[00052] Outra possibilidade, geralmente representada pelo bloco 614, é que o CustomMediaStreamSource 540 solicite outra operação de reprodução, tal como saltar, pausar, terminar, e assim por diante. Como representado no bloco 616, o elemento de mídia responde solicitando que o CustomMediaStreamSource 540 tome a ação conforme apropriado. Note que, com tal mecanismo, o nível da plataforma, assim, permanece no controle dos vários aspectos da operação de reprodução. O nível de aplicação é responsável pelo processamento do conteúdo do recipiente, inclusive por desempacotar, extrair, descompactar, selecionar uma amostra e fornecer o conteúdo à plataforma.
[00053] A seguir, é apresentada uma API ilustrativa adequada à im-plementação do processamento aqui descrito.
[00054] Segue um exemplo do uso das APIs apresentadas acima dentro de uma aplicação para obter uma amostra de mídia bruta:
[00055] O atributo MediaStreamAttributeKeys.FourCC aceita os tipos YV12 para vídeo bruto não compactado e RGBA para a informação de cor bruta (Vermelho, Verde, Azul e Alfa). O MediaSampleAttri- buteKeys aceita valores para a largura e altura do buffer para descrever, para a plataforma, a largura e altura reais do buffer de amostra que a aplicação está passando para a plataforma para reprodução.
[00056] A estrutura YV12 pode ser pensada como uma matriz contendo três planos de cores, onde o tamanho da amostra dentro de cada plano é de 8 bits, com o plano Y tendo o tamanho (X, Y) e sendo seguido por um plano U de tamanho (X/2, Y/2) que é seguido por um plano V de tamanho (X/2, Y/2). Por exemplo, imaginemos uma imagem de 10x10:
[00057] Pode-se pensar numa amostra RGBA como uma matriz contendo amostras de 4 bytes, em que cada amostra contém quatro canais de 1 byte na ordem Alfa, Vermelho, Verde e Azul. Para a mesma imagem 10x10 acima:
[00058] O áudio bruto (por exemplo, uma amostra PCM) é expresso como uma estrutura WaveFormatEx que é serializada em uma sequência de caracteres hex e passada para um MediaStreamSource usando o atributo CodecPrivateData definido acima. Uma amostra de áudio PCM é representada como um fluxo de bytes. O tempo de execução obterá os bytes individualmente, no caso de amostras de 8 bits, ou em pares, no caso de amostras de 16 bits. Exemplo
[00059] Como descrito acima, é proporcionada uma classe de base abstrata com a qual o elemento de mídia 432 negocia, tal como para obter fluxos de mídia elementares (por exemplo, WMV, WMA, MP3 e RAW) e diagnósticos. Os desenvolvedores de aplicações fornecem implementações concretas dessa classe de base abstrata (por exemplo, o CustomMediaStreamSource 540 é um exemplo concreto da classe de base abstrata MediaStreamSource 538).
[00060] Por meio das APIs 430, o código de nível de aplicação 416 instancia um CustomMediaStreamSource concreto 540 e o associa com um elemento de mídia 432 chamando um método no elemento de mídia 432, que, neste exemplo, é MediaElement.SetSource (MediaStreamSource). Após essa chamada, as solicitações de canal de processamento de mídia normais para fluxos de mídia elementares são encaminhadas para o CustomMediaStreamSource concreto 540. Por meio das APIs expostas, como estabelecido acima, o CustomMediaS- treamSource 540 fornece o canal de processamento de mídia com esses fluxos de mídia elementares, bem como quaisquer informações de diagnóstico que o elemento de mídia 432 utilize.
[00061] Neste exemplo, com relação a um elemento de mídia 432 tendo um MediaStreamSource definido nele, quando um elemento de mídia 432 e uma CustomMediaStreamSource 540 tiverem sido criados, a aplicação 416 chama MediaElement.SetSource com o novo MediaStreamSource. O elemento de mídia 432, em seguida, faz com que o evento MediaStreamSource.OpenMediaAsync seja invocado.
[00062] Um MediaStreamSource, tal como o CustomMediaStreamSource 540, é descartado e recriado conforme necessário após o fechamento. O fechamento ocorre se o elemento de mídia 432 tiver sua propriedade Source definida como uma nova fonte, se o elemento de mídia 432 tiver SetSource (nulo) chamado nela e sua propriedade Source também for nula, ou se um erro tiver ocorrido. Note que, neste exemplo de implementação, uma exceção é acionada se for feita uma tentativa de definir o elemento Mídia 432 como um MediaStreamSource já fechado.
[00063] Quando o elemento de mídia 432 é aberto e o MediaStreamSource representa uma Difusão, o elemento de mídia 432 faz com que o evento MediaStreamSource OpenMediaAsync seja disparado. O CustomMediaStreamSource 540 coleta seus fluxos de áudio e vídeo, fornecendo MediaStreamDescriptions para cada fluxo. O Cus-tomMediaStreamSource 540 cria uma nova coleção mediaSourceAttri- butes com Duration definido como zero (0), e CanSeek definido como falso. O CustomMediaStreamSource 540 chama ReportMediaComple- ted (fluxos de mídia, atributos).
[00064] Em uma implementação exemplificativa, quando o elemento de mídia 432 abre e o CustomMediaStreamSource 540 representa conteúdo "Sob Demanda", o elemento de mídia 432 faz com que o evento MediaStreamSource OpenMediaAsync seja disparado. O Cus-tomMediaStreamSource 540 coleta seus fluxos de áudio e vídeo, criando MediaStreamDescriptions para cada fluxo. O CustomMediaStreamSource 540 cria uma nova coleção mediaSourceAttributes com Duration definido como a duração e CanSeek definido como verdadeiro. O CustomMediaStreamSource 540 chama ReportMediaCompleted (fluxos de mídia, atributos).
[00065] O CustomMediaStreamSource 540 pode corresponder a múltiplos fluxos de taxa de bits. Note que, em uma implementação exemplificativa, para implementadores MultipleBitRate, a recomendação é somente expor um fluxo de áudio e um fluxo de vídeo (por meio de ReportMediaCompleted) que declara a maior taxa de bits permitida, e passar amostras de diferentes taxas de bits, à medida que necessário, em ReportGetSampleCompleted. Por exemplo, o conteúdo pode ser codificado diversas vezes, com diferentes taxas de bits, cada uma correspondendo a um recipiente recortado de um arquivo em blocos endereçáveis por URI. O cliente e/ou servidor pode alterar quais blocos ele baixa com base em condições, por exemplo, carga da rede, carga do cliente, carga do servidor, entre outros, de modo a fornecer uma qualidade / resolução de vídeo diferente baseado nas condições de carga em vez de pausar a reprodução.
[00066] Quando o CustomMediaStreamSource 540 corresponde a múltiplos fluxos de áudio, o elemento de mídia 432 faz com que o evento MediaStreamSource OpenMediaAsync seja disparado. O Cus-tomMediaStreamSource 540 coleta seu fluxos de áudio e de vídeo, criando MediaStreamDescriptions para cada fluxo. O CustomMediaStreamSource 540 chama ReportMediaCompleted (fluxos de áudio, e MediaStreamDescriptions de vídeo).
[00067] Note que o MediaStreamSource pode conter múltiplos fluxos de vídeo, por exemplo, os desenvolvedores podem tentar alternar entre múltiplos fluxos de vídeo, embora os resultados não sejam garantidos em uma implementação. Para facilitar os comandos de script e os marcadores, em uma implementação, os desenvolvedores usam a coleção TimelineMarkers do elemento de mídia 432.
[00068] Quando o elemento de mídia 432 tiver Stop chamado nele, em um exemplo típico, o elemento de mídia 432 para de disparar eventos MediaStreamSource GetSampleAsync (tipo de mídia). Os desenvolvedores de aplicações usam o evento CurrentStateChanged do elemento de mídia e a propriedade Currentstate em conjunto com um CustomMediaStreamSource para implementar isso. Os desenvolvedores de bibliotecas podem expor um método para um desenvolvedor de aplicações enganchar as alterações Currentstate do elemento de mídia 432 com a lógica CustomMediaStreamSource Stop da aplicação.
[00069] Quando o elemento de mídia 432 Pause chamado nele, em um exemplo típico, o elemento de mídia 432 para de disparar eventos MediaStreamSource GetSampleAsync (tipo de mídia). Para obter uma notificação de alteração de estado, os desenvolvedores de aplicações usam um evento CurrentStateChanged do elemento de mídia e a propriedade Currentstate em conjunto com um CustomMediaStreamSource. Os desenvolvedores de bibliotecas podem expor um método para um desenvolvedor de aplicações enganchar as alterações Currentstate do elemento de mídia 132 com sua lógica MediaStreamSource Pause.
[00070] Ao retornar de um estado pausado, chamando Play no elemento de mídia 432, por exemplo, uma aplicação de reprodutor de vídeo faz com que MediaElement.Play seja chamado, o elemento de mídia 432 começa a disparar eventos MediaStreamSource GetSampleAsync (tipo de mídia) Ao retormar de um estado Stopped, um reprodutor de vídeo faz com que MediaElement.Play seja chamado, e o elemento de mídia 432 dispara um evento MediaStreamSource See- kAsync (começo do fluxo). O CustomMediaStreamSource 540 chama ReportSeekCompleted (muito próximo ao começo do fluxo), e o elemento de mídia 432 começa a disparar eventos MediaStreamSource GetSampleAsync (tipo de mídia).
[00071] Com respeito às pesquisas, para uma pesquisa normal, a aplicação de reprodutor de vídeo define MediaElement.Position. Em resposta, o elemento de mídia 432 faz com que MediaStreamSour-ce.SeekAsync (nova posição como pulsos de 100ns) seja disparado. CustomMediaStreamSource 540 ajusta seus fluxos para a amostra mais próxima para a nova localização. O CustomMediaStreamSource 540 chama ReportSeekCompleted (posição da amostra mais próxima em pulsos de 100ns). O elemento de mídia 432 faz com que MediaS-treamSource.GetSampleAsync (nova posição como pulsos de 100ns) seja disparado. O CustomMediaStreamSource 540 retorna a amostra solicitada em MediaStreamSource.ReportGetSampleCompleted.
[00072] Para uma Busca até o fim do fluxo, a aplicação de reprodutor de vídeo define MediaElement.Position, e o elemento de mídia 432 faz com que MediaStreamSource.SeekAsync (nova posição como pulsos de 100 ns) seja disparado. O CustomMediaStreamSource 540 ajusta seus fluxos para a amostra mais próxima para a nova localização. O CustomMediaStreamSource 540 chama ReportSeekCompleted (posição da amostra mais próxima em pulsos de 100ns). O elemento de mídia 432 faz com que MediaStreamSource.GetSampleAsync (nova posição como pulsos de 100ns) seja disparado. O CustomMediaStreamSource 540 retorna ReportGetSampleCompleted (nulo).
[00073] Quando o elemento de mídia 432 entra em um estado de erro, por exemplo, o elemento de mídia 432 atinge um erro do qual ele não consegue se recuperar, o elemento de mídia 432 faz com que MediaStreamSource.CloseAsync seja disparado. O CustomMediaStre-amSource 540 desfaz-se de seu estado interno conforme necessário, e se desassocia do CustomMediaStreamSource 540 definindo internamente sua Source (fonte) como nulo. O CustomMediaStreamSource 540 transita para o estado fechado.
[00074] Quando o elemento de mídia 432 alterna os fluxos de áudio, por exemplo, para um cenário em que há múltiplas trilhas de linguagens, o reprodutor de mídia faz com que MediaEle- ment.AudioStreamlndex seja definido. O elemento de mídia 432 causa MediaStreamSource.SwtichMediaStreamAsync (fluxo para o qual será alternado). O CustomMediaStreamSource 540 alterna o fluxo, ajusta o desvio no novo fluxo para o momento certo, e inicia o armazenamento em memória temporária, se necessário. O CustomMediaStreamSource 540 chama ReportSwitchMediaStreamCompleted (fluxo para o qual foi alternado).
[00075] Sempre que o CustomMediaStreamSource 540 não conseguir completar uma solicitação de elemento de mídia ou tiver um erro fora de uma solicitação de elemento de mídia do qual ele não consegue se recuperar, o CustomMediaStreamSource 540 entra em um estado de erro e informa o elemento de mídia 432 chamando ErrorOccu- red. Se o CustomMediaStreamSource 540 tiver um erro interno irrecuperável, o CustomMediaStreamSource 540 chama ErrorOccured (descrição do erro). Em resposta, o elemento de mídia 432 recebe uma mensagem e inicia um desligamento interno, dispara um evento Medi- aFailed com a descrição do erro, e faz com que CloseMediaAsync seja disparado. O elemento de mídia 432 adicionalmente descarta quaisquer estruturas, limpa e se desassocia do CustomMediaStreamSource 540 definindo sua fonte interna como nulo. Em relação ao armazenamento temporário de MediaStreamSourcem o elemento de mídia 432 solicita uma amostra, fazendo com que GetSampleAsync seja disparado. O CustomMediaStreamSource 540 não possui a amostra necessária e inicia o processo de pré-carregamento no armazenamento temporário (supondo que o armazenamento temporário esteja totalmente vazio). O CustomMediaStreamSource 540 tenta coletar a amostra do arquivo de mídia e relata que ele está sendo pré-carregado no armazenamento temporário com ReportGetSampleProgress (0). Após certo período de tempo, o elemento de mídia 432 entra em um estado de pré-carregamento no armazenamento temporário, por meio do que o CustomMediaStreamSource 540 irá por fim preencher alguma parte (por exemplo, metade) de seu armazenamento temporário. Supondo que esteja metade cheio, o CustomMediaStreamSource 540 chama ReportGetSampleProgress (0.5). Após mais algum tempo, o Custom-MediaStreamSource 540 terá preenchido o armazenamento temporário em 90% e chama ReportGetSampleProgress (0.9). Após algum tempo adicional, o CustomMediaStreamSource 540 terá preenchido totalmente o armazenamento temporário e retorna uma amostra chamando ReportGetSampleCompleted (próxima amostra). Às vezes, após receber, a amostra, o elemento de mídia 432 transita de volta para o estado de reprodução.
[00076] Em relação a uma operação típica de Reprodução, o elemento de mídia 432 faz com que GetSampleAsync (Video) seja disparado, por meio do que o CustomMediaStreamSource 540 coleta a amostra e a retorna por meio de ReportGetSampleCompleted (video- Sample). O sistema repete esse processo para cada tipo de amostra: áudio e/ou vídeo.
[00077] O contrato entre o elemento de mídia 432 e um CustomMe-diaStreamSource 540 depende do conjunto de MediaStreamDescrip- tions que o MediaStreamSource passa inicialmente para o elemento de mídia 432. A comunicação do elemento de mídia 432 com o Cus-tomMediaStreamSource 540 e a partir do CustomMediaStreamSource 540 para o elemento de mídia 432 corresponde a esse conjunto de MediaStreamDescriptions. Em outras palavras, há uma restrição para cada MediaStreamDescription que o elemento de mídia 432 pode passar para o CustomMediaStreamSource 540, a saber, que é igual a pelo menos um dos MediaStreamDescriptions que o CustomMediaStreamSource 540 contém. Na direção oposta, o CustomMediaStreamSource 540 pode saber de um mais fluxos extras do que relata o elemento de mídia 432, mas não solicita ao elemento de mídia 432 sobre qualquer desses fluxos extras. Uma maneira de evitar tais questões contratuais consiste no CustomMediaStreamSource 540 prender-se à mesma coleção de descrições passadas durante a chamada para Re- portMediaCompleted durante sua vida útil.
[00078] A Figura 7 é um diagrama de fluxo de dados que ilustra a definição de subclasses de um MediaStreamSource para lidar com formatos de recipiente personalizados, em uma concretização. Os desenvolvedores podem definir uma subclasse de MediaStreamSource para manipular seu próprio formato de recipiente. A maior parte da API MediaStreamSource trabalha em pares e segue o padrão de chamada representado na Figura 7. Isto é, quando o elemento de mídia 432 estiver pronto para informação, ele faz uma solicitação para um método interno no CustomMediaStreamSource 540. O método interno Cus-tomMediaStreamSource chama diretamente o método "Async" protegido, o CustomMediaStreamSource 540 realiza algum processamento, e o CustomMediaStreamSource 540 chama o método "Completed" protegido para sinalizar que ele tem a informação solicitada. O método "Completed" chama um método interno no elemento de mídia 432 para sinalizar que ele tem a informação e para transmitir essas informações de volta ao elemento de mídia 432.
[00079] Note que mesmo que os nomes de métodos são "Async", o código pode responder de forma síncrona com a chamada "Completed" correspondente de dentro do método "Async"; a nomeação "Async" é mais uma dica sobre como elemento de mídia 432 chama esse método. Além disso, em uma implementação ilustrativa, as subclasses MediaStreamSource só podem chamar métodos "Completed" em resposta a chamadas de métodos "Async" correspondentes; uma exceção a isso é GetSampleAsync e ReportGetSampleCompleted. Neste caso, o CustomMediaStreamSource 540 pode estar pré- carregando no armazenamento temporário e pode responder com uma ou mais chamadas ReportGetSampleProgress seguidas de uma chamada ReportGetSampleCompleted. Neste exemplo, se um método "Completed" for chamado por um CustomMediaStreamSource 540 sem o elemento de mídia 432 primeiro chamando o método "Async" correspondente, um InvalidOperationException é disparado com a mensagem "Só chamar *Complete em resposta a uma chamada de “Async””. O elemento de mídia 432 só faz uma chamada "Async" por vez e irá aguardar a resposta "Completed" do CustomMediaStreamSource 540 antes de emitir outra solicitação. Uma exceção a isso é CloseAsync, que pode ser disparado depois de qualquer outra chamada Async se o elemento de mídia 432 quiser fechar por causa de um erro ou porque o elemento de mídia 432 está sendo fechado.
[00080] Pelo disposto acima, será apreciado que concretizações específicas do sistema de interação de mídia foram descritas aqui para fins de ilustração, mas que várias modificações são passíveis de serem feitas sem divergir do âmbito e essência da invenção. Logo, a invenção não está restrita, stalvo pelas reivindicações anexas.
Claims (13)
1. Método implementado por computador para manipular formatos de mídia extensíveis em uma plataforma de aplicação hospedada caracterizado pelo fato de que compreende as etapas de: receber (210) uma aplicação hospedada para execução pela plataforma de aplicação hospedada, em que a aplicação hospedada interage com a plataforma de aplicação hospedada para reproduzir mídia, em que a plataforma de aplicação hospedada limita o acesso da aplicação hospedada a um sistema de computador para aumentar a segurança; invocar (220) a aplicação hospedada recebida; solicitar (230) a mídia a partir da aplicação hospedada, em que solicitar mídia a partir da aplicação hospedada compreende chamar uma interface de recuperação de mídia implementada pela aplicação hospedada; receber (240) mídia não compactada a partir da aplicação hospedada, em que a aplicação hospedada é configurada para realizar a descompactação da mídia a partir de um formato em que a aplicação hospedada recebe a mídia para a mídia não compactada e em que a plataforma de aplicação hospedada fornece a aplicação hospedada com acesso suficiente ao sistema de computador para descompactar a mídia para permitir que a aplicação hospedada suporte a novos formatos de mídia sem atualizar a plataforma de aplicação hospedada, mas não fornece a aplicação hospedada com acesso direto ao sistema do computador, em que o aplicação hospedada recebe a mídia em um formato não compreendido pela plataforma de aplicação hospedada e descompacta a mídia usando um codec fornecido pela aplicação hospedada para converter a mídia em um formato que a plataforma de aplicação hospedada possa reproduzir; e enviar (250) a mídia não compactada através de um canal de reprodução de mídia para reprodução usando o hardware disponível sob o controle da plataforma de aplicação hospedada, em que as etapas anteriores são realizadas por pelo menos um processador.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que solicitar a mídia a partir da aplicação hospedada compreende periodicamente chamar uma interface de recuperação de mídia acordada implementaa pela aplicação hospedada.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que solicitar a mídia a partir da aplicação hospedada compreende proporcionar uma função de plataforma que a aplicação hospedada chama para fornecer a mídia para a plataforma de aplicação hospedada.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que receber a mídia descompactada compreende receber a mídia em um formato decodificado que a plataforma de aplicação hospedada pode reproduzir sem ainda decodificar do formato de mídia.
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o canal de mídia invoca uma API do sistema operacional (interface de programação de aplicação) para reproduzir amostras de áudio usando alto-falantes e renderizar quadros de vídeo para um meio de exibição.
6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a mídia não compactada recebida compreende um formato de YV12, RGBA (vermelho verde azul alfa) e PCM (modulação de código de pulso).
7. Sistema de computador para comunicação entre uma aplicação e uma plataforma de hospedagem que executa a aplicação para reproduzir ou capturar mídia em um ou mais formatos compacta- dos caracterizado pelo fato de que compreende: um processador e memória; um componente de aplicação de invocação (110) configurado para carrega e invoca o código de aplicação dentro da plataforma hospedada; um componente de área de segurança de execução (120) configurado para fornecer um ambiente de execução para o código de aplicação que limita as ações que a aplicação pode executar a um conjunto seguro de ações que não são prejudiciais ao sistema de computador, em que as ações incluem descompactar um novo formato de mídia sem acessar o sistema do computador fora do ambiente de execução; um componente de interface de mídia bruta (130) configurado para fornecer uma Interface de Programação de Aplicativos (API) através da qual as aplicações podem fornecer à plataforma de hospedagem o conteúdo de mídia bruto não-compactado para a plataforma reproduzir sem fornecer a aplicação com acesso direto ao sistema do computador; um componente de reprodução de mídia (150) configurado para renderizar a mídia com base no conteúdo de mídia não compactado recebido sob controle da plataforma de hospedagem; e um componente de interface de hardware (160) configurado para interagir com o hardware do computador e receber dados a partir do componente de reprodução de mídia para reprodução no hardware de computador, em que as aplicações acessam o hardware do computador indiretamente por meio da plataforma de hospedagem, em que o componente de aplicação de chamada baixa a aplicação a partir de um servidor de rede junto com pelo menos um codec referenciado de aplicação para manipular dados de mídia em um determinado formato.
8. Sistema, de acordo com a reivindicação 7, caracterizado pelo fato de que o componente de aplicação de invocação é ainda configurado para receber uma referência a uma aplicação a partir de uma página da Rede e iniciar a aplicação com base na referência.
9. Sistema, de acordo com a reivindicação 7, caracterizado pelo fato de que o componente da área de segurança de execução é ainda configurado para receber o código da aplicação não compilado da aplicação e para Just In Time (JIT) compilar o código da aplicação para execução dentro do ambiente de execução.
10. Sistema, de acordo com a reivindicação 7, caracterizado pelo fato de que a área de segurança de execução é ainda configurada para fornecer um ou mais codecs registrados que uma aplicação pode invocar para descompactar dados de mídia, em que os codecs registrados podem ser atualizados sem atualizar a plataforma de hospedagem para adicionar suporte aos tipos de mídia.
11. Sistema, de acordo com a reivindicação 7, caracterizado pelo fato de que a aplicação recebe conteúdo de mídia compactado, descompacta o conteúdo de mídia compactada dentro da aplicação, e fornece ao componente da interface de mídia bruta com conteúdo de mídia não compactado para reprodução.
12. Sistema, de acordo com a reivindicação 7, caracterizado pelo fato de que o componente de interface de mídia bruta recebe conteúdo de mídia não compactado a partir da aplicação e em que a aplicação sintetiza o conteúdo de mídia internamente.
13. Sistema, de acordo com a reivindicação 7, caracterizado pelo fato de que o componente de interface de mídia bruta recebe conteúdo de mídia não compactado a partir da aplicação que realiza o pós-processamento do conteúdo de mídia para modificar o conteúdo de mídia e fornecer o conteúdo de mídia modificado como conteúdo de mídia não compactado à plataforma de hospedagem.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/405.208 | 2009-03-16 | ||
US12/405,208 US8640097B2 (en) | 2009-03-16 | 2009-03-16 | Hosted application platform with extensible media format |
PCT/US2010/026702 WO2010107622A2 (en) | 2009-03-16 | 2010-03-09 | Hosted application platform with extensible media format |
Publications (2)
Publication Number | Publication Date |
---|---|
BRPI1012352A2 BRPI1012352A2 (pt) | 2016-03-29 |
BRPI1012352B1 true BRPI1012352B1 (pt) | 2020-10-20 |
Family
ID=42731748
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
BRPI1012352-0A BRPI1012352B1 (pt) | 2009-03-16 | 2010-03-09 | método implementado por computador para manipular formatos de mídia extensíveis em uma plataforma de aplicação hospedada e sistema de computador para comunicação entre uma aplicação e uma plataforma de hospedagem |
Country Status (7)
Country | Link |
---|---|
US (1) | US8640097B2 (pt) |
EP (1) | EP2409223A4 (pt) |
JP (1) | JP5781497B2 (pt) |
CN (1) | CN102356380A (pt) |
BR (1) | BRPI1012352B1 (pt) |
MX (1) | MX2011009166A (pt) |
WO (1) | WO2010107622A2 (pt) |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8424082B2 (en) * | 2008-05-08 | 2013-04-16 | Google Inc. | Safely executing an untrusted native code module on a computing device |
US8397215B2 (en) * | 2009-05-18 | 2013-03-12 | National Instruments Corporation | Executing a physical model with multiple physical domains in a web browser |
US20150205489A1 (en) * | 2010-05-18 | 2015-07-23 | Google Inc. | Browser interface for installed applications |
US8838680B1 (en) * | 2011-02-08 | 2014-09-16 | Google Inc. | Buffer objects for web-based configurable pipeline media processing |
US8902235B2 (en) | 2011-04-07 | 2014-12-02 | Adobe Systems Incorporated | Methods and systems for representing complex animation using scripting capabilities of rendering applications |
US9286142B2 (en) * | 2011-04-07 | 2016-03-15 | Adobe Systems Incorporated | Methods and systems for supporting a rendering API using a runtime environment |
US8804819B1 (en) | 2011-04-19 | 2014-08-12 | Google Inc. | Method and apparatus for encoding video using data frequency |
US8681866B1 (en) | 2011-04-28 | 2014-03-25 | Google Inc. | Method and apparatus for encoding video by downsampling frame resolution |
US9106787B1 (en) | 2011-05-09 | 2015-08-11 | Google Inc. | Apparatus and method for media transmission bandwidth control using bandwidth estimation |
US20130167028A1 (en) * | 2011-06-01 | 2013-06-27 | Adobe Systems Incorporated | Restricting media content rendering |
US8856624B1 (en) | 2011-10-27 | 2014-10-07 | Google Inc. | Method and apparatus for dynamically generating error correction |
US8751800B1 (en) | 2011-12-12 | 2014-06-10 | Google Inc. | DRM provider interoperability |
US9606845B2 (en) * | 2012-03-05 | 2017-03-28 | Hewlett-Packard Development Company, L.P. | Proxy for accessing a middleware subsystem |
US9185429B1 (en) | 2012-04-30 | 2015-11-10 | Google Inc. | Video encoding and decoding using un-equal error protection |
CN103686164A (zh) * | 2012-09-06 | 2014-03-26 | 腾讯科技(深圳)有限公司 | 自动适配硬件编解码的方法及系统及模块 |
US9092617B2 (en) * | 2012-11-08 | 2015-07-28 | Intel Corporation | Protecting systems from unauthorized access to system resources using browser independent web page technology |
US9172740B1 (en) | 2013-01-15 | 2015-10-27 | Google Inc. | Adjustable buffer remote access |
US9311692B1 (en) | 2013-01-25 | 2016-04-12 | Google Inc. | Scalable buffer remote access |
US9225979B1 (en) | 2013-01-30 | 2015-12-29 | Google Inc. | Remote access encoding |
US9519708B2 (en) * | 2013-05-29 | 2016-12-13 | Microsoft Technology Licensing, Llc | Multiple concurrent audio modes |
JP6470753B2 (ja) * | 2013-08-05 | 2019-02-13 | リソフトデフ, インコーポレイテッド | 拡張可能メディアフォーマットのシステムおよび使用方法 |
US10824756B2 (en) | 2013-09-20 | 2020-11-03 | Open Text Sa Ulc | Hosted application gateway architecture with multi-level security policy and rule promulgations |
US10171501B2 (en) * | 2013-09-20 | 2019-01-01 | Open Text Sa Ulc | System and method for remote wipe |
EP2851833B1 (en) | 2013-09-20 | 2017-07-12 | Open Text S.A. | Application Gateway Architecture with Multi-Level Security Policy and Rule Promulgations |
US9734046B2 (en) * | 2014-04-01 | 2017-08-15 | International Business Machines Corporation | Recording, replaying and modifying an unstructured information management architecture (UIMA) pipeline |
US20160092052A1 (en) * | 2014-09-30 | 2016-03-31 | Theater Ears, LLC | Syncronizing audio playback in coordination with external video playback with auto-dimming |
US10055209B2 (en) * | 2015-01-12 | 2018-08-21 | Red Hat, Inc. | Resource closing |
CN104966004B (zh) * | 2015-07-03 | 2018-01-23 | 绚视软件科技(上海)有限公司 | 一种视窗商店应用程序远端媒体来源的实现装置及方法 |
US10180825B2 (en) * | 2015-09-30 | 2019-01-15 | Apple Inc. | System and method for using ubershader variants without preprocessing macros |
US11593075B2 (en) | 2015-11-03 | 2023-02-28 | Open Text Sa Ulc | Streamlined fast and efficient application building and customization systems and methods |
US10044788B2 (en) * | 2015-11-17 | 2018-08-07 | Wyse Technology L.L.C. | Native client multimedia redirection |
RU2618946C1 (ru) * | 2015-12-18 | 2017-05-11 | Акционерное общество "Лаборатория Касперского" | Способ блокировки доступа к данным на мобильных устройствах с использованием API для пользователей с ограниченными возможностями |
US11388037B2 (en) | 2016-02-25 | 2022-07-12 | Open Text Sa Ulc | Systems and methods for providing managed services |
US10841380B1 (en) * | 2016-12-29 | 2020-11-17 | Wells Fargo Bank, N.A. | Techniques for self-compliance |
US20190373040A1 (en) * | 2018-05-30 | 2019-12-05 | Infiniscene, Inc. | Systems and methods game streaming |
US11256528B2 (en) * | 2018-10-26 | 2022-02-22 | Nvidia Corporation | Individual application window streaming suitable for remote desktop applications |
Family Cites Families (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6225993B1 (en) * | 1996-04-22 | 2001-05-01 | Sun Microsystems, Inc. | Video on demand applet method and apparatus for inclusion of motion video in multimedia documents |
US7505605B2 (en) * | 1996-04-25 | 2009-03-17 | Digimarc Corporation | Portable devices and methods employing digital watermarking |
US6216152B1 (en) | 1997-10-27 | 2001-04-10 | Sun Microsystems, Inc. | Method and apparatus for providing plug in media decoders |
US6701383B1 (en) * | 1999-06-22 | 2004-03-02 | Interactive Video Technologies, Inc. | Cross-platform framework-independent synchronization abstraction layer |
US20020083432A1 (en) * | 2000-08-22 | 2002-06-27 | Souissi Slim Salah | Over the air RF wireless data modem programming |
US7987510B2 (en) * | 2001-03-28 | 2011-07-26 | Rovi Solutions Corporation | Self-protecting digital content |
US7220910B2 (en) * | 2002-03-21 | 2007-05-22 | Microsoft Corporation | Methods and systems for per persona processing media content-associated metadata |
US20030195851A1 (en) * | 2002-04-11 | 2003-10-16 | Ong Lance D. | System for managing distribution of digital audio content |
JP2004246431A (ja) * | 2003-02-10 | 2004-09-02 | Trinity Security Systems Inc | コンテンツ保護システム、コンテンツ保護方法、その方法をコンピュータに実行させるプログラム |
US7251832B2 (en) * | 2003-03-13 | 2007-07-31 | Drm Technologies, Llc | Secure streaming container |
DE10338696A1 (de) * | 2003-08-22 | 2005-03-17 | Siemens Ag | Verfahren zur Erzeugung und Wiedergabe einer Mediendatei |
US7587712B2 (en) * | 2003-12-19 | 2009-09-08 | Marvell International Ltd. | End-to-end architecture for mobile client JIT processing on network infrastructure trusted servers |
JP2005332176A (ja) * | 2004-05-19 | 2005-12-02 | Sony Corp | コンテンツ取得方法 |
KR100608056B1 (ko) | 2004-06-05 | 2006-08-02 | 삼성전자주식회사 | 멀티미디어 컨텐츠 재생 장치, 재생 방법, 생성 장치,생성 방법, 및 그 멀티미디어 컨텐츠를 저장한 저장 매체 |
US7730482B2 (en) * | 2004-06-08 | 2010-06-01 | Covia Labs, Inc. | Method and system for customized programmatic dynamic creation of interoperability content |
GB2415065B (en) | 2004-06-09 | 2009-01-21 | Symbian Software Ltd | A computing device having a multiple process architecture for running plug-in code modules |
US7558463B2 (en) * | 2005-04-18 | 2009-07-07 | Microsoft Corporation | Retention of information about digital-media rights in transformed digital media content |
US7844442B2 (en) * | 2005-08-16 | 2010-11-30 | Exent Technologies, Ltd. | System and method for providing a remote user interface for an application executing on a computing device |
WO2007082167A2 (en) * | 2006-01-05 | 2007-07-19 | Eyespot Corporation | System and methods for storing, editing, and sharing digital video |
JP2007219685A (ja) * | 2006-02-15 | 2007-08-30 | Nagoya Institute Of Technology | コンテンツ配信装置、コンテンツ配信システム、コンテンツ配信方法およびコンテンツ配信プログラム |
US20070260615A1 (en) * | 2006-05-08 | 2007-11-08 | Eran Shen | Media with Pluggable Codec |
US9680686B2 (en) * | 2006-05-08 | 2017-06-13 | Sandisk Technologies Llc | Media with pluggable codec methods |
US20070268362A1 (en) * | 2006-05-22 | 2007-11-22 | Matthew James West | Compressed data |
US8127036B2 (en) * | 2006-06-30 | 2012-02-28 | Microsoft Corporation | Remote session media data flow and playback |
US20080005653A1 (en) * | 2006-06-30 | 2008-01-03 | Viswanathan Swaminathan | Method and apparatus for facilitating Java-based self-organizing media |
US8190441B2 (en) * | 2006-09-11 | 2012-05-29 | Apple Inc. | Playback of compressed media files without quantization gaps |
US20080134012A1 (en) | 2006-11-30 | 2008-06-05 | Sony Ericsson Mobile Communications Ab | Bundling of multimedia content and decoding means |
KR100911324B1 (ko) * | 2007-06-22 | 2009-08-07 | 삼성전자주식회사 | 가변성 요소 관리 방법 및 그 장치 |
KR101484680B1 (ko) * | 2007-10-04 | 2015-01-21 | 삼성전자 주식회사 | 컴포넌트 기반 소프트웨어 제품 관리 시스템 및 방법 |
US9043754B2 (en) * | 2010-12-28 | 2015-05-26 | Microsoft Corporation | Virtualizing embedded devices |
US20130205277A1 (en) * | 2012-02-07 | 2013-08-08 | Telerik, AD | Environment and method for cross-platform development of software applications |
-
2009
- 2009-03-16 US US12/405,208 patent/US8640097B2/en active Active
-
2010
- 2010-03-09 CN CN2010800127322A patent/CN102356380A/zh active Pending
- 2010-03-09 WO PCT/US2010/026702 patent/WO2010107622A2/en active Application Filing
- 2010-03-09 MX MX2011009166A patent/MX2011009166A/es active IP Right Grant
- 2010-03-09 JP JP2012500829A patent/JP5781497B2/ja active Active
- 2010-03-09 BR BRPI1012352-0A patent/BRPI1012352B1/pt active IP Right Grant
- 2010-03-09 EP EP10753883A patent/EP2409223A4/en not_active Ceased
Also Published As
Publication number | Publication date |
---|---|
EP2409223A4 (en) | 2012-08-22 |
US20100235820A1 (en) | 2010-09-16 |
JP5781497B2 (ja) | 2015-09-24 |
JP2012521157A (ja) | 2012-09-10 |
MX2011009166A (es) | 2011-09-15 |
CN102356380A (zh) | 2012-02-15 |
WO2010107622A3 (en) | 2011-01-06 |
BRPI1012352A2 (pt) | 2016-03-29 |
EP2409223A2 (en) | 2012-01-25 |
WO2010107622A2 (en) | 2010-09-23 |
US8640097B2 (en) | 2014-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
BRPI1012352B1 (pt) | método implementado por computador para manipular formatos de mídia extensíveis em uma plataforma de aplicação hospedada e sistema de computador para comunicação entre uma aplicação e uma plataforma de hospedagem | |
CN105933766B (zh) | 基于机顶盒的WebOS系统及机顶盒 | |
US10410673B2 (en) | Embeddable video capturing, processing and conversion application | |
US9930308B2 (en) | Platform-agnostic video player for mobile computing devices and desktop computers | |
US8516486B2 (en) | Loading applications in non-designated environments | |
JP2000022741A (ja) | 選択可能なデパッケタイザ構成 | |
US20100031233A1 (en) | Extended enterprise connector framework using direct web remoting (dwr) | |
US10244022B2 (en) | Media streams from containers processed by hosted code | |
EP2678776B1 (en) | Software application delivery and launching system | |
US11102332B2 (en) | Method and system for rendering content using templates | |
WO2010053956A2 (en) | Command buffers for web-based graphics rendering | |
KR102340358B1 (ko) | 그래픽 이미지 데이터를 캡쳐하기 위한 소프트웨어 개발 킷 | |
WO2013091556A1 (zh) | 一种基于浏览器的应用程序的扩展方法及装置 | |
CN114302176B (zh) | 视频播放方法及装置 | |
US11784887B1 (en) | Bandwidth throttling | |
CN112487322B (zh) | 一种第三方应用Loading页面的加载方法及显示设备 | |
US8788615B1 (en) | Systems and methods for creating and using electronic content that requires a shared library | |
Tsai et al. | The Implementation of Multimedia Decoder Framework for Android on PAC Duo Plateform | |
Mattsson et al. | Cross-Platform Video Management Solutions | |
Olsson et al. | Cross-Platform Video Management Solutions | |
Pawate | Developing embedded software using DaVinci & OMAP technology | |
Jackson et al. | Digital Video: Streaming Video, MediaPlayer, and MediaController Classes | |
Wang | Compare multimedia frameworks in mobile platforms | |
King | Media Playback | |
Labrecque | What's New in Flash Player 11 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
B25A | Requested transfer of rights approved |
Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC (US) |
|
B06F | Objections, documents and/or translations needed after an examination request according [chapter 6.6 patent gazette] | ||
B06U | Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette] | ||
B09A | Decision: intention to grant [chapter 9.1 patent gazette] | ||
B16A | Patent or certificate of addition of invention granted [chapter 16.1 patent gazette] |
Free format text: PRAZO DE VALIDADE: 10 (DEZ) ANOS CONTADOS A PARTIR DE 20/10/2020, OBSERVADAS AS CONDICOES LEGAIS. |