In un momento storico come quello che stiamo vivendo, stanno assumendo sempre più importanza i meeting per poter entrare in contatto con colleghi di ufficio, per lavoro, piuttosto che con gli amici o parenti, per ridurre le distanze, anche se in modo virtuale. Esistono molte applicazioni di videoconference, come ad esempio Skype piuttosto che Microsoft Teams o Zoom, e tutte offrono la possibilità di trasferire audio e video o, ancora, la possibilità di fare una registrazione di tutto il meeting.
Questo stesso comportamento è ottenibile in una qualsiasi applicazione della Universal Windows Platform, tramite gli oggetti esposti dalle classi MediaCapture e LowLagMediaRecording: il primo ci consente di recuperare informazioni relative alla cattura dello schermo, mentre il secondo ci consente di effettuare registrazioni dello stesso, mantenendo alte prestazioni dell'applicazione che ha avviato il recording.
Per supportare questo scenario, dobbiamo innanzitutto abilitare le capability di Webcam e Microphone all'interno del file di manifest, quindi inizializzare l'oggetto di cattura e specificare un percorso dove salvare la registrazione stessa:
var localFolder = ApplicationData.Current.LocalFolder; var file = await localFolder.CreateFileAsync("audio.mp3", CreationCollisionOption.GenerateUniqueName); mediaCapture = new MediaCapture(); await mediaCapture.InitializeAsync();
In questo caso specifico, siamo interessati a salvare solamente l'audio, ma in realtà non cambierà molto qualora decidessimo di salvare sia audio che video. Infatti, per registrare l'audio non dobbiamo fare altro che chiedere all'oggetto di tipo LowLagMediaRecording di registrare audio:
_mediaRecording = await mediaCapture.PrepareLowLagRecordToStorageFileAsync(MediaEncodingProfile.CreateMp3(AudioEncodingQuality.High), file);
Mentre se invece siamo interessati a registrare un video, dobbiamo cambiare l'estensione del file (in apertura dello stream), e quindi selezionare un formato diverso sul recorder:
_mediaRecording = await mediaCapture.PrepareLowLagRecordToStorageFileAsync(MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD1080p), file);
A questo punto, non dobbiamo fare altro che avviare la registrazione vera e propria:
await _mediaRecording.StartAsync();
Possiamo quindi terminare la registrazione di una traccia tramite il comando di stop:
await _mediaRecording.StopAsync();
E quindi avviare subito dopoo una nuova registrazione sfruttando di nuovo il comando di start. Tuttavia, nessun file audio/video verrà salvato fino a quando non avviseremo il sistema che abbiamo terminato ufficialmente la registrazione, tramite il comando di finish:
await _mediaRecording.FinishAsync();
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Configurare policy CORS in Azure Container Apps
Definire stili a livello di libreria in Angular
Inizializzare i container in Azure Container Apps
Disabilitare automaticamente un workflow di GitHub (parte 2)
Reactive form tipizzati con FormBuilder in Angular
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Sfruttare lo streaming di una chiamata Http da Blazor
Usare le collection expression per inizializzare una lista di oggetti in C#
Generare token per autenicarsi sulle API di GitHub
Eseguire operazioni con timeout in React
Utilizzare le collection expression in C#
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
I più letti di oggi
- annunciato #netstandard 2.1. .NET Core lo supporterà a partire da #netcore3, così come le prossime versione di #xamarin, #mono e #unity.il supporto per #netfx 4.8, invece, non ci sarà. https://aspit.co/bq2
- Steel Style CheckBox per Silverlight 4.0
- Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
- Utilizzare Docker Compose con Azure App Service