Flash na TV

May 10th, 2009

Adobe

No dia 20 de abril, na NAB em Las Vegas, a Adobe anunciou uma versão otimizada de sua plataforma Flash para o mundo além PC: TV`s com acesso a internet, set-top boxes, players Blu-ray, entre outros.

A idéia é que se tenha uma versão mais leve do ambiente de execução de aplicações desenvolvidas em Flash para estes dispositivos, possibilitando o delivery de vídeos HD no formato flash video (H.264, FLV, etc) com toda interatividade provida pela plataforma.

Seguindo a linha do Open Screen Project, os usuários terão a possibilidade de acessar seu vídeos prediletos na web (baseados na tecnologia Flash), aplicações, serviços e qualquer outro conteúdo web, independente do dispositivo de visualização.

Pude conferir a Super Session com a demonstração da plataforma funcionando na TV e resolvi compartilhá-la aqui:

Quickpwn + yellowsn0w = Desbloqueio por software do iPhone 3G

January 6th, 2009

Apenas fazendo um follow-up das novidades de hacking do iPhone e sem querer ser mais uma tradução dos diversos tutoriais disponibilizados na web sobre o feito do iPhone Dev Team, aviso que o Guilherme Chapiewski disponibilizou em seu blog um ótimo passo a passo para o desbloqueio por software do iPhone 3G, sem a necessidade de Proxy SIM’s - muito útil para os que adquiriram o aparelho fora do Brasil e não conseguem desbloqueio pela operadora.

Basicamente o processo consiste nos seguintes passos:

Vale a pena conferir!

Distribuição de vídeos em Flash com P2P

December 1st, 2008

A Octoshape lançou seu plugin (Octoshape Grid Delivery Enhancement for Adobe Flash Player) para players de vídeo em Flash visando a distribuição de vídeos ao vivo codificados em VP6 (On2) utilizando uma arquitetura peer-to-peer.

O case que tive contato é a CNN Live. Mas vi que outros big players também estão adotando a solução. Exemplos são a transmissão ao vivo da NBA e dos jogos olímpicos de Pequim.

Como?

O funcionamento é, mais ou menos, assim: após a instalação, o player faz o GET da playlist (ASX) que possui como primeira entrada a URL para consumo do vídeo através do plugin da Octoshape. Caso o usuário não tenha o mesmo instalado, ele será direcionado para os demais streams unicast que são distribuídos por suas CDN`s via rtmp.

<asx>
    <!-- file written from rtm2 template on cdn8mon1 -->
    <entry>
        <ref href="octoshape://octodir.hwcdn.net/hwo.u4j9w4s3.cnn_stream1_high"
            clients="0" highwater="250000" lowwater="200000"/>
        <!--
        Below here are the regular cdns, randomly sorted by weight
        -->
        <ref href="rtmp://cp44679.live.edgefcs.net/live/cnn_stream1_low@2785"
            weight="100"/>
        <ref href="rtmp://cnntriallivefs.fplive.net/cnntriallive-live/cnntrialstream1"
            weight=""/>
        <ref href="rtmp://cnn.fc.llnwd.net/cnn/cnn_stream1_low" weight=""/>
    </entry>
</asx>

Ao fazer o GET para o plugin da Octoshape, conforme indicado na playlist acima, a requisição é redirecionada para um GET local na porta 5861/TCP, que é a porta que o plugin realiza a comunicação para o delivery do vídeo para o Flash Player, como se este último estivesse realizando um download progressivo de um vídeo com tamanho “infinito”:

(Request-Line)	GET /pm/1/1228133155182/hwou4j9w4s3cnnstream1high HTTP/1.1
Host	        localhost:5861

(Status-Line)	HTTP/1.0 200 OK
Content-Length	2147483647
Content-Type	video/x-flv

