Onde as informações de sincronização são armazenadas em formatos de contêiner?

4

Vários fluxos de áudio, fluxos de vídeo e legendas são armazenados em um contêiner. Estes são reproduzidos juntos.

Onde as informações de sincronização são armazenadas no formato de contêiner? Em meta-dados ou em outro lugar?

    
por DEopen 15.11.2011 / 16:29

1 resposta

2

Depende do próprio container. Contêineres diferentes manipulam a sincronização de maneira diferente. A diferença está na maneira como os dados são armazenados.

Por exemplo, o contêiner pode optar por armazenar apenas partes que devem ser apresentadas ao mesmo tempo juntas ou inserir pontos de sincronização de vez em quando, ou até mesmo fornecer a cada registro de dados um registro de data e hora.

Alguns contêineres podem ser baseados em tempo, enquanto outros são apenas um fluxo de dados. Naturalmente, o último tem vantagens de desempenho, mas a sincronização pode ser desativada, e a busca não é possível sem um índice específico (como em AVI).

Por exemplo, o fluxo de transporte MPEG-2 , um formato de contêiner muito antigo, usa fluxos elementares empacotados para armazenar os dados. Por exemplo, você terá um fluxo em pacote para vídeo e outro para áudio. Para sincronizá-los, existe o campo Referência do relógio do programa:

To enable a decoder to present synchronized content, such as audio tracks matching the associated video, at least once each 100 ms a Program Clock Reference, or PCR is transmitted in the adaptation field of an MPEG-2 transport stream packet. The PID with the PCR for an MPEG-2 program is identified by the pcr_pid value in the associated Program Map Table. The value of the PCR, when properly used, is employed to generate a system_timing_clock in the decoder. The STC decoder, when properly implemented, provides a highly accurate time base that is used to synchronize audio and video elementary streams.

O popular MP4 contêiner é baseado no Formato de arquivo do QuickTime e, portanto, compartilha um base de recursos. Sua especificação pode ser encontrada aqui . A sincronização não faz parte dos metadados, é parte dos dados propriamente ditos. Eu não olhei para os detalhes embora.

Ao usar o RTP Hint Tracks , um arquivo MP4 pode ser preparado para streaming, indicando quais pacotes estão correlacionados a qual timestamp na mídia. Assim, por exemplo, uma pista de dicas dirá: Este pacote é composto de este dados de vídeo e esses dados de áudio. Esses são ignorados para reprodução local.

Os contêineres

AVI são baseados em RIFF . Eles armazenam os quadros de dados individuais em "pedaços". Como os dados em si podem ser divididos em quadros individuais (por exemplo, quadros de vídeo, quadros de áudio), isso funciona mesmo com conteúdo de taxa de bits variável, já que o comprimento do quadro será sempre o mesmo. Este documento contém uma explicação detalhada do formato AVI. O aspecto importante da sincronização é que o AVI é multiplexado corretamente.

A O contêiner Matroska é semelhante ao MP4 e outros. É inteiramente baseado em timecode, como você pode ver em este diagrama . Os dados em si (por exemplo, vídeo, áudio) são divididos em Clusters e depois em Blocos. O timecode é mais ou menos tratado como um timestamp de apresentação.

One thing that I do want to mention however, to avoid confusion, is the Timecode. The quick eye will notice that there is one Timecode shown per Cluster, and then another within the Block structure itself. The way that this works is the Timecode in the Cluster is relative to the whole file. It is usually the Timecode that the first Block in the Cluster needs to be played at. The Timecode in the Block itself is relative to the Timecode in the Cluster. For example, lets say that the Timecode in the Cluster is set to 10 seconds, and you have a Block in that Cluster that is supposed to be played 12 seconds into the clip. This means that the Timecode in the Block would be set to 2 seconds

O contêiner Ogg , que não é popular, faz o seguinte :

Grouping defines how to interleave several logical bitstreams page-wise in the same physical bitstream. Grouping is for example needed for interleaving a video stream with several synchronised audio tracks using different codecs in different logical bitstreams.

No entanto, o Ogg não sabe nada sobre o codec e um conceito de "tempo":

Ogg does not have a concept of 'time': it only knows about sequentially increasing, unitless position markers. An application can only get temporal information through higher layers which have access to the codec APIs to assign and convert granule positions or time.

    
por 15.11.2011 / 16:59