Pergunta

Estou tentando colocar o arquivo de mídia, com a duração DirectShow.Eu uso o seguinte código (C#):

var seekingParser = filter as IMediaSeeking;
if (seekingParser != null)
{
   long duration;
   if (seekingParser.SetTimeFormat(TimeFormat.MediaTime) == 0
       && seekingParser.GetDuration(out duration) == 0)
       track.Duration = duration / 10000000f;
}

para obter o arquivo de mídia de duração, em segundos.No entanto, quando tento abrir 3 a 4 minutos de arquivos de MP3, controlar.Duração torna-se de 11 a 12 minutos.Eu tentei em vários arquivos e o efeito é sempre o mesmo.O que pode ser a razão?

Foi útil?

Solução

Você normalmente usa IMediaPosition interface (em vez de IMediaSeeking) a partir do lado da aplicação.A duração é sempre relatado em segundos.No entanto, isso é pouco provável que faça uma diferença, e o que se pode fazer é ler duração de tags ID3 em vez disso, usando o Windows Media API, ID3 Tag Suporte.

Há mais confiável maneiras de obter a duração exata do arquivo de mídia com o DirectShow API?

O Windows Media Player reproduz ficheiros MP3 através do Media foundation, uma Fundação não-DirectShow API, para que você não tenha a opção de esperar ou fazer exatamente o mesmo do DirectShow.

Outras dicas

A partir de a documentação:

Dependendo do formato de origem, a duração pode não ser exata.Por exemplo, se a fonte contém um variable bit-rate (VBR) stream, o método pode retornar um valor estimado de duração.

Você está usando uma taxa de bits variável de fluxo, por acaso?

Você pode tentar o mesmo em uma instalação limpa do windows.É possível você ter um codec(pack) instalados, o que está errado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top