Apesar do baixíssimo consumo de memória e CPU, a qualidade do vídeo final (lembrando que trata-se de um vídeo ao vivo) é muito boa. Fontes ocultas disseram que estão codificando a uma taxa de 600kbps com VP6:

VIDEO:  [VP6F]  576x324  0bpp  15.000 fps    0.0 kbps ( 0.0 kbyte/s)
=======================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffvp6f] vfm: ffmpeg (FFmpeg VP6 Flash decoder)
=======================================================================
=======================================================================
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
mpg123: Can't rewind stream by 584 bits!
AUDIO: 44100 Hz, 2 ch, s16le, 48.0 kbit/3.40% (ratio: 6000->176400)
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)

E não é só a qualidade da imagem - na verdade, a Octoshape não possui nenhuma interferência nas etapas de processamento de imagens, visto que o foco deles é o delivery do stream. E aí sim vale ressaltar a boa capacidade de adaptação às condições da rede, evitando situações de re-buffering e fazendo um bom uso das bandas de download e upload.

Instalação

Para a instalação, vi que, ao entrar no site para visualizar o stream de vídeo ao video, o player faz a validação da versão do Flash Player. Através do Express Install, ele sugere a atualização para a versão 10.

...
    useExpressInstall:function(_d){
        this.xiSWFPath=!_d?"expressinstall.swf":_d;
        this.setAttribute("useExpressInstall",true);
    }
...

Depois, verifica se o mesmo é compativel com a extensão da Octoshape:

LivePlayer.prototype.isOctoCapable = function(){
    var os = navigator.userAgent.toLowerCase();
    return !(os.indexOf("mac") > -1 && os.indexOf("10.3") > -1);
}

E sugere a instalação da mesma.

Aceita-se os termos de uso e, pronto.

Então…

Minha única dúvida ficou por conta da necessidade de instalação do Flash Player 10 para poder utilizar o plugin. Provavelmente, o mesmo deve ter algum tipo de integração com o Flash Media Server 3.5. Um dos pontos seria o chaveamento automático do stream de acordo com a disponibilizade de banda do usuário (Dynamic Streaming) - procurando sempre a melhor relação qualidade de imagem/consumo de banda.

Enfim, uma ótima alternativa para baratear os custos de servir vídeo de qualidade na internet…

Áudio e vídeo no chat do Gmail

November 12th, 2008

Essa semana o pessoal do Gmail introduziu a opção de chat com áudio e vídeo em seu serviço de e-mail, conforme anunciado aqui.

Como assim?

Como pode ser visto aqui, o serviço é baseado em padrões de internet, como o XMPP (comunicação), RTP (transporte em tempo real) e utiliza uma extensão do codec H.264/MPEG-4 AVC para codificação do vídeo, o SVC, provavelmente integrando a solução da Vidyo.

E o delivery do vídeo?

De início, imaginei em algo como o plugin realizando algum tipo de publicação dos streams via RTP/UDP num servidor de mídias (Flash Media Server, Red5, Wowza…) no Google, que por sua vez, faria o transporte dos streams para o cliente Flash Player na máquina do outro usuário, no caso do FMS via RTMP.

Ou, que o plugin ficasse esperando por requisições na máquina local (como num servidor HTTP) e enviasse o live stream mascarado em download progressivo.

Com relação ao mini vídeo que exibe a imagem da câmera local, a estória deveria ser a mesma: o plugin pegando os frames da câmera, criando o stream RTP/UDP e consumindo internamente este stream para exibição.

Pesquisando mais um pouco, vi que a 2a opção fazia mais sentindo. Isso porque a solução utiliza a implementação do Jingle contida na libjingle - desenvolvida pelo Google com foco em aplicações multimídia para múltiplos usuários - que gerencia desde as conexões de rede até a negociação das sessões (incluindo código relacionado à utilização de codecs e ao transporte dos streams) e a troca de dados:

