Como o Video4Linux e o ALSA funcionam com Codecs

2

Meu entendimento é que um codec é tanto um decodificador quanto uma especificação para decodificação. Então, alguns grupos gravam um codec que explica como decodificar de seu formato de volta para o bitstream bruto, e eles deixam a implementação codificação para qualquer um que queira escrever um codificador compatível . Assim, por exemplo, h.264 é um famoso codec de vídeo (decodificador) e x264 é um conhecido codificador FOSS para h.264. Mas existem muitos outros codificadores h.264.

Meu entendimento é que o VideoForLinux (V4L2) é um conjunto de bibliotecas de kernel e de espaço do usuário para trabalhar com streaming de vídeo em máquinas Linux.

Meu entendimento é que o ALSA é um conjunto de bibliotecas de kernel e de espaço do usuário para trabalhar com streaming de áudio em máquinas Linux.

Se algo que afirmei acima estiver incorreto, por favor, comece corrigindo / esclarecendo-me!

Supondo que eu esteja mais ou menos correto, não vejo qual papel (se houver) da V4L2 e da ALSA ao tentar codificar, compactar e transmitir fluxos de bits de áudio e vídeo em uma máquina Linux.

Se eu pudesse usar x264 para codificar meu fluxo de vídeo, faac para codificar meu fluxo de áudio e ffmpeg para compactar, transmitir e transmitir os dois fluxos dentro, digamos, de um contêiner MPEG-TS, onde V4L2 e ALSA entra em jogo?

E se a resposta for "eles não", alguém poderia dar um exemplo ou dois para quando o V4L2 / ALSA seria usado para que eu possa colocá-los no contexto e entender o uso casos em que são necessários? Agradecemos antecipadamente.

    
por pnongrata 10.12.2012 / 19:50

2 respostas

1
  1. Apenas um detalhe detalhado, a maioria dos codecs começa como especificações que definem o formato e a metodologia pela qual a codificação e a decodificação ocorrem, incluindo as especificações da API, se aplicável. A partir daí, implementações do codificador e do decodificador podem ser criadas. Nem todas as implementações são criadas iguais. Por exemplo, o decodificador CoreAVC H.264 é multithread, enquanto muitas outras implementações não são.

  2. O V4L2 é usado principalmente para criar / capturar vídeo em sistemas Linux, então ele possui um codificador embutido (ou mais provavelmente ele faz referência a um externo). É amplamente usado para webcams e placas de captura de vídeo / TV. Veja mais na Wikipedia . Os aplicativos que criam fluxos brutos usam o V4L2 para codificar o vídeo ao seu gosto. A decodificação é feita por um pacote diferente (talvez libavcodec).

  3. ALSA contém codecs, mas é a pilha de suporte para todas as operações de áudio no Linux, então onde quer que você ouvir som, ALSA é o que está fazendo isso acontecer. Tenho certeza de que o ALSA tem componentes para entrada de áudio (mic / line-in), por isso deve ser capaz de alguma forma de codificação, mas eu não trabalhei com isso.

No seu exemplo, eu não acredito que o V4L2 estaria envolvido, já que você está usando um codificador H.264, que provavelmente fornece melhor qualidade e desempenho do que o V4L2. O ALSA será usado para reproduzir seu vídeo, mas não será usado na codificação.

Quando você toca qualquer som, isso é o ALSA no trabalho. Quando você usa sua webcam, isso é L4V2 no trabalho.

    
por 10.12.2012 / 20:05
0

Quanto ao ffmpeg, o ALSA e o V4L2 são chamados de dispositivos de entrada, não de codecs (não que o termo codec seja sempre preciso - geralmente chamo algo como um codificador e / ou decodificador para ser mais específico). Outros dispositivos de entrada incluem JACK, pulso, x11grab, iec61883, dv1394, etc. A partir da documentação do FFmpeg :

Input devices are configured elements in FFmpeg which allow to access the data coming from a multimedia device attached to your system.

Por exemplo, você pode usar ALSA para capturar áudio de um microfone que está conectado à sua placa de áudio. Você pode usar o V4L2 para capturar vídeos de uma webcam. Comando de exemplo básico, não testado:

ffmpeg -f video4linux2 -i /dev/video0 -f alsa -i hw:0 output.mkv

Você menciona:

h.264 is a famous video codec (decoder)

O H.264 é um padrão, não um codec. O FFmpeg possui um decodificador chamado h264 . Pode ser confuso. Consulte O que é um codec (por exemplo, DivX?) E como ele difere de um formato de arquivo (por exemplo, MPG)?

    
por 11.12.2012 / 19:32