Vi um comportamento um pouco estranho enquanto brincava com alguns arquivos MP3 no Windows 7 (32 bits) que comprei recentemente na Amazon. Eles são armazenados em um compartilhamento de rede (Samba) e, em essência, parecia haver um atraso significativo ao iniciar a reprodução deles. Eu tinha assumido, desde que eu estava usando meu próprio software aqui, que era mais do que provável algo que eu estava fazendo; no entanto, o atraso está surgindo na fopen
chamada real (estendendo isso ainda mais, isso também acontece com o diálogo GetOpenFileName, há uma pausa perceptível após o arquivo ser selecionado, antes que o diálogo seja fechado e o controle seja retornado ao código). Este último comportamento sugere o compilador / toolchain é irrelevante aqui desde que esta é uma chamada nativa do Win32 sendo feita.
Um rastreio rápido do Wireshark mostra que a chamada aberta (ou GetOpenFileName) está acionando a leitura do arquivo inteiro. O problema também aparece se o arquivo está localizado em outra caixa do Windows (por isso não é uma peculiaridade do Samba aqui). Parece estar relacionado aos metadados anexados ao arquivo; se eu despir, o arquivo abre quase instantaneamente. De interesse é que em um arquivo que não apresenta esse problema, o Wireshark mostra que, mesmo assim, o Windows lerá ~ 64K na frente do arquivo e, em seguida, ~ 32K no final. Considerando que você pode ter tags ID3 no início e no final do arquivo, parece que o Windows está pré-lendo a tag para seus próprios fins e, por algum motivo, as tags nesses arquivos particulares estão fazendo com que ele verifique todo o arquivo.
Meu googling até agora me levou a olhar para os manipuladores de propriedade, e especificamente este link tinha muita informação útil sobre o assunto. Um pequeno problema - eu não tenho nenhum manipulador de propriedade definido para .mp3, ou qualquer outro conteúdo de áudio, portanto, estou com uma pequena perda para explicar esse comportamento.
Eu tinha um pensamento que possivelmente essa era uma tag ID3v4, já que me lembro de que isso poderia (em teoria) estar espalhado por todo o arquivo, o que explicaria o raciocínio de por que o Windows leria o arquivo inteiro. Não é, é ID2v3.