“Jingle is an extension to the Jabber/XMPP protocol, to allow for peer-to-peer (p2p) signalling for multimedia interactions such as voice or video. It was designed by Google and the XMPP Standards Foundation. The multimedia content itself can be delivered using the Real-time Transport Protocol, with Interactive Connectivity Establishment (ICE) for NAT traversal.”

Dessa forma, como em qualquer aplicação peer-to-peer, a comunicação entre os usuários acontece diretamente entre suas máquinas através do referido plugin com a utilização desta lib, dispensando a necessidade de servidores controlando a mesma.

E o que mais?

O plugin ignora o fato de você permitir ou não o acesso à câmera, mas tudo bem.

O ponto fraco é o fato de o plugin ainda não estar disponível para Linux…

Placas entre o vídeo SDI e a web

October 3rd, 2008

Um dos principais focos de meu trabalho tem sido a pesquisa de soluções em hardware que visam otimizar ao máximo o custo dos projetos que serão desenvolvidos, garantindo sempre um patamar mínimo (que já é alto) de qualidade. Um tempo atrás, quando entramos no mundo da produção de conteúdo 100% digital, isto é, sem conversões A/D ou D/A em nenhuma parte do fluxo (evitando adição de ruído no sinal), precisei procurar placas de captura e outros acessórios que me garantissem uma boa qualidade para os vídeos que seriam editados e publicados na internet.

A fonte de vídeo era SD-SDI (Standard Definition Serial Digital Interface - 270 Mb/s, 4:2:2, 720×480, 60i) com o áudio embutido (48kHz 16bit stereo). Seu principal inconveniente, levando-se em consideração que o destino final é a internet, é o fato de ser um vídeo entrelaçado (principalmente para streaming ao vivo). Isso demanda um processamento adicional durante o processo de captura: o chamado deinterlacing. Este, podendo ser feito de duas formas: em hardware pela placa de captura, ou via software durante os processos de codificação (encoding).

O processo de deinterlacing por software (mencoder, ffmpeg, transcode, filtros DirectShow, etc.) costuma ocasionar um alto consumo de CPU (dependendo da resolução do vídeo e do algoritmo escolhido). No meu caso, essa solução inviabilizaria a captura de mais de um sinal na mesma máquina, o que aumentaria consideravelmente os custos de um projeto com muitas fontes de sinal. Então, partimos para uma solução em hardware.

A placa cujo perfil mais se adequou acabou sendo a Osprey 530 (PCI-X), da Viewcast. Além de suas técnicas de deinterlacing bastante eficazes, ela possui outros recursos com processamento em hardware: resize, crop, inserção de marca d’água (watermark), correção de cor (color correction)… O ponto fraco ficou por conta da inexistência de drivers estáveis para Linux, sem falar no preço!

Na última NAB pude conferir também placas de captura SDI de outros fabricantes (Dektec, Blackmagic, DVEO, Matrox, etc.). Acho que vale destacar a ótima relação custo-benefício obtida com a Decklink, da Blackmagic Design. É uma boa opção para quem deseja fazer ingest sem codificação (não possui muito poder de processamento) e como solução de playout, além de dispensar o uso de scan converters digitais. Além disso, sua versão HD (High Definition) se mostrou uma ótima opção de captura para sinais 16:9 progressivos (720p e 1080p).

Concluindo, a escolha de uma placa de captura depende, além da especificação do sinal que se deseja capturar, dos tipos de processamento que se deseja fazer em cima deste sinal. Às vezes, torna-se mais vantajoso realizar as modificações utilizando o poder de processamento dos servidores que recebem o sinal com placas de baixo custo, outras não, como no caso dos muitos efeitos fornecidos pelas Matrox DSX que seriam bastante onerosos numa arquitetura deste tipo.

Enfim, iPhone em terras tupiniquins…

September 25th, 2008

Nesta sexta-feira - 26 de setembro de 2008 - temos no Brasil o lançamento do iPhone 3G oferencendo o que há de mais moderno no que diz respeito à telefonia celular em território nacional. Inicialmente, só a Vivo e a Claro venderão o telefone no país. Oi e TIM ainda pendem de acordos com a Apple.

