Neste tópico, um desenvolvedor do VLC diz que o VLC não pode reproduzir arquivos mp4 parcialmente baixados porque as informações são armazenadas no final do arquivo. Mas recentemente, quando testei o mesmo, adicionando uma tarefa mp4 no Chrome e passando o .crdownload parcial para o VLC, funcionou. O VLC reproduziu o mp4 sem falhas. Não deixei o download terminar e parei o player no meio para economizar banda, mas acredito que ele teria tocado toda a mídia enquanto o Chrome ainda estava baixando. Também consegui buscar através do vídeo, o que alguns formatos de vídeo inacabados não permitem. O que fazer com isso? Estou fazendo um streamer de mídia como um projeto de estimação e realmente quero saber se posso iniciar o download e passar a mídia para vlc via linha de comando após o download de certa quantidade de bytes.
Os arquivos MP4 podem ter o bloco de metadados no início ou no final. Geralmente, está no final de arquivos recém-codificados porque o codificador pode não saber quais valores escrever até terminar de codificar todo o vídeo (especialmente as partes necessárias para a busca).
Mas ao preparar arquivos MP4 para streaming online, é comum mover os metadados para o início, por exemplo, conforme descrito nesta postagem do blog . (Em outras palavras, você não é o primeiro a querer fazer isso – é um negócio cotidiano para navegadores da web.)
Observação: embora a postagem mostre uma recodificação completa sendo feita, não tenho certeza se isso é realmente necessário - deve ser suficiente apenas fazer o remux
-codec copy -movflags faststart
e evitar a perda de qualidade.Existem ferramentas que você pode usar para ver a estrutura real de um determinado arquivo MP4, por exemplo:
Aqui
mdat
contém os dados reais de áudio/vídeo (apenas um único fluxo de áudio neste caso) emoov
contém os metadados (por exemplomoov.udta.meta.ilst.©nam
, é o título da faixa).