Condividi tramite


Tempi di presentazione della sequenza

In questo argomento viene descritto come l'origine sequencer gestisce i tempi di presentazione durante la riproduzione.

Panoramica

L'origine sequencer supporta due modalità diverse: sequenze di playlist e sequenze di modifica.

In una sequenza di modifica, l'applicazione specifica la durata di ogni segmento in anticipo, prima di avviare la riproduzione. In una sequenza di playlist l'applicazione non specifica la durata in anticipo. Infatti, la durata potrebbe non essere nota.

In entrambi i casi, è possibile specificare l'ora di inizio e arresto multimediale di un segmento. Questi tempi specificano la posizione nel file di origine in cui inizia e termina il segmento. Si supponga, ad esempio, che il file di origine sia lungo 90 secondi. Se si desidera tagliare i primi 10 secondi e gli ultimi 10 secondi, è necessario specificare i valori seguenti:

  • Avvio multimediale: 10 secondi
  • Arresto multimediale: 80 secondi

Per specificare l'ora di inizio multimediale, impostare l'attributo MF_TOPONODE_MEDIASTART nel nodo di origine. Per specificare l'ora di arresto multimediale, impostare l'attributo MF_TOPONODE_MEDIASTOP nel nodo di origine.

Per creare una sequenza di modifica, impostare l'attributo MF_SESSION_GLOBAL_TIME quando si crea la sessione multimediale. In caso contrario, la sessione multimediale prevede sequenze di playlist. In una sequenza di modifica, ogni topologia del segmento deve avere l'attributo MF_TOPOLOGY_PROJECTSTART e l'attributo MF_TOPOLOGY_PROJECTSTOP .

Sequenze di playlist

In una sequenza di playlist l'orologio della presentazione inizia a zero e continua attraverso i limiti dei segmenti. Le origini native forniscono esempi con timestamp uguali al tempo multimediale. La pipeline converte i timestamp nel tempo di presentazione corretto come indicato di seguito:

  • Nuovo timestamp = tempo multimediale + offset - inizio multimediale

Il valore dell'offset è l'ora di presentazione in cui il segmento precedente è terminato. Per il primo segmento, l'offset è zero. Ecco due esempi di come vengono calcolate le conversioni timestamp seguenti:

  • Esempio 1: si supponga che il primo segmento (S1) sia lungo 10 secondi e il secondo segmento (S2) abbia un tempo di inizio multimediale pari a zero. L'origine nativa usa il tempo multimediale per i timestamp, quindi il primo esempio di S2 ha un timestamp pari a zero. L'offset è 10 secondi (durata di S1), quindi il timestamp corretto è:0 + 10 - 0 = 10 secondi.
  • Esempio 2: si supponga che segmento S1 sia lungo 10 secondi e S2 abbia un tempo di inizio multimediale di 5 secondi. Il primo esempio di S2 ha un timestamp di 5 secondi (tempo multimediale). L'offset è 10 secondi, quindi il timestamp corretto è:5 + 10 - 5 = 10 secondi.

Tutti i componenti della pipeline downstream dai nodi di origine ricevono esempi con i timestamp modificati. I nodi di origine in una topologia possono avere orari di inizio multimediali diversi, quindi le regolazioni vengono calcolate separatamente per ogni ramo della topologia.

Quando la presentazione passa al segmento successivo, l'orologio della presentazione non si arresta o reimposta e il tempo di presentazione aumenta monotonicamente. Prima dell'avvio di un nuovo segmento, la sessione multimediale invia all'applicazione un evento MESessionNotifyPresentationTime . L'evento specifica l'ora iniziale del segmento, rispetto all'orologio della presentazione e il valore dell'offset. Quando inizia un nuovo segmento, la pipeline chiama Start nell'origine sequencer con il valore VT_EMPTY. L'origine sequencer invia un evento MESourceStarted senza ora di inizio.

Per cercare, l'applicazione specifica un identificatore di segmento più un offset temporale all'interno del segmento. Dopo la ricerca, l'orologio della presentazione inizia all'offset del segmento . Ecco un esempio di funzionamento del processo:

  • Esempio 3: l'applicazione cerca di segmentare S3, con un offset di segmento pari a 10 secondi. L'orologio della presentazione inizia a 10 secondi (offset segmento). L'offset non include la durata dei segmenti S1 e S2. L'origine sequencer invia un evento MESourceStarted con un'ora di inizio uguale all'offset del segmento, 10 secondi.

Dopo una ricerca, se la riproduzione continua al segmento successivo, la transizione funziona esattamente come gli esempi precedenti, ad eccezione del fatto che l'offset non include i segmenti ignorati.

Di seguito sono riportati altri dettagli che influiscono sul modo in cui vengono contrassegnati i timestamp degli esempi:

  • I decodificatori potrebbero richiedere dati oltre il tempo di arresto multimediale. La pipeline esegue il pull della quantità di dati dall'origine richiesta dal decodificatore e quindi taglia gli esempi di output del decodificatore.
  • Le trasformazioni potrebbero memorizzare nel buffer i dati. Ad esempio, un effetto audio potrebbe dover eseguire questa operazione. Quando termina un segmento, il timestamp dell'ultimo esempio della trasformazione è precedente alla fine del segmento, perché la trasformazione mantiene alcuni dati. Quando il segmento successivo inizia, il timestamp del primo esempio è leggermente precedente all'inizio del segmento. Non esiste alcun divario nei timestamp, quindi i dati che raggiungono il sink multimediale sono continui. Al termine del segmento finale, la pipeline scarica la trasformazione, quindi non viene perso alcun dato.
  • L'origine potrebbe dover iniziare leggermente prima dell'ora di inizio multimediale, per raccogliere il fotogramma chiave precedente. Pertanto, dopo la regolazione, il primo esempio potrebbe avere un tempo di presentazione negativo.

Modifica di sequenze

In una sequenza di modifica, l'applicazione specifica in anticipo i limiti del segmento impostando gli attributi di MF_TOPOLOGY_PROJECTSTART e MF_TOPOLOGY_PROJECTSTOP . La pipeline calcola le regolazioni per i timestamp quasi allo stesso modo di una sequenza di playlist:

Pertanto, l'ora di presentazione in una sequenza di modifica è sempre relativa all'inizio della presentazione, anche se l'applicazione cerca un altro segmento.

Sessione multimediale

Origine sequencer