Com o aparelho vêm junto novos planos de dados, cada vez mais interessantes:

  • A Claro anunciou planos com valores variando de R$92,90 no plano de 200 minutos (com 100MB de dados) a R$ 176,65 no plano de 400 minutos (com 200MB de dados);
  • Na Vivo o custo dos aparelhos varia de R$ 899 (8GB) ou R$1199 (16GB) no plano Vivo Completo (1400 minutos, mais pacote de dados e roaming à R$ 585 mensais) a R$ 1899 (8GB) ou R$2199 (16GB) no plano pré-pago.

Diversas empresas se prepararam para este lançamento, dentre elas: Itaú, Banco do Brasil, Bradesco, Terra, Ágora Corretora, etc.

A Globo.com, em mais um belo trabalho de nossa equipe, pôs no ar seu portal de vídeos mobile com todo o conteúdo áudio visual das Organizações Globo disponível com diversas otimizações para os usuários do aparelho: compressão H.264, com direito aos efeitos de transição e de rotação do aparelho.

Foi um projeto com um show de competência da galera e muita dedicação no desenvolvimento do novo site e na ampliação da nossa infra de codificação, publicação, armazenamento e delivery. O resultado, inovação com uma qualidade incomparável! Ressaltando que foi um dos primeiros projetos desde que foi adotado o Scrum como processo de desenvolvimento para os nossos produtos.

Vale lembrar também os diversos vídeos de altíssima qualidade embutidos nas principais editorias do portal que lançaram suas versões mobile: G1, Globoesporte.com, EGO, entre outros.

Bom, agora sim temos um celular multimídia decente! Indo mais além, acho que dá até para falar que entramos de vez na 3a geração de nossa telefonia celular.

Comparando players de vídeos grátis e embutíveis

August 27th, 2008

Semana retrasada recebi um trabalho que consistia em ripar uns DVD`s, comprimir da forma mais eficiente possível levando em consideração um tamanho limite para o arquivo final , e posterior upload para algum site. No entanto, fiquei sem saber qual, dentre as diversas opções de free video hosting sites, seria o serviço com a melhor qualidade de vídeo e resolvi então analisar tecnicamente algumas das opções mais conhecidas:

player codec video bitrate
video (~kbps)
res frame
rate (fps)
codec audio bitrate
audio (~kbps)
size limit (MB) water
mark
api embed
Youtube h264 420 480×360 29.97 mpeg4-aac 112 500 S S S
Dailymotion vp6 700 640×480 29.97 mp3 96 150 N N S
Google sorenson 250 320×240 29.97 mp3 64 N N S
Revver vp6 400 480×360 29.97 mp3 64 100 N S S
Metacafe vp6 330 320×240 25 mp3 64 100 N N S
Vimeo vp6 460 504×380 29.97 mp3 112 500 N S S
Blip.tv vp6 500 15 mp3 80 1024 N S S
viddler vp6 410 29.97 mp3 64 500 S S S
Brightcove vp6 450 480×360 29.97 mp3 48 - N S S

Como pode ser visto, a presença ou não de marcas d`água, também foi um fator analisado, visto que ela degrada a aparência do vídeo, apesar de fortalecer o branding. Além da existência de API`s e da possibilidade de distribuir o conteúdo por outros sites (código embed).

Para esta análise, cadastrei o mesmo vídeo em todos esses sites, e acho que valem pequenos comentários em cima de alguns:

  • Tanto numa análise subjetiva, quanto numa objetiva, posso dizer que o Vimeo é o quem fornece o vídeo de maior qualidade. Com uma compressão bastante eficiente e um player leve, acabou sendo minha opção final. Seu ponto negativo ficou por conta da limitação semanal de 500MB para upload dos vídeos;
  • A aparência dos vídeos no Revver também é muito boa. Mas a limitação de 100MB por arquivo indicava a necessidade de taxas de compressão muito elevadas - os vídeos tinham mais de 1 hora, em média - o que acabaria prejudicando bastante o resultado final;
  • O Blip.tv torna-se uma excelente opção para vídeos com pouco movimento (ex. entrevistas). Isso porque seu baixo frame rate (15 fps) permite uma melhor alocação da banda disponível em cima de um número menor de quadros. No entanto, degrada bastante vídeos com muito movimento, apesar do elevado bitrate;
  • Google Video e Metacafe estão visivelmente mais focados na capacidade de escalar do que na qualidade do vídeo oferecido;
  • O Youtube com H.264 também seria uma boa opção, não fosse a presença da indesejável marca d`água, assim como o Viddler (embedded).

