quinta-feira, 2 de fevereiro de 2012

Multimídia no Fedora

Não faz muito o Fedora Rawhide (que originará o Fedora 17) passou por uma recompilação completa de todos os pacotes com o GCC 4.7.0. É um processo que acontece de quando em quando para sanear pacotes antigos que foram ficando para trás e para aproveitar novas otimizações do GCC.

A situação do repositório RPM Fusion era similar até o Fedora 16. Ainda existiam pacotes compilados no Fedora 10 lá. Eles funcionam nas versões mais novas, pois a glibc possui uma compatibilidade retrógrada razoável.

Boa notícia é que o repositório "Rawhide" do RPM Fusion, que será F17 depois do branch, também passou por uma (parcial) recompilação em massa. Os pacotes velhos ganharam roupa nova, ou melhor, instruções novas :-). Além disso, o gstreamer-ffmpeg foi atualizado para a versão 0.10.13, que habilita decodificação multithreaded por padrão. Espero que até a versão final o FFmpeg seja atualizado para a série 0.9 ou 0.10 (no momento o pacote lá é da série 0.8) e que venha com a captura via PulseAudio habilitada.

Quem usa Linux há mais tempo deve lembrar que era complicado fazer os programas multimídia tocarem arquivos de áudio e vídeo na antiguidade. Hoje a situação está bem melhor, graças a projetos como o FFmpeg.

Num Linux atual o GStreamer é o framework usado por aplicações como Totem, Rhythmbox e Banshee. O GStreamer é expansível através de plugins, que são complementos que adicionam suporte a novos formatos e codecs. Qualquer plugin adicionado ao GStreamer fica disponível para todas as aplicações que usam-o. O Fedora distribui o conjunto de plugins base, good e parcialmente o bad, chamado de bad-free. Parcialmente porque não linka a libfaac, libfaad, libxvid, mjpegtools, libmms, que não fazem parte do repositório da distribuição.

Esse trio fornece suporte para Vorbis, Theora, FLAC, WavPack, Speex, VP8, e formatos relacionados (Ogg, Matroska, etc.), mas codecs populares da família MPEG, entre outros, ficam de fora. Certamente isso causa muito aborrecimento do tipo "mas que droga de Linux, nem para tocar MP3 presta". Antes de continuar, é necessário diferenciar codec proprietario de fechado.

Todos (ou quase todos) os codecs da família MPEG têm suas tecnologias cobertas por patentes (o H.264 tem centenas delas), porém suas especificações são abertas -- inclusive estão disponíveis ao público. Não é necessário trabalho de engenharia reversa. Você lê a especificação e pode fazer o melhor encoder/decoder do mundo. Quem distribuir, entretanto, binários sem se acertar com o consórcio MPEG-LA (o grupo que administra os interesses dos detentores das patentes) está numa posição vulnerável juridicamente. O mesmo acontece com qualquer outro código, livre ou não, que implemente uma especificação coberta por patentes. O famoso MP3, um codec ancião, lá do início dos anos 90, ainda é coberto por patentes administradas pela Technicolor SA.

A política do Fedora veda por completo a distribuição deste tipo de software, mesmo que o código seja livre. É cláusula pétrea e não existe exceção. Aí entra o RPM Fusion, que é uma junção dos antigos Dribble, Freshrpms e Livna. No RPM Fusion todos os pacotes rejeitados no repositório oficial do Fedora por problemas de licenciamento/patentes vivem. Nele estão os pacotes que resolvem os problemas de "naum tOCaH UxXx mEUxXx VIDeuxXx!!!!!" (cortesia do MiGuXeiToR).

Os pacotes básicos são: gstreamer-plugins-bad, gstreamer-plugins-ugly e gstreamer-ffmpeg

O gstreamer-plugins-bad complementa o pacote oficial bad-free. Ele contém os decoders AAC (através da libfaad) e DTS (libdca), que são suportados também na libavcodec via gstreamer-ffmpeg. É possível ter plugins diferentes oferecendo suporte ao mesmo tipo de codec. Internamente o GStreamer usa um ranking de prioridades, que seus programadores definem. No caso acima, quando os dois pacotes estiverem instalados, o plugin bad tem prioridade na decodificação dos dois codecs. Outro exemplo: gstreamer-plugins-ugly e gstreamer-ffmpeg possuem ambos suporte para decodificarem MP3 e AC-3. No pacote ugly o trabalho é feito pela libmad (MP3) e liba52 (AC-3), enquanto no pacote ffmpeg é através da libavcodec. Com os dois instalados, o pacote ugly tem preferência. Porém o ranking não é sempre fixo. Ele pode mudar daqui algumas versões dependendo da quantidade de recursos e maturidade de cada código.

Voltando, os três pacotes adicionam ao GStreamer suporte a MPEG-2, MPEG-4 (ASP/AVC), MP3, AAC, AC-3, DTS, WMV, WMA.

Versões recentes -- ou melhor, não tão velhas -- do FFmpeg (na verdade suas bibliotecas) e do gstreamer-ffmpeg tocam bem os formatos e codecs da Microsoft. Aquela gambiarra infame do pacote w32codecs eu não recomendo a ninguém, pois é desnecessária e problemática. Código nativo em C existe no FFmpeg, que está constantemente recebendo otimizações e melhoramentos.

Então, com estes três pacotes, o Fedora passa a tocar nos aplicativos baseados em GStreamer praticamente todos os formatos e codecs populares. Outro aplicativo interessante é o VLC, que também está no RPM Fusion. O VLC não usa nenhum framework. Ele tem implementações próprias para demuxação/decodificação/conversão e linka diretamente, entre outras, as bilbiotecas do FFmpeg. Para o Fedora 17, estará disponível a versão 1.2.0 (agora renomeada para 2.0.0) do VLC, que esta no geral bem melhor que a versão 1.1.x. Entre as várias mudanças, destaco a melhora na qualidade das legendas e o suporte para decodificação multithreaded via libavcodec.

Para finalizar a pilha (stack) multimídia, falta uma coisa apenas: a libdvdcss para ser possível tocar DVDs criptografados (todos os títulos comerciais). O time que adminstra o RPM Fusion decidiu não hospedar o pacote lá com medo da legislação dos EUA. Para este pacote precisaremos de outro repositório, o ATrpms. Felizmente a libdvdcss é um pacote estático, que não depende de nenhum outro. É possível instalar sem nem adicionar o repositório em si, que é a minha recomendação para não acabar em conflito de pacotes com o mesmo nome entre os dois repostórios.

Primeiro instale a chave GPG do ATrpms para o YUM não reclamar:

# rpm --import http://packages.atrpms.net/RPM-GPG-KEY.atrpms

Depois instale diretamente o pacote libdvdcss2 com o YUM sem adicionar o repositório.

# yum -y localinstall <endereço>

Substitua <endereço> pela URL do pacote de acordo com a versão e arquitetura da sua instalação do Fedora.

Post relacionado:
Guia rápido de pós-instalação do Fedora 16

Nenhum comentário:

Postar um comentário