2010-05-09 6 views
22

Speriamo che qualcuno possa aiutarmi con questo.Ricerca tramite file MP3 in streaming con HTML5 <audio> tag

Sto giocando con un server node.js che trasmette l'audio ad un client e voglio creare un player HTML5. In questo momento sto trasmettendo il codice dal nodo usando la codifica Chunked, e se vai direttamente all'URL, funziona alla grande.

Quello che mi piacerebbe fare è incorporare questa utilizzando il tag HTML5 <audio>, in questo modo:

<audio src="http://server/stream?file=123"> 

dove /stream è il punto finale per il server del nodo per lo streaming MP3. Il player HTML5 si carica bene in Safari e Chrome, ma non mi consente di cercare, e Safari dice anche che è un "Live Broadcast". Nelle intestazioni di /stream, includo la dimensione del file e il tipo di file e la risposta viene terminata correttamente.

Qualche idea su come potrei aggirare questo? Certamente potrei semplicemente mandare tutto il file in una volta, ma poi il lettore aspetterà che tutto venga scaricato - preferisco farlo in streaming.

+0

anche io voglio fare questo, ma tutto quello che ho scoperto è che questo è supportato solo da formati ogg e m4a. Quindi non sono sicuro che sia possibile. Ma sto ancora guardando. –

risposta

2

dai uno sguardo qui http://www.scottandrew.com/pub/html5audioplayer/, ho usato questo e viene riprodotto mentre sta scaricando il file. Aspetta un po 'per il buffer, ma poi suona. Non ho mai provato a cercare, ma inizierei cercando di impostare "aud.currentTime" nel suo codice se ciò fosse possibile.

Buona fortuna

1

Si sta inviando una Accept-Ranges (intestazione RFC 2616, Section 14.5) risposta?

+1

Forse non ero troppo chiaro nella mia domanda iniziale: voglio solo cercare all'interno della parte buffer del video, quindi le richieste di intervallo di byte non dovrebbero essere necessarie al momento. –

-1

Da quello che ho capito si desidera che il lettore per consentire all'utente di saltare a parti del audio/video che porto' Ho ancora il buffering, qualcosa di simile a ciò che fanno i giocatori di Vimeo/YouTube. Tbh Non sono sicuro che sia possibile, visto che ho visto alcuni esempi di elementi mediali html5 e loro non mi hanno permesso di cercare parti non bufferizzate :(

Se si desidera cercare attraverso la parte bufferizzata, non è un problema. creando un problema per te stesso qui, per quanto ho capito. Vuoi trasmettere il file in streaming e ciò che fa è far pensare al giocatore che tu abbia qualche tipo di live streaming là fuori. Se hai appena inviato il file direttamente, non avresti questo problema, perché il lettore sarà in grado di iniziare a giocare prima di caricare l'intero file. Funziona bene sia con elementi audio che video, e ho confermato questo comportamento sia in Chrome che in FF :)

Spero che questo aiuti!

+0

Non riesco a caricare un file direttamente su un lettore client a causa delle politiche locali. Quando riavvio la riproduzione o cerco l'inizio, non viene fatta nessuna nuova richiesta, essa viene riprodotta da ciò che è bufferizzato. Non posso cercare altrove. – Qwerty

-1

forse questo html5 audio player example spiegherà e ci mostrerà il nuovo elemento ei suoi metodi .load, .play, .currentTime, ecc.

Io uso una matrice di elementi e posso naturalmente impostare la posizione corrente. possiamo usare anche eventhandlers (ad esempio 'loadeddata') per aspettare prima di consentire di cercare.

ping e divertirsi con HTML5 :)

5

Assicurarsi che il server accetta le richieste di intervallo, è possibile controllare per vedere se è Accept-Ranges nell'intestazione. In jPlayer questo è un problema comune nei browser Webkit (in particolare Chrome) quando si tratta di progressi e ricerca di funzionalità.

Potrebbe non essere possibile utilizzare jPlayer, ma le informazioni sulla risposta al server sul sito Web ufficiale potrebbero essere utili.

http://www.jplayer.org/latest/developer-guide/#jPlayer-server-response

+0

Grazie per aver segnalato jplayer - non posso credere di non averne sentito parlare prima del – acatalept

+0

Eccellente! Ha funzionato come un fascino. Cercavo non funzionasse su Chrome, ma stava lavorando su Firefox e Safari. Aggiunto Accept-Ranges nell'header e seek ha iniziato a funzionare. –

-2

ma ho avuto lo stesso problema. È necessario impostare alcune intestazioni per la risposta del file multimediale.

come ad esempio:

Accept-Ranges:bytes 
Content-Length:7437847 
Content-Range:bytes 0-7437846/7437847 

tag Poi l'audio sarà in grado di ricerca di