Riproduzione di file da un'origine di rete
[La funzionalità associata a questa pagina, Windows Media Format 11 SDK, è una funzionalità legacy. È stata sostituita dal lettore di origine e dal writer sink. Lettore di origine e writer sink sono stati ottimizzati per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi lettore di origine e writer sink anziché Windows Media Format 11 SDK, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
La lettura da una rete non è fondamentalmente diversa dalla lettura di un file locale. L'applicazione passa l'URL al metodo IWMReader::Open dell'oggetto lettore e gestisce i dettagli dei protocolli di rete. L'oggetto lettore usa la gestione intelligente del buffer per garantire la riproduzione più fluida possibile. Se l'applicazione necessita di un maggiore controllo sulle impostazioni di rete dell'oggetto lettore, queste sono disponibili tramite le interfacce IWMReaderNetworkConfig e IWMReaderNetworkConfig2 .
Il contenuto di un'origine di rete rientra in una delle due categorie seguenti:
- Streaming. I dati vengono trasmessi just-in-time per essere riprodotti nel computer locale. I server che eseguono Servizi multimediali Windows possono fornire dati di streaming. Se il contenuto MBR (Multiple Bit Rate) viene trasmesso, il client può richiedere una frequenza di bit diversa dal server man mano che lo streaming procede.
- 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.
Quando l'oggetto lettore scarica un file da un server Web, usa una tecnica denominata streaming progressivo, che consente a un lettore di iniziare a eseguire il rendering del contenuto prima del download. I dati vengono memorizzati nel buffer per fornire un flusso ininterrotto di dati al lettore. Le informazioni, ad esempio la velocità di trasferimento e la durata del contenuto, vengono usate per determinare per quanto tempo memorizzare nel buffer i dati prima di assegnarlo al lettore.
Per aprire un file o un flusso in una rete, chiamare il metodo IWMReader::Open dell'oggetto reader con l'URL appropriato. Open è una chiamata asincrona, quindi restituisce immediatamente. Quando l'origine è pronta per la lettura, l'oggetto reader invia una notifica di WMT_OPENED al metodo di callback IWMStatusCallback::OnStatus dell'applicazione. A questo punto, l'applicazione può eseguire una query sul lettore per la modalità di recapito chiamando IWMReaderAdvanced2::GetPlayMode. Per il contenuto di rete, questo metodo restituirà WMT_PLAY_MODE_DOWNLOAD, che indica il contenuto scaricato o WMT_PLAY_MODE_STREAMING, che indica il contenuto trasmesso.
Per iniziare a leggere il file o il flusso, chiamare il metodo IWMReader::Start . Il lettore invia una notifica WMT_BUFFERING_START all'avvio del buffer del contenuto e una notifica di WMT_BUFFERING_STOP al completamento del buffer. Mentre il lettore memorizza nel buffer il contenuto, ovvero tra queste due notifiche, può essere necessario visualizzare lo stato di avanzamento del buffer per l'utente. Il metodo IWMReaderAdvanced2::GetBufferProgress restituisce la percentuale di dati memorizzati nel buffer e il tempo stimato rimanente. Per il contenuto scaricato, è anche possibile chiamare IWMReaderAdvanced2::GetDownloadProgress per ottenere lo stato di avanzamento del download. Chiamare ripetutamente questi metodi per aggiornare la visualizzazione, fino al completamento del buffering. Il buffering può verificarsi di nuovo durante la riproduzione, a causa di fattori come la congestione della rete. In questo caso, l'applicazione riceve un'altra notifica WMT_BUFFERING_START.
Quando l'oggetto lettore inizia a riprodurre il contenuto, invia una notifica di WMT_STARTED. Quando ogni esempio viene decodificato e diventa disponibile per il rendering, il lettore lo passa all'applicazione tramite il metodo di callback IWMReaderCallback::OnSample . A questo punto, il processo è uguale a quello per la riproduzione di file locali. Quando la riproduzione viene arrestata, il lettore invia una notifica di WMT_END_OF_STREAMING.
Argomenti correlati