Come può Hulu.com tenere traccia della vostra posizione in uno show televisivo?
-
22-08-2019 - |
Domanda
sto guardando uno show tv su Hulu.com (che è btw, il miglior sito di streaming-video assoluta in giro) e se chiudo il browser, disconnettersi da Internet, e anche se riavviare il computer in mezzo di guardare uno spettacolo, la prossima volta che vado al loro sito, posso riprendere la tv dal esattamente il tempo in cui ho lasciato nello spettacolo.
La mia domanda è da un punto di vista dettagliata programmazione web, come possono raggiungere questo obiettivo? Presumo che non sta usando le sessioni, perché non credo che funzionerebbe se ho riavviato il computer. Se si sta usando i biscotti, allora come possono aggiornare costantemente il cookie con la vostra posizione in uno spettacolo?
Al fine di ricevere la grazia in allegato, si prega di includere esempi di codice in preferibilmente Java / JSP (PHP è ok troppo) su come creare il cookie e un frammento di codice lato server che permetterebbe per la posizione dello spettatore aggiornato.
grazie!
Soluzione
Un modo semplice è che il giocatore può aggiornare il cookie (s) tramite JavaScript, e che la funzione JavaScript può essere chiamato ogni n secondi da Flash Player:
<script type="text/javascript">
function UpdateViewData(videoId, time)
{
//for a video with id 12345, sets a cookie called:
//hulu12345 with a value of the position
var cookieData = 'hulu' + videoId + '=' + time + '; expires=' + getDate() + ';path=/';
document.cookie = cookieData;
}
</script>
Nel Flash player, ActionScript può invocare il JavaScript frequentemente per ottenere un aggiornamento abbastanza precisa di dove il giocatore era l'ultima volta che il cookie è stato impostato. Ogni volta che si chiama, sovrascrive il cookie con i dati aggiornati:
import flash.external.ExternalInterface;
//in flash video player code,
//have variables for video ID and current player position
//every 5 seconds, call:
ExternalInterface.call("UpdateViewData", videoId, currentPlayerPosition);
//this will invoke a JS function on the host page named "UpdateViewData"
//and pass in the provided arguments
Quando tornate alla pagina, la prima cosa che il server non è controllare per vedere se si dispone di un cookie chiamato "Hulu {ID video}" e in tal caso, il valore di tale cookie è la posizione impostata ultima volta che sono stati visualizzazione.
Anche in questo caso (come detto all'inizio) questo è un modo molto semplice per realizzare quello che stai chiedendo. Trovo il modo migliore per imparare è quello di andare con una semplice implementazione e quindi aggiungere la complessità una volta che il caso più semplice è ben compreso,. Hulu probabilmente rende gli aggiornamenti periodici dietro le quinte che utilizzano AJAX. (In realtà, se si guarda il traffico di rete mentre si guarda un video utilizzando qualcosa come Firebug , vedrete le chiamate occasionali a http://t2.hulu.com/v3/playback/position?...
).
Altri suggerimenti
Flash ha il proprio meccanismo di biscotto-come:. locale Shared Object
Ci sono alcuni esempi di codice rel="noreferrer"> . Immagino Hulu solo crea un LSO e periodicamente aggiorna con la posizione nel film. Quando il filmato viene caricato prossimo, si può ottenere la LSO e ripristinare la posizione. In alternativa, si potrebbe memorizzare un ID univoco e salvare le posizioni sul lato server.
Si può scrivere un cookie con un certo id record, negozio dove eravate quando la sessione è andato via sul server. Essi possono sapere dove siete avendo il client invia un ACK indietro di tanto in tanto che dice: "Sì, ho giocato fino tempo T".
Poi, quando torni usano il record id nel cookie per ricerca nel loro database dove fossi. Non importa quanto ci si disconnette, sanno ancora il collegamento è andato via.
Sono solo supposizioni, ma probabilmente memorizzare la posizione sul lato server. Quando si va a riprendere a guardare qualcosa, invia l'ultima posizione registrata come un curriculum-da timestamp?
La pagina si è in forse ogni tanto invia i pacchetti di stato al server, raccontando il vostro timestamp corrente. Quando la connessione viene reciso, viene utilizzato l'ultimo valore registrato.