Por fim, mais parâmetros (mercadológicos) de análise em cima destes players e outros podem ser vistos aqui.

Compilando o MPlayer no Mac OS X (Leopard) com suporte a H.264 e AAC

August 27th, 2008

Depois de muito tempo perdido tentando resolver dependências impossíveis para compilar o mplayer/mencoder no Mac OS 10.5, descobri o MacPorts (desculpe a ignorância, tenho apenas 1 semana de mac) que, em conjunto com o time de desenvolvimento do MPlayer, tornou minha tarefa bem mais fácil…

Resolvi então escrever este howto para que outros também possam economizar na vaselina.

Preparando o ambiente

  1. Para compilar qualquer coisa no OS X, é necessário ter instalado o Xcode (Developer Tools). Trata-se de um conjunto de ferramentas para desenvolvimeno de software no Mac OS X. O mesmo pode ser obtido aqui;
  2. As dependências do MPlayer são facilmente resolvidas através do MacPorts. Derivado do sistema ports do freebsd, ele baixa o código fonte, aplica os patches, compila e instala automaticamente os pacotes requisitados. Para instalá-lo, basta seguir os passos descritos aqui.
  3. Ao final, vale chamar o seguinte comando para sincronizar a instalação:
sudo port -v selfupdate

Instalando dependências

  1. Inicialmente, resolvemos dependências básicas relacionadas ao encontro de determinadas bibliotecas, possibilidade de fontes para legendas, bibliotecas de compressão, etc:
  2. sudo port install subversion pkgconfig freetype fontconfig libiconv \
    ncurses zlib lzo2
  3. Então, instalamos os codecs que o mplayer e o mencoder devem suportar:
  4. sudo port install xvid x264 lame libtheora libmad faac twolame libdts \
    libdv jpeg libpng libungif

Compilando

  1. Primeiro, baixamos o source para o diretório atual:
  2. svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
  3. Em seguida, configuramos os parâmetros de compilação:
  4. cd mplayer
    export PKG_CONFIG_PATH="/opt/local/lib/pkgconfig"
    ./configure --with-extraincdir=/opt/local/include \
    --with-extralibdir=/opt/local/lib --prefix=/opt/mplayer

    Basicamente, estamos direcionando os executáveis gerados para “/opt/mplayer”, além de passar uma referência ao encontro de bibliotecas de codecs que venham ser utilizados (Win32, RealPlayer, etc). Vale lembrar que é justamente aqui que ganhamos flexibilidade ao habilitar apenas as features realmente necessárias e/ou as que visam otimizar a nossa aplicação.

  5. Então, compilamos o fonte baixado (isso leva um bom tempo), e instalamos:
make && make install

Ajustes finais

  1. Por fim, editamos a variável bash do PATH no .profile e o recarrecamos. Isso, para que o terminal possa encontrar os executáveis gerados:
  2. echo "export PATH=\"$PATH:/opt/mplayer/bin\"" >> ~/.profile
    source ~/.profile

Pronto!

HDTV é o que há

June 24th, 2008

