Como buscar áudio com o MediaSource e continuar jogando?
No momento, estou tentando implementar um reprodutor de áudio para meu aplicativo da web Angular seguindo um tutorial no Google Developers e também alguma ajuda que encontrei em " Não é possível buscar vídeo ao reproduzir no MediaSource ".
A grande diferença no meu caso é que eu quero transmitir o tamanho do áudio de forma que o usuário não precise baixar o arquivo inteiro para ouvi-lo imediatamente.
Ouvir uma faixa do início ao início já está funcionando, pois estou apenas baixando blocos de bytes do servidor e simplesmente anexando cada bloco ao SourceBufferconforme eles chegam.
No entanto, não consigo implementar a funcionalidade de "busca".
Não entendo muito bem como lidar com isso no cliente. No momento, trabalho apenas com arquivos mp3. Não consigo encontrar nenhum exemplo onde seekingseja explicado.
Eu sei que a configuração currentTimede um audioelemento irá disparar um seekingevento de acordo com o documento Media Events . Nós temos:
this.audioObj = document.createElement('audio');
e um setter:
public seekTo(seconds) {
this.logger.debug(`seekTo ${seconds.toFixed(2)} seconds`);
// Setting currentTime will cause a "seeking" event to be emitted.
this.audioObj.currentTime = seconds;
}
Eu acho que eu tenho que carregar novos dados antes de eu set currentTimee anexá-lo ao sourceBuffer. No entanto, isso simplesmente não pode funcionar por razões óbvias.
Como posso fazer isso funcionar?
Respostas
Se você definiu a duração, deverá ser capaz de definir a hora atual, mas não haverá nada para reproduzir. Você pode usar o currentTime para informar ao seu coletor de pedaços qual parte do arquivo você precisa e anexá-la para que o elemento de mídia possa continuar a reproduzir.
Observe que ao usar mp3, o SourceBuffer estará operando no sequencemodo, pois não há carimbos de data / hora, o que significa que se você apenas anexar bytes cegamente, eles não estarão no momento correto - acredito que você precisa definir timestampOffseto tempo relevante para o quadro em questão (eu não tentei fazer isso sozinho).