comprensione dello streaming video su un servlet o server web

1

Questa domanda è stata posta diverse volte su StackOverflow e vorrei avere una comprensione dei concetti e dei processi piuttosto che risolvere direttamente un problema. Ho trovato il seguente post in cui la spiegazione era ben dettagliata ma ho alcune domande di follow-up che spero che qualcuno possa approfondire.

streaming video

Il seguente estratto è ciò a cui sto riferendo le mie domande:

This is however a lot of additional code in your servlet which requires a well understanding of the HTTP Range specification. Usually the servletcontainer's (Tomcat, JBoss AS, Glassfish, etc) own default servlet already supports this out the box. So if there's a way to publish the media folder into the web by standard means, so that you don't need to homegrow a servlet for this, then I'd go on this route.

Qui l'autore spiega che molti servlet container (servlet / server web presumo) gestiscono la specifica della richiesta di intervallo restituendo la richiesta di intervallo specifico di una risposta del flusso video. Il software a cui sto lavorando fornisce un flusso di file video statici a un servlet che riproduce il video in una finestra pop-up di Chrome. Sto leggendo il video in un inputstream e lo porto come risposta alla richiesta e aggiungo le intestazioni rilevanti come ( Content-Range , Content-Length , ecc.) Che è tutto fatto sul server web o sul server dei dati. La risposta viene restituita a un servlet. Ora non sono ancora sicuro di averlo capito correttamente o di aver spiegato la configurazione precedente che ha senso, ma funziona proprio ora che posso vedere il video riprodotto, sono in grado di cercare avanti e indietro e posso vedere il debugger del browser in cui le richieste vengono ripristinate per il successivo intervallo di byte.

Sono corretto allora che il servlet fa funzionare tutto l'intervallo di byte e non devo riscrivere esplicitamente il codice per inviare solo determinati intervalli di byte nella risposta? Lo chiedo nella speranza di una risposta seria, perché il mio supervisore insiste che ho bisogno di inviare gli intervalli di byte specifici. La mia tesi era che se questo funziona bene in Firefox, perché dovrei dover riscrivere completamente il codice per renderlo in Chrome. Fallisce solo in Chrome con grandi dimensioni di video dove, dopo aver riprodotto la maggior parte del video, fornisce un EofException che la mia comprensione è correlata alle impostazioni del jetty e anche un altro errore relativo a una mancata corrispondenza nella lunghezza prevista dell'audio che invio.

Ma torniamo alla mia domanda sulla mia interpretazione del modo in cui funziona; questa è una persona con più di 20 anni di esperienza quindi non ho idea di cosa sto parlando e ho bisogno di verificare se la mia comprensione è corretta.

    
posta vbNewbie 21.02.2018 - 08:33
fonte

1 risposta

1

Il client e il server condividono la responsabilità se stai utilizzando le richieste HTTP per il contenuto parziale:

Whenever the client sends a partial GET request with a Range request header to the server, then server should intercept on the conditional GET request headers (all headers starting with If) and handle accordingly. Whenever the If-Match or If-Unmodified-Since conditions are negative, the server should send a 412 "Precondition Failed" response back without any content. Whenever the If-Range condition is negative, then the server should ignore the Range header and send the full file back. Whenever the Range header is in invalid format, then the server should send a 416 "Requested Range Not Satisfiable" response back without any content.

If a partial GET request with a valid Range header is sent by the client, then the server should send the specific byte range(s) back as a 206 "Partial Content" response.

Riferimenti

risposta data 16.08.2018 - 14:58
fonte

Leggi altre domande sui tag