Finalmente entramos na era da TV Digital aqui na Globo.com… Não! Não estamos transmitindo nenhum canal de TV Digital, e também não temos um decodificador recebendo o sinal digital do broadcast… É que essa semana foi instalado em nosso laboratório o Net DIGITAL HD MAX. Sua principal função é prover imagens com uma maior definição - HDTV, além de servir como um gravador digital integrado - DVR (mediante o pagamento de uma taxa “simbólica”). Dentre suas principais características técnicas, temos:

  • Resolução: 480i, 480p, 720p, 1080i;
  • Compressão: H.264;
  • Saídas de vídeo: Composto, S-Vídeo, Componente e HDMI;
  • Saídas de áudio: HDMI, S/PDIF e Stereo RCA;
  • Interfaces RJ-45 (Ethernet) e USB - desabilitadas, obviamente;
  • 2 tuners DVB.

Os canais produzidos em HDTV dão um show, mas ainda deixam algo a desejar para olhos mais clínicos - percebem-se artefatos de borda facilmente, em função dos parâmetros de compressão utilizados. Com 2 tuners, é possível assistir ao conteúdo ao vivo de um canal, ou até mesmo gravado, enquanto se grava o ao vivo de outro canal. A decepção ficou por conta da ausência do padrão Full HD (resolução 1080p).

São boas as perspectivas para os padrões de captura atuais, visto que, além de não precisarmos mais gastar rios de dinheiro com placas de capturas capazes de fazer o deinterlace - temos a opção de receber sinais SD progressivos - também poderemos receber vídeos 100% digitais pela interface HDMI - sem ruídos e sem necessidades de conversão A/D - com placas de “baixo” custo como a Intensity Pro da BlackMagic Design. Isso, se conseguirmos algum workaround para o HDCP

Além disso, começa a ficar mais fácil pensar em oferecer conteúdo “HD - widescreen - 16:9″ com fontes originalmente em alta resoução.

Novo iPhone 3G na pista…

June 9th, 2008

Como muitos já devem saber, Steve Jobs, CEO e co-fundador da Apple, anunciou hoje o novo iPhone no keynote de abertura da WWDC (Worldwide Developers Conference). Todos aqui na Globo.com ficaram muito eufóricos e puderam acompanhar “ao NEXTEL” e “ao Twitter” de nosso “enviado especial” Guilherme Chapiewski.

Dentre as principais novidades do meu futuro novo gadget, temos:

  • Compatibilidade com a rede de telefonia 3G (UMTS/HSPDA), possibilitando um tráfego de dados em taxas mais altas que o EDGE;
  • Suporte ao sistema de localização GPS;
  • Firmware 2.0;
  • Maior durabilidade da bateria;
  • Entrada para fones de ouvido convencionais;
  • Capa externa nas cores preta e branca (apenas o de 16GB);
  • Design mais compacto;
  • Ferramenta para remoção do SIM Card;
  • Preço de lançamento: $199 (8GB) e $299 (16GB);
  • Disponibilidade nos EUA e mais 21 países no dia 11 de julho;
  • Disponibilidade no Brasil pela Claro, sem data definida, e mais outros 69 países.

Isso, sem falar na possibilidade de se fazer download de aplicações “legítimas de terceiros” pelo novo App Store e do serviço MobileMe (me.com), um conjunto de aplicações web (Ajax) que permite sincronização online de contatos, calendário, e-mail, fotos, etc. nas plataformas Mac e PC. Este último a um custo anual de $99 com 20GB de storage disponíveis.

Reitero as palavras do chefe do chefe do chefe referentes ao magnífico acontecimento: “… marketing é isso, você amplia as funcionalidades de um produto, reduz o preço, e a galera, ao invés de ficar puta, só pensa em comprar o novo…”.

Enfim, informações mais detalhadas podem ser encontradas nos links abaixo:

A propósito: aceito ofertas para compra de meu futuro ex-iPhone 2.5G… ;)