2012-03-13 7 views
12

Abbiamo una lunga porzione di video, lunga fino a 1 ora. Vogliamo mostrare agli utenti piccoli pezzi di 30 secondi di questo video. È imperativo che il video non balballi in nessun punto.HTML 5 Video, Streaming/Buffering solo una parte specifica di un video più lungo

L'utente non può quindi saltare il resto del video, vedono solo il chunk di 30 secondi.

Un esempio potrebbe essere, una partita di calcio, l'intera partita è in video ma facendo clic su un pulsante in un'altra pagina si carica il video completo e si gioca solo un obiettivo.

Ciò è possibile con HTML5 Video? Avrebbe qualcosa a che fare con TimeRanges? Il video deve essere servito su un protocollo di streaming puro? Possiamo bufferizzare il blocco completo di 30 secondi prima di riprodurlo?

L'obiettivo è ridurre il flusso di lavoro necessario per ritagliare tutti i piccoli spezzoni (e il tempo trascodificarli in tutti i diversi formati video HTML 5), possiamo semplicemente lanciare un pezzo di filmato codificato e invia l'utente a una sezione di quel filmato.

I vostri pensieri e contributi sono i benvenuti, grazie!

+0

keeno, video.buffered.length-1 fa il trucco.(0) non funzionerà –

risposta

1

A questo punto nel tempo i video HTML5 sono un vero e proprio PITA - non abbiamo alcuna reale API per controllare il buffer del browser, di conseguenza, essi tendono a balbettare su connessioni più lente, come i browser cercano di tamponare in modo intelligente, ma di solito fai esattamente il contrario.

Inoltre, se si desidera solo che i propri utenti visualizzino una particolare porzione di video di 30 secondi (presumo che sarebbe il tuo modo di forzare gli utenti ai registri per visualizzare i video completi), HTML5 non è la scelta giusta - sarebbe incredibilmente semplice abusare del tuo sistema.

In questo caso, ciò di cui hai veramente bisogno è un discreto Flash Player e un Media Server nel back-end, quando hai il pieno controllo.

+0

Ok, questo è quello che pensavo. Non c'è nulla di sinistro in noi che vogliano suonare solo 30 secondi. Potrebbero esserci più clip da 30 secondi che mostreremo dallo stesso filmato di 1 ora. Abbiamo solo bisogno di essere sicuro al 100% che non salti in quanto è importante che l'utente possa vedere la clip senza alcun movimento. Il problema con Flash è iPad! – Keeno

1

Si potrebbe fare un po 'di questo, ma poi si sarebbe soggetti al buffer del browser stesso. (Inoltre, non è possibile impedirlo dal buffering oltre X sec) Miglior risultato, si potrebbe facilmente avere un controllo di ricerca personalizzato per limitare gli intervalli e interrompere il video quando viene raggiunto il blocco di 30 secondi.

Inoltre, il buffering non è qualcosa che è possibile controllare altri dire al browser di non farlo. Il resto è automatico e il supporto per forzare un buffer completo è stato rimosso dalle specifiche.

In ogni caso, solo facendoti sapere che questa è una pratica terribile e potrebbe essere fatto, ma si sarà potenzialmente in esecuzione su molti problemi. Puoi sempre usare un servizio come Zencoder per gestire anche la transcodifica. Un'altra alternativa sarebbe quella di avere ffmpeg o altri software sul server per gestire il clipping e la transcodifica.

+0

avere un gioco, che abbiamo trovato in maggior parte dei browser (non mobile) siamo in grado di forzare il buffer pieno semplicemente chiamando il gioco poi mettere in pausa. Il problema è che non possiamo fermare il buffering. Non avere il controllo diretto del buffering è un enorme dolore. – Keeno

+0

Come ho detto, vorrei suggerire la creazione di transcodifica sul server per evitare questo tutto insieme. In ultima analisi, spetta a voi, ma non dimenticate HTML5 è ancora in bozza di lavoro e molto di ciò che si vuole fare non è ufficialmente supportato né mi vedo implementato in qualunque momento presto. Sono anche molto scettico sul fatto che tu abbia trovato un sicuro buffer completo, onestamente la quantità di buffer del browser può variare. Ho provato questo metodo di pausa e ho trovato alcuni browser per fermare il buffering ad un certo punto prima del frame corrente. –

1

È possibile impostare l'ora utilizzando javascript (proprietà currentTime del video).

Nel caso in cui si desidera un costume SeekBar si può fare qualcosa di simile:

<input type="range" step="any" id="seekbar"> 

var seekbar = document.getElementById('seekbar'); 
function setupSeekbar() { 
seekbar.max = video.duration; 
} 
video.ondurationchange = setupSeekbar; 
function seekVideo() { 
    video.currentTime = seekbar.value; 
} 
function updateUI() { 
    seekbar.value = video.currentTime; 
} 
seekbar.onchange = seekVideo; 
video.ontimeupdate = updateUI; 

function setupSeekbar() { 
    seekbar.min = video.startTime; 
    seekbar.max = video.startTime + video.duration; 
} 

Se il video è in streaming è necessario "calcola" il tempo "fine".

var lastBuffered = video.buffered.end(video.buffered.length-1); 
function updateUI() { 
    var lastBuffered = video.buffered.end(video.buffered.length-1); 
    seekbar.min = video.startTime; 
    seekbar.max = lastBuffered; 
    seekbar.value = video.currentTime; 
} 
+0

che cosa è l'argomento passato in video.buffered.end() per? Ho visto alcuni esempi usare solo 0, che è ciò che il tuo esempio funziona. – Keeno

+0

@BigBalli video.buffered.length-1 il codice è la soluzione ideale per l'aggiornamento tempo e il cambiamento di tempo dell'istanza. imposta il buffering dal nuovo orario quando il tempo corrente è maggiore del tempo di buffering. Grazie e ottimo lavoro –

Problemi correlati