Funzionalità dell'origine di rete

L'origine di rete fornisce l'implementazione di base per i file multimediali di streaming ed espone l'interfaccia IMFMediaSource . L'implementazione dell'origine di rete specifica dipende dal protocollo usato per aprire l'origine, ad esempio RTSP o HTTP. Le origini di rete specifiche del protocollo estendono la funzionalità di rete di base. Per informazioni sugli schemi e i protocolli supportati, vedere Protocolli supportati.

Origine di rete:

  • Implementa funzionalità come la memorizzazione nella cache, il rilevamento del proxy e la riconnessione automatica.
  • Converte le chiamate indipendenti dal protocollo dal resolver di origine a chiamate specifiche del protocollo.
  • Interagisce con il livello socket e il sistema operativo. Analizza la descrizione SDP e la usa come dati di configurazione e legge i dati del flusso dal livello socket sottostante. Durante la ricezione, l'origine di rete è responsabile del riordinamento e della richiesta di ritrasmissioni di pacchetti.

Creazione dell'origine di rete

La creazione di un'origine multimediale per un'origine dalla rete non è diversa da un'origine multimediale per un file locale. L'applicazione passa l'URL per l'origine ai metodi resolver di origine, ad esempio IMFSourceResolver::CreateObjectFromURL o IMFSourceResolver::BeginCreateObjectFromURL e specifica il flag MF_RESOLUTION_MEDIASOURCE. Per altre informazioni sull'uso di questo flag, vedere Uso del resolver di origine.

A seconda dello schema fornito dall'applicazione, il sistema di risoluzione di origine carica l'oggetto gestore dello schema appropriato, che espone l'interfaccia IMFSchemeHandler . L'applicazione può anche usare direttamente il gestore dello schema per creare l'origine di rete chiamando IMFSchemeHandler::BeginCreateObject.

Per altre informazioni, vedere Gestori di schemi e gestori Byte-Stream.

Media Foundation non supporta i flussi di byte per le origini di rete. L'oggetto flusso di byte è supportato solo nello scenario di contenuto scaricato. Tutti i dati vengono trasmessi il più rapidamente possibile in modo che possano essere salvati come file nel computer locale. i server Web forniscono dati scaricati. Non è presente alcuna comunicazione dal client al server dopo l'inizio del download. In questo caso viene usato il protocollo di download HTTP.

Se l'applicazione richiede al resolver di origine di creare un oggetto flusso di byte per gli schemi "http:", "mms:" o "rtsp:", la chiamata ha esito negativo con l'errore MF_E_UNSUPPORTED_SCHEME.

Nota

In Windows 7 l'origine di rete supporta i file di Windows Media Station (. NSC). Questi file vengono usati nel flusso multicast del contenuto multimediale in una rete. Per creare l'origine di rete per un oggetto specificato. Il file NSC, l'applicazione deve usare il resolver di origine.

 

Se l'applicazione usa il gestore dello schema, la chiamata asincrona ignora il parametro dwFlags e restituisce un puntatore all'origine di rete al completamento.

La figura seguente mostra il flusso di dati per lo streaming multimediale usando l'origine di rete.

diagramma di flusso che mostra i percorsi dall'applicazione al server di streaming, con un ciclo tra l'origine di rete e la sessione multimediale

Configurazione dell'origine di rete

In questo argomento vengono descritte le funzionalità supportate dall'origine di rete e dalle opzioni di configurazione associate. Un'applicazione può configurare l'origine di rete durante la creazione dell'oggetto di origine di rete. Queste opzioni vengono archiviate in un oggetto IPropertyStore , che l'applicazione deve passare il parametro pProps dei metodi resolver di origine o IMFSchemeHandler::BeginCreateObject.

Riconnessione automatica

La funzionalità di riconnessione automatica dell'origine di rete consente a un client di riconnettersi automaticamente al server multimediale quando la connessione TCP al server ha esito negativo o il client non riceve pacchetti. Quando la connessione non riesce, l'origine di rete tenta di riconnettersi al server multimediale usando la stessa configurazione usata nella connessione precedente. Il processo di riconnessione è asincrono. L'origine di rete genera l'evento MEReconnectStart quando inizia la riconnessione e l'evento MEReconnectEnd quando la riconnessione ha esito positivo o negativo.

Se il numero di tentativi di riconnessione supera il valore massimo specificato dalla proprietà MFNETSOURCE_AUTORECONNECTLIMIT , l'operazione di riconnessione viene annullata. Il numero di tentativi di riconnessione viene archiviato nella proprietà MFNETSOURCE_AUTORECONNECTPROGRESS .

La riconnessione automatica consente la riproduzione uniforme del contenuto multimediale anche quando la connessione TCP al server multimediale ha esito negativo. Per un'esperienza di riproduzione senza problemi, il client deve disporre di dati sufficienti, almeno da 1 a 2 minuti, nella cache per continuare la riproduzione fino alla riconnessione. Quantità massima di dati che l'origine di rete può memorizzare nel buffer nella proprietà MFNETSOURCE_MAXBUFFERTIMEMS .

Fast Streaming

Il client di origine di rete richiede al server di trasmettere alcuni dati all'inizio del contenuto a una velocità superiore a quella specificata dalla velocità in bit del contenuto. Se l'avvio rapido è abilitato nel server, il server invia un flusso a velocità in bit accelerata in modo che il client possa memorizzare nel buffer una quantità sufficiente di dati più veloce rispetto a quella in tempo reale. Ciò migliora l'esperienza utente riducendo al minimo i ritardi iniziali di buffering, che possono essere causati da vari fattori, ad esempio bassa velocità del computer client o della rete e larghezza di banda disponibile.

Per specificare la quantità di dati in streaming rapido che il client può richiedere, impostare la proprietà MFNETSOURCE_ACCELERATEDSTREAMINGDURATION . Se l'origine di rete usa UDP come protocollo di trasporto, specificare la quantità massima di dati di streaming rapido impostando invece la proprietà MFNETSOURCE_MAXUDPACCELERATEDSTREAMINGDURATION .

Lo streaming rapido sul client è anche possibile tramite la funzionalità Cache veloce , ovvero lo streaming di contenuti su richiesta più velocemente rispetto a quelli in tempo reale e la memorizzazione nella cache locale del client. Per usare questo tipo di streaming veloce, è necessario abilitare Fast Cache nell'origine di rete e il server deve supportarlo. Quando il client richiede contenuto dal server, l'origine di rete controlla prima di tutto se il contenuto è già presente nella cache del client. Se il contenuto si trova nella cache locale del client e non è scaduto, viene eseguito il rendering. Se il contenuto non si trova nella cache locale o è già scaduto, il contenuto viene trasmesso e memorizzato nella cache e l'origine di rete lo riproduce dalla cache locale. Nelle richieste successive, per le playlist, vengono memorizzate nella cache solo le voci mancanti e quindi riprodotte. Se una voce di playlist è già presente nella cache locale del client, viene riprodotta da questa posizione e non memorizzata nuovamente nella cache.

Per impostazione predefinita, Cache veloce è abilitata nel client di origine di rete. Tuttavia, i fattori seguenti determinano anche se viene usata la funzionalità:

  • Il client deve avere una larghezza di banda aggiuntiva disponibile per scaricare e memorizzare nella cache il contenuto più velocemente rispetto alla velocità normale.
  • Il client deve avere spazio su disco sufficiente. Se il client ha meno di 100 MB di spazio libero su disco dopo la memorizzazione nella cache del contenuto su richiesta, non viene memorizzato nella cache, ma viene trasmesso e sottoposto a rendering contemporaneamente.

La funzionalità Cache veloce è controllata dalla proprietà MFNETSOURCE_CACHEENABLED .

Gestione del buffer

L'origine di rete fornisce una gestione efficiente del buffer che monitora lo stato del buffer nel client. Per impostazione predefinita, l'origine di rete memorizza nel buffer 5 secondi di dati all'avvio. Questo valore può essere configurato impostando la proprietà MFNETSOURCE_BUFFERINGTIME . In base a questo valore della proprietà, l'origine di rete calcola le dimensioni del buffer sufficienti per garantire la riproduzione uniforme e ininterrotta del contenuto multimediale. Se questa proprietà è impostata su 0, la gestione del buffer è disabilitata. Quando la quantità di contenuto nel buffer è bassa, l'origine di rete avvia il buffering e genera l'evento MEBufferingStarted per indicare che il buffering è iniziato. Al momento della ricezione di questo evento, la pipeline interrompe il rendering. Al termine del buffering, l'origine di rete genera l'evento MEBufferingStopped e il client può avviare nuovamente il rendering.

Il client avvia il rendering del contenuto dopo aver accumulato la quantità di dati indicati dalla dimensione del buffer del primo campione. Se questo valore è inferiore alla dimensione del buffer calcolato, la riproduzione viene avviata immediatamente. Questo comportamento è molto simile alla funzionalità Avvio rapido.

La proprietà MFNETSOURCE_MAXBUFFERTIMEMS archivia la quantità massima di dati che è possibile memorizzare nel buffer.

Selezione della larghezza di banda

Quando un client si connette al server multimediale, come parte della configurazione della connessione, l'origine di rete esegue la misurazione statica della coppia di pacchetti per stimare la larghezza di banda del collegamento iniziale tra client e server. In base al risultato di questa misurazione, il client può selezionare flussi audio e video che rientrano nella larghezza di banda stimata. Ciò garantisce una riproduzione fluida del contenuto multimediale di streaming.

Durante la fase di avvio rapido viene eseguita la misurazione dinamica della coppia di pacchetti . In questo processo, il client riceve grandi quantità di dati, che possono essere più pacchetti o campioni.

Il risultato della misurazione dinamica della coppia di pacchetti è più accurato della stima della larghezza di banda del collegamento restituita dalla misurazione statica della coppia di pacchetti perché il processo di coppia di pacchetti statici invia un singolo pacchetto di dimensioni fisse, che potrebbe non produrre risultati accurati per le reti con larghezza di banda elevata.

L'applicazione può ottenere la larghezza di banda stimata usando la proprietà MFNETSOURCE_PPBANDWIDTH .

Le condizioni di rete possono cambiare dinamicamente, causando problemi nella riproduzione dell'origine di rete. L'origine di rete può modificare la selezione iniziale del flusso del client in base alla frequenza di ricezione e allo stato del buffer. Ad esempio, il client potrebbe passare a una velocità di bit inferiore durante la congestione della rete e tornare a una velocità di bit superiore quando il traffico di rete è migliorato e il client ha accumulato una quantità sufficiente di contenuto memorizzato nel buffer.

Rete in Media Foundation