Especificação



Baixar 2,81 Mb.
Página5/24
Encontro01.07.2018
Tamanho2,81 Mb.
1   2   3   4   5   6   7   8   9   ...   24

Capítulo 3: Codificação de Vídeo em Java


No presente momento serão explicados os aspectos relevantes a cerca das tecnologias para o qual o código de referência foi portado. Ou seja, a plataforma para a qual o codificador proposto pelo trabalho foi desenvolvido. Não entrarei no mérito pelo qual essas tecnologias foram escolhidas, apenas ressalto os detalhes mais importantes.

Este capítulo está subdividido em duas seções: a primeira que trata sobre a plataforma Java, descrevendo as características mais relevantes ao desenvolvimento do trabalho; e uma segunda que aborda a Framework para a qual o codificador foi desenvolvido.


    1. 3.1 Plataforma Java


A plataforma para o qual o código foi portado é a Java Standard Edition 1.5.0, incluindo todos os recursos incorporados à linguagem até essa versão. É importante ressaltar que a implementação não foi desenvolvida para ser compatível com versões anteriores, apenas posteriores, desde de que sejam compatíveis com a dada versão na qual o trabalho foi desenvolvido.




      1. 3.1.1 Manipulação de dados


Diferente da linguagem C, na qual o código de referência [2] foi escrito, a linguagem Java fornece suporte de mais alto nível para a manipulação dos bytes do arquivo. Nesta seção serão descritas quais classes da plataforma Java foram utilizadas para substituir as funções desempenhadas por algumas estruturas implementadas no código de referência.



  • OutputStream: o código de referência utiliza uma estrutura chamada Bitstream para escrever um fluxo de bytes [2]. Todavia, a plataforma Java oferece uma classe abstrata padrão para fluxos de dados, a OutputStream. Foi criada para este trabalho uma classe que unia todas as funcionalidades daquela presente no código de referência com a padronização da classe presente na plataforma Java. Essa classe foi chamada de BitOutputStream.



    1. 3.2 Java Media Framework (JMF)


A Java Media Framework (JMF) é uma API destinada a incorporar dados multimídia, tal como áudio e vídeo, em aplicações Java e Applets. Ela foi especialmente desenvolvida para tirar proveito das características da plataforma Java.

A versão utilizada neste trabalho foi a 2.1.1e, por ser a última disponível na data de início do desenvolvimento.

      1. 3.2.1 Histórico


A JMF 1.0, conhecida como Java Media Player API, permitia aos programadores Java desenvolverem programas para reproduzir mídias de tempo real. A JMF 2.0 estendeu a 1.0 para fornecer suporte para captura e armazenamento de dados multimídia, controlando o tipo de processamento que era realizado durante a reprodução, e realizando processamento personalizado nos fluxos de dados multimídia. Além disso, a JMF 2.0 define uma API de plug-in, que permite desenvolvedores avançados e provedores de tecnologia uma personalização mais fácil para estender a funcionalidade da JMF [17].




      1. 3.2.2 Componentes


Para adicionar novas funcionalidades à JMF é necessário estendê-la, implementando novos componentes, essa arquitetura de plug-ins é uma das principais vantagens pela qual a JMF foi escolhida.

Antes de adicionar novos componentes, se deve primeiro analisar todo fluxo de dados multimídia, partindo de sua captura ou leitura, interpretação, processamento e, por fim, sua apresentação ou gravação. Tendo em mente cada um desses aspectos, é preciso verificar quais das funcionalidades estão disponíveis na JMF, para utilizá-las, ou então implementar novos componentes que forneçam as funcionalidades indisponíveis na JMF original.

Os principais componentes presentes na JMF e que devem ser estendidos para permitir recursos adicionais, são os seguintes:



  • DataSource: representa um protocolo, tal como FILE, FTP e HTTP. Seria necessário implementar para suportar novos protocolos onde os dados podem trafegar. Todavia, como neste trabalho a leitura e gravação é feita por meio de arquivos locais, é utilizado o DataSource para o protocolo FILE, que já está disponível na JMF;

  • Demultiplexer: representa um demultiplexador, necessário para suportar novos tipos de arquivos. No caso deste trabalho, foi necessário implementar um novo Demultiplexer para manusear os arquivos do tipo YUV. A classe YUVParser contém um objeto membro do tipo VideoTrack que representa a única trilha presente em um arquivo YUV, a trilha de vídeo. Em arquivos multimídia, cada tipo de dado presente, áudio, vídeo ou legenda, representa uma trilha distinta;

  • Multiplexer: esses são os objetos que pegam todas as trilhas processadas e as colocam em um mesmo arquivo. Neste trabalho foi implementado um multiplexador para permitir colocar a trilha de vídeo no arquivo;

  • DataSink: serve para escrever dados em um local, seja a rede ou um arquivo. Um DataSink lê dados de um DataSource e os grava em algum destino – outro destino sem ser o dispositivo de apresentação;

  • Processor: define um módulo de processamento sobre dado multimídia. Um objeto que implementa essa interface permite que seja definida uma cadeia de componentes que vão processar o dado. Neste caso, os componentes são um demultiplexador, um codificador ou decodificador, e um multiplexador. A figura 3.1 apresenta a estrutura de um objeto Processor;

Figura 3.1 – estrutura de um Processador com os estágios de processamento.


A figura 3.1 mostra a relação entre os principais componentes da JMF que são usados para codificar dados multimídia. O DataSource da esquerda, e os objetos associados a ele, lidam com a leitura da mídia de origem. Enquanto o DataSource da direita trata do esquema de gravação da mídia processada. Os objetos dentro do quadrado tracejado realizam tarefas pré determinadas dentro do processamento do objeto Processor.

O Demultiplexer separa a mídia em objetos trilhas (Track), cada uma destas representando um tipo de dado multimídia (vídeo, áudio, legenda, etc.).

A codificação (ou decodificação) de cada uma dessas trilhas é feita individualmente por um determinado Codec, esse modelo de arquitetura permite que os mesmos CODEC sejam usados por tipos diferentes de arquivos. Por exemplo, tanto os arquivos AVI quanto MPEG podem conter áudio em formato MP3, então, após o Demultiplexer específico de cada um desses arquivos separar a trilha de áudio MP3 da trilha de vídeo, é utilizado o mesmo Codec para decodificar o MP3 de ambos os tipos de arquivos.

Há ainda a possibilidade de aplicar efeitos especiais (como por exemplo, eco) em cada trilha por meio de objetos Effect.

No estágio final, é possível reproduzir cada uma das trilhas por meio de um objeto Renderer, de acordo com o tipo de mídia que elas contém, assim, reproduzindo vídeo em um monitor e áudio em caixas de som, por exemplo. Ainda é possível mesclar as trilhas por meio de um objeto Multiplexer e salvá-las em um novo arquivo, que pode conter as trilhas decodificadas ou codificadas.



1   2   3   4   5   6   7   8   9   ...   24


©livred.info 2017
enviar mensagem

    Página principal