MPEG 2 descodificação
Pergunta
Eu quero entender como vídeo e obras de decodificação de áudio, especialmente a sincronização de tempo (como conseguir 30fps de vídeo, como casal que com áudio, etc.). Eu não quero saber todos os detalhes, apenas a essência dele. Eu quero ser capaz de escrever uma simplificação alto nível de um decodificador de vídeo / áudio real.
Você poderia fornecer ponteiros para mim? Um real C / código-fonte C ++ de um decodificador de vídeo MPEG2 / áudio seria o caminho mais rápido para entender essas coisas que eu penso.
Solução
Você pode navegar código-fonte do ffmpeg (disponível através de SVN), ou a sua documentação da API .
Outras dicas
código fonte de leitura de um codec que as obras parece ser o caminho certo a seguir. Eu sugiro o seguinte:
http://www.mpeg.org/MPEG/ video / free-mssg-mpeg-software.html
Tendo em conta que é mencionada no site da mpeg.org, eu diria que você vai encontrar o que você precisa aqui.
No passado, eu tive algum tempo para trabalhar em decodificação de vídeos MPEG (sem embora áudio), e os princípios são muito simples. Existem algumas imagens puras incluídos, algumas imagens intermediários que são descritos relativamente aos mais próximos os principais, eo resto são descritos utilizando as principais imagens mais próximas / intermediários.
Um espaço de tempo, uma imagem. Mas codecs recentes são muito mais complicadas, eu acho!
EDIT: sincronização
Não sou especialista na sincronização de áudio e vídeo, mas a questão parece ser tratada com o uso de uma camada de sincronização (veja há para definição).
Para a sincronização de áudio / vídeo, basicamente, cada vídeo e quadro de áudio deve ser carimbada em tempo. A data e hora é normalmente conhecido como (carimbo Tempo de Apresentação) PTS. Uma vez que um vídeo / áudio é decodificador pelo descodificador, o processador de áudio / vídeo deve agendar o quadro a ser exibido no momento certo para que o áudio / vídeo está sincronizado.
Eu acho que você pode se no capítulo " sincronismo Modelo " de MPEG2 Tutorial para mais detalhes.
Dependendo de quanto você sabe sobre o formato MPEG-2, você pode querer obter uma visão ampla, lendo um artigo sobre ele em primeiro lugar. Quero dizer algo como estes:
@ Patric e Nils
Então você diz que existem marcas de tempo, hein ... Estes são para a parte de vídeo só eu acho. Para áudio Eu acho que há informações suficientes no cabeçalho (como "amostras por segundo"). Quantas vezes são necessários esses carimbos de tempo? Imagino que o entrelaçamento de pacotes de áudio e vídeo garante que os dados de vídeo é sempre à frente de dados de áudio ou algo assim?
EDIT: Encontrado o que eu precisava: http://www.dranger.com/ffmpeg/tutorial01.html
Helltone,
Timestamps para dados de áudio ainda são necessários porque o quadro de áudio e vídeo podem não estar alinhados no mesmo lugar. Por exemplo:
V: 1000 1040 1080 1120 ... A: 990 1013 1036 (perdido) 1082
Você pode precisar para compensar a diferença entre o primeiro vídeo frame / áudio. Além disso, se é possível que haja perda de pacotes (durante streaming de vídeo), você precisa das marcas de tempo de ambos vídeo / áudio para manter a sincronização precisa.