Posts de ‘Bruno F. M. Souza’

[Bruno F. M. Souza] Assistindo vídeos MKV (Matroska) com legenda no Playstation 3 (PS3)

Thursday, October 29th, 2009

Ninguém duvida que o PS3 é um Media Center com muito potencial. Mas, como a maioria dos devices disponíveis no mercado para este propósito, ele também tem suas limitações…

As coisas que sinto mais falta no meu são a impossibilidade deste decodificar vídeos H.264 720p/1080p e identificar legendas externas no disco local.

Dando uma fuçada, conheci um utilitário chamado PS3 Media Server que resolveu meus problemas. Trata-se de um servidor Upnp (DLNA - Digital Living Network Alliance) capaz de transcodificar qualquer arquivo de mídia suportado pelo Mencoder/FFmpeg e fazer o streaming do conteúdo pela rede para o PS3.

DLNA - PS3

DLNA - PS3

Instalei-o no meu Mac OS, fiz o setup mais básico (compartilhando meus diretórios de áudio, vídeo e fotos) e pronto. O PS3 imediatamente reconheceu o Media Server na rede e pude conferir todos meus arquivos de mídia sendo consumidos nele com pouquíssimo trabalho.

PS3 Media Server

PS3 Media Server

Outras opções de servidores DLNA bastante usadas são o TVersity e o MediaLink, entre outros. Porém, a maioria corresponde a soluções pagas que ou não suportam a inserção de legenda nos vídeos, ou não são compatíveis com o Mac OSX. :(

OBS: Antes que perguntem, não tentem implantar isso com uma rede wireless, pois os vídeos engasgam constantemente (inclusive SD).

[Bruno F. M. Souza] Assistindo vídeos MKV (Matroska) com legenda no Playstation 3 (PS3)

Thursday, October 29th, 2009

Ninguém duvida que o PS3 é um Media Center com muito potencial. Mas, como a maioria dos devices disponíveis no mercado para este propósito, ele também tem suas limitações…

As coisas que sinto mais falta no meu são a impossibilidade deste decodificar vídeos H.264 720p/1080p e identificar legendas externas no disco local.

Dando uma fuçada, conheci um utilitário chamado PS3 Media Server que resolveu meus problemas. Trata-se de um servidor Upnp (DLNA - Digital Living Network Alliance) capaz de transcodificar qualquer arquivo de mídia suportado pelo Mencoder/FFmpeg e fazer o streaming do conteúdo pela rede para o PS3.

DLNA - PS3

DLNA - PS3

Instalei-o no meu Mac OS, fiz o setup mais básico (compartilhando meus diretórios de áudio, vídeo e fotos) e pronto. O PS3 imediatamente reconheceu o Media Server na rede e pude conferir todos meus arquivos de mídia sendo consumidos nele com pouquíssimo trabalho.

PS3 Media Server

PS3 Media Server

Outras opções de servidores DLNA bastante usadas são o TVersity e o MediaLink, entre outros. Porém, a maioria corresponde a soluções pagas que ou não suportam a inserção de legenda nos vídeos, ou não são compatíveis com o Mac OSX. :(

OBS: Antes que perguntem, não tentem implantar isso com uma rede wireless, pois os vídeos engasgam constantemente (inclusive SD).

[Bruno F. M. Souza] Inserindo legendas em vídeos com o mencoder

Friday, September 25th, 2009

Outro dia estávamos discutindo sobre a melhor forma de re-codificar um arquivo de vídeo original com sua respectiva legenda renderizada sobre o stream de vídeo… Pensei logo no mencoder!!!

Isso é necessário quando não temos um player com a funcionalidade de carregar um arquivo de legenda para tocar junto com o vídeo (overlay do texto da legenda + sincronização). Um exemplo é o player do PS3 (*).

Enfim, trata-se de algo que considero bastante útil e que resolvi compartilhar por aqui…

Setup Inicial

Especifique a fonte a ser utilizada:

$ cp /Library/Fonts/Arial.ttf ~/.mplayer/subfont.ttf

Escolha a formatação desejada para a fonte:

$ vim .mplayer/config

# Write your default config options here!

ffactor="10" #black outline
sub-bg-alpha="0" #background color ala closed captions
sub-bg-color="0" #black to white
subfont-text-scale="3.7" #truetype font scaling
subfont-blur="1" #Slight blur

Codificação do vídeo

A opção utilzada para referenciar os arquivos de legenda é o -sub <legenda.srt>. Para a renderização da legenda no arquivo de vídeo original, precisaremos re-codificar o stream de vídeo do arquivo. De preferência, com os mesmos parâmetros de codificação do original:

$ mplayer -vo null -frames 0 video.avi

Playing video.avi.
AVI file format detected.
[aviheader] Video stream found, -vid 0
[aviheader] Audio stream found, -aid 1
VIDEO: [DX50] 640×272 24bpp 25.000 fps 561.6 kbps (68.6 kbyte/s)
========================================================
Opening video decoder: [ffmpeg] FFmpeg’s libavcodec codec family
Selected video codec: [ffodivx] vfm: ffmpeg (FFmpeg MPEG-4)
========================================================
========================================================
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
AUDIO: 48000 Hz, 2 ch, s16le, 80.0 kbit/5.21% (ratio: 10000->192000)
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)
========================================================

De posse dos parâmetros de codificação do stream de vídeo do arquivo original, podemos seguir com re-codificação do vídeo incluindo a legenda:

$ mencoder -vf scale=640x272 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=600 -sub "legenda.srt" -o video_com_legenda.avi video.avi

Daí, é aguardar a re-codificação do vídeo e testar ao final:

$ mplayer video_com_legenda.avi

Simples, não?!

(*) neste caso em específico temos a possibilidade de utilizar media servers DLNA que também fazem o streaming com as legendas, mas isso é assunto para outro post… ;)

[Bruno F. M. Souza] Inserindo legendas em vídeos com o mencoder

Friday, September 25th, 2009

Outro dia estávamos discutindo sobre a melhor forma de re-codificar um arquivo de vídeo original com sua respectiva legenda renderizada sobre o stream de vídeo… Pensei logo no mencoder!!!

Isso é necessário quando não temos um player com a funcionalidade de carregar um arquivo de legenda para tocar junto com o vídeo (overlay do texto da legenda + sincronização). Um exemplo é o player do PS3 (*).

Enfim, trata-se de algo que considero bastante útil e que resolvi compartilhar por aqui…

Setup Inicial

Especifique a fonte a ser utilizada:

$ cp /Library/Fonts/Arial.ttf ~/.mplayer/subfont.ttf

Escolha a formatação desejada para a fonte:

$ vim .mplayer/config

# Write your default config options here!

ffactor="10" #black outline
sub-bg-alpha="0" #background color ala closed captions
sub-bg-color="0" #black to white
subfont-text-scale="3.7" #truetype font scaling
subfont-blur="1" #Slight blur

Codificação do vídeo

A opção utilzada para referenciar os arquivos de legenda é o -sub <legenda.srt>. Para a renderização da legenda no arquivo de vídeo original, precisaremos re-codificar o stream de vídeo do arquivo. De preferência, com os mesmos parâmetros de codificação do original:

$ mplayer -vo null -frames 0 video.avi

Playing video.avi.
AVI file format detected.
[aviheader] Video stream found, -vid 0
[aviheader] Audio stream found, -aid 1
VIDEO: [DX50] 640×272 24bpp 25.000 fps 561.6 kbps (68.6 kbyte/s)
========================================================
Opening video decoder: [ffmpeg] FFmpeg’s libavcodec codec family
Selected video codec: [ffodivx] vfm: ffmpeg (FFmpeg MPEG-4)
========================================================
========================================================
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
AUDIO: 48000 Hz, 2 ch, s16le, 80.0 kbit/5.21% (ratio: 10000->192000)
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)
========================================================

De posse dos parâmetros de codificação do stream de vídeo do arquivo original, podemos seguir com re-codificação do vídeo incluindo a legenda:

$ mencoder -vf scale=640x272 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=600 -sub "legenda.srt" -o video_com_legenda.avi video.avi

Daí, é aguardar a re-codificação do vídeo e testar ao final:

$ mplayer video_com_legenda.avi

Simples, não?!

(*) neste caso em específico temos a possibilidade de utilizar media servers DLNA que também fazem o streaming com as legendas, mas isso é assunto para outro post… ;)

[Bruno F. M. Souza] Flash na TV

Sunday, 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:

[Bruno F. M. Souza] Flash na TV

Sunday, 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:

[Bruno F. M. Souza] Quickpwn + yellowsn0w = Desbloqueio por software do iPhone 3G

Tuesday, 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!

[Bruno F. M. Souza] Quickpwn + yellowsn0w = Desbloqueio por software do iPhone 3G

Tuesday, 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!

[Bruno F. M. Souza] Distribuição de vídeos em Flash com P2P

Monday, 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…

[Bruno F. M. Souza] Distribuição de vídeos em Flash com P2P

Monday, 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…