Sto riproducendo un file audio utilizzando il BasicPlayer(basato su Javasound). Il file è in una condivisione Samba e sto usando Jcifs per accedervi. Mi dà un InputStream
.Modo efficiente per cercare uno streaming audio su rete con InputStream
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(...);
SmbFile f = new SmbFile(...);
SmbFileInputStream audioIn = new SmbFileInputStream(f);
int bufSize = 8096;//should I use f.length() here?
audioBIS = new BufferedInputStream(audioIn, bufSize);
audioBIS.mark(f.length());
//call BasicPlayer
play(audioBIS);
ho bisogno di essere in grado di posizionare il puntatore ovunque nel file, proprio come qualsiasi giocatore comune. L'unica soluzione che potevo pensare era usare uno BufferedInputStream
e una combinazione di mark/reset/skip ogni volta che ho bisogno di riposizionare il puntatore. Non appena apro il file e ottengo il flusso, chiamo il metodo mark()
, in modo che un successivo reset()
mi riposizionerà all'inizio. Quindi con skip()
posso andare dove voglio.
audioBIS.reset();
audioBIS.skip(newBytePosition);
Il mio problema è che la chiamata salto() funziona solo se lo desideri se a specificare un buffer abbastanza grande da contenere l'intero file.
Esiste un modo più efficiente per farlo?
La tua soluzione sembra molto interessante, ma non ho abbastanza spazio sul lato server per installare tomcat. Ad ogni modo, potrei pensare a un wrapper di BasicPlayer che fa più o meno la stessa cosa, avendo cura delle funzioni seek e getTime. Solo una domanda. Come si genera un Inputstream in base a un determinato offset? La risposta fornita [qui] (http://stackoverflow.com/questions/5923817/how-to-clone-an-inputstream) è stimolante e implica anche il caching, ma sono preoccupato per l'overhead che vorrei introdurre facendo copie di enormi matrici. – Giuseppe
Quando si dice InputStream basato su un dato offset, si sta ancora parlando di jCifs (SmbFile) e offset in byte? – sbrattla
Mi riferivo alla parte in cui dici "La macchina client prenderà la risposta come InputStream".Non intendi dire che il server risponde con un inputstream che inizia nella posizione desiderata? – Giuseppe