Mixed Reality-Erfassung für Entwickler (DirectX)
Hinweis
Anleitungen zu einer neuen MRC-Funktion für HoloLens 2 finden Sie unten unter Rendern von der PV-Kamera.
Bevor Sie hier beginnen, empfehlen wir Ihnen, einen Blick in unseren Übersichtsartikel zur Mixed Reality-Aufnahme zu werfen.
Rendern von der PV-Kamera (Opt-In)
HoloLens 2 fügt die Möglichkeit hinzu, dass eine immersive App von der PV-Kamera gerendert werden kann, während Mixed Reality-Aufnahmen ausgeführt werden. Um sicherzustellen, dass die App das zusätzliche Rendern ordnungsgemäß unterstützt, muss die App diese Funktion aktivieren.
Das Rendern von der PV-Kamera bietet die folgenden Verbesserungen gegenüber der standardmäßigen MRC-Benutzeroberfläche:
- Die Ausrichtung des Hologramms auf Ihre physische Umgebung und ihre Hände für nahe Interaktionen sollte in allen Entfernungen genau sein. Vermeiden Sie einen Offset in anderen Entfernungen als dem Fokuspunkt, wie sie möglicherweise im Standard-MRC angezeigt werden.
- Das rechte Auge im Headset wird nicht kompromittiert, da es nicht zum Rendern der Hologramme für die MRC-Ausgabe verwendet wird.
Es gibt drei Schritte, um das Rendering von der PV-Kamera zu aktivieren:
- Aktivieren der PhotoVideoCamera HolographicViewConfiguration
- Behandeln des zusätzlichen HolographicCamera-Renders
- Überprüfen Sie, ob Ihre Shader und Der Code über diese zusätzliche HolographicCamera ordnungsgemäß gerendert werden.
Aktivieren der PhotoVideoCamera HolographicViewConfiguration in DirectX
Um sich für das Rendern von der PV-Kamera zu entscheiden, aktiviert eine App einfach die HolographicViewConfiguration der PhotoVideoCamera:
var display = Windows.Graphics.Holographic.HolographicDisplay.GetDefault();
var view = display.TryGetViewConfiguration(Windows.Graphics.Holographic.HolographicViewConfigurationKind.PhotoVideoCamera);
if (view != null)
{
view.IsEnabled = true;
}
Behandeln des zusätzlichen HolographicCamera-Renders in DirectX
Wenn die App für das Rendern von der PV-Kamera aktiviert ist, und die Mixed Reality-Aufnahme beginnt:
- Das CameraAdded-Ereignis von HolographicSpace wird ausgelöst. Dieses Ereignis kann zurückgestellt werden, wenn die App die Kamera derzeit nicht verarbeiten kann.
- Sobald das Ereignis ohne ausstehende Verzögerung abgeschlossen wurde, wird die HolographicCamera in der Liste AddCameras des nächsten HolographicFrame angezeigt.
Wenn die Mixed Reality-Aufnahme beendet wird (oder wenn die App die Ansichtskonfiguration deaktiviert, während die Mixed Reality-Aufnahme ausgeführt wird), wird die HolographicCamera in der RemovedCameras-Liste des nächsten HolographicFrame angezeigt, und das CameraRemoved-Ereignis des HolographicSpace wird ausgelöst.
HolographicCamera wurde eine ViewConfiguration-Eigenschaft hinzugefügt, um die Konfiguration zu identifizieren, zu der eine Kamera gehört.
Überprüfen, ob Shader und Code zusätzliche Kameras unterstützen
Führen Sie eine Mixed Reality-Erfassung aus, und suchen Sie nach ungewöhnlichen Ausrichtungen, fehlenden Inhalten oder Leistungsproblemen. Aktualisieren Sie Shader und Code nach Bedarf.
Wenn bestimmte Szenen das Rendern auf einer zusätzlichen Kamera nicht unterstützen können, können Sie die HolographicViewConfiguration von PhotoVideoCamera deaktivieren.
Deaktivieren von MRC in Ihrer App
2D-App
2D-Apps können auswählen, dass ihre visuellen Inhalte verdeckt werden, wenn Mixed Reality-Erfassung ausgeführt wird:
- Mit dem DXGI_PRESENT_RESTRICT_TO_OUTPUT-Flag präsentieren
- Erstellen der Swapchain der App mit dem DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED-Flag
- Legen Sie mit dem Windows 10 Update vom Mai 2019 die IsScreenCaptureEnabled von ApplicationView fest.
Immersive App
Immersive Apps können auswählen, dass ihre visuellen Inhalte von der Mixed Reality-Aufnahme ausgeschlossen werden:
- Festlegen von HolographicCameraRenderingParameter IsContentProtectionEnabled zum Deaktivieren der Mixed Reality-Aufnahme für den zugehörigen Frame
- Festlegen von "IsHardwareContentProtectionEnabled " von HolographicCamera zum Deaktivieren der Mixed Reality-Aufnahme für die zugehörige holografische Kamera
Kennworttastatatur
Mit dem Windows 10 Update vom Mai 2019 werden visuelle Inhalte automatisch von der Mixed Reality-Erfassung ausgeschlossen, wenn ein Kennwort oder eine Pintastat angezeigt wird.
Wissen, wann MRC aktiv ist
Die AppCapture-Klasse kann von einer App verwendet werden, um zu wissen, wann die Mixed Reality-Aufzeichnung des Systems ausgeführt wird (für Audio oder Video).
Hinweis
Die GetForCurrentView-API von AppCapture kann NULL zurückgeben, wenn die Mixed Reality-Erfassung auf dem Gerät nicht verfügbar ist. Es ist auch wichtig, die Registrierung des CapturingChanged-Ereignisses zu aufheben, wenn Ihre App angehalten wird, andernfalls kann MRC in einen blockierten Zustand versetzt werden.
Integrieren von MRC-Funktionen aus Ihrer App
Ihre Mixed Reality-App kann die MRC-Foto- oder Videoaufnahme in der App starten, und der erfasste Inhalt wird für Ihre App verfügbar gemacht, ohne in der "Kamerarolle" des Geräts gespeichert zu werden. Sie können einen benutzerdefinierten MRC-Rekorder erstellen oder die integrierte Kameraaufnahme-Benutzeroberfläche nutzen.
MRC mit integrierter Kamerabenutzeroberfläche
Entwickler können die Kameraaufnahme-UI-API verwenden, um ein vom Benutzer aufgenommenes Mixed Reality-Foto oder Video mit nur wenigen Codezeilen abzurufen.
Diese API startet die integrierte MRC-Kamerabenutzeroberfläche, auf der Benutzer ein Foto oder Video aufnehmen können, und gibt die resultierende Aufnahme an Ihre App zurück. Sie können einen benutzerdefinierten Mixed Reality Capture-Recorder erstellen, wenn Sie eine eigene Kamerabenutzeroberfläche oder einen niedrigeren Zugriff auf Aufzeichnungsdatenströme hinzufügen müssen.
MRC mit Bildschirmaufnahme
Mit dem HoloLens 2 Update vom Mai 2021 (Windows Holographic, Version 21H1 Build 20346.1002) können Entwickler die Bildschirmaufnahme-API verwenden, um einen Stream von Mixed Reality-Videoframes anzufordern.
Erstellen eines benutzerdefinierten MRC-Recorders
Während der Benutzer über den MRC-Erfassungsdienst des Systems immer ein Foto oder Video auslösen kann, möchte eine Anwendung möglicherweise eine benutzerdefinierte Kamera-App erstellen, die Hologramme wie MRC im Kamerastream enthält. Dadurch kann die Anwendung Aufzeichnungen von Benutzereingaben starten, eine benutzerdefinierte Aufzeichnungsoberfläche erstellen oder MRC-Einstellungen anpassen, um einige Beispiele zu nennen.
HoloStudio fügt eine benutzerdefinierte MRC-Kamera mit MRC-Effekten hinzu
Andere Anwendungen können dazu die Windows Media Capture-APIs verwenden, um die Kamera zu steuern und einen MRC-Video- und Audioeffekt hinzuzufügen, um virtuelle Hologramme und Anwendungsaudio in Stills und Videos einzuschließen.
Anwendungen verfügen über zwei Optionen, um den Effekt hinzuzufügen:
- Die ältere API: Windows.Media.Capture.MediaCapture.AddEffectAsync()
- Die neue von Microsoft empfohlene API (gibt ein Objekt zurück, das das Bearbeiten dynamischer Eigenschaften ermöglicht): Windows.Media.Capture.MediaCapture.AddVideoEffectAsync() / Windows.Media.Capture.MediaCapture.AddAudioEffectAsync(), für die die App eine eigene Implementierung von IVideoEffectDefinition und IAudioEffectDefinition erstellen muss. Beispiele finden Sie in der MRC-Beispiel-App .
Hinweis
Der Windows.Media.MixedRealityCapture-Namespace wird von Visual Studio nicht erkannt, aber die Zeichenfolgen sind weiterhin gültig.
MRC-Videoeffekt (Windows.Media.MixedRealityCapture.MixedRealityCaptureVideoEffect)
Eigenschaftenname | Typ | Standardwert | BESCHREIBUNG |
---|---|---|---|
StreamType | UINT32 (MediaStreamType) | 1 (VideoRecord) | Beschreiben Sie, für welchen Erfassungsstream dieser Effekt verwendet wird. Audio ist nicht verfügbar. |
HologramCompositionEnabled | boolean | true | Kennzeichnen, um Hologramme in der Videoaufnahme zu aktivieren oder zu deaktivieren. |
RecordingIndicatorEnabled | boolean | true | Kennzeichnen Sie, um die Aufzeichnungsanzeige während der Hologrammerfassung auf dem Bildschirm zu aktivieren oder zu deaktivieren. |
VideoStabilizationEnabled | boolean | false | Kennzeichnen Sie, um die Videostabilisierung zu aktivieren oder zu deaktivieren, die vom HoloLens-Tracker unterstützt wird. |
VideoStabilizationBufferLength | UINT32 | 0 | Legen Sie fest, wie viele verlaufsbezogene Frames für die Videostabilisierung verwendet werden. 0 ist 0-Latenz und aus Leistungs- und Leistungssicht nahezu "frei". 15 wird für höchste Qualität empfohlen (auf Kosten von 15 Frames an Latenz und Arbeitsspeicher). |
GlobalOpacityCoefficient | float | 0.9 (HoloLens) 1.0 (Immersive Headset) | Legen Sie den globalen Deckkraftkoeffizienten des Hologramms im Bereich von 0,0 (vollständig transparent) bis 1,0 (vollständig undurchsichtig) fest. |
BlankOnProtectedContent | boolean | false | Flag zum Aktivieren oder Deaktivieren der Rückgabe eines leeren Frames, wenn eine 2D-UWP-App geschützte Inhalte anzeigt. Wenn dieses Flag false ist und eine 2D-UWP-App geschützte Inhalte anzeigt, wird die 2D-UWP-App sowohl im Headset als auch in der Mixed Reality-Aufnahme durch eine geschützte Inhaltstextur ersetzt. |
ShowHiddenMesh | boolean | false | Flag zum Aktivieren oder Deaktivieren der Anzeige des verborgenen Bereichsgitters der holografischen Kamera und benachbarter Inhalte. |
OutputSize | Size | 0, 0 | Legen Sie die gewünschte Ausgabegröße nach dem Zuschneiden für die Videostabilisierung fest. Eine Standardzuschneidegröße wird ausgewählt, wenn 0 oder eine ungültige Ausgabegröße angegeben wird. |
OutputSubtype | String | Nv12 | Legen Sie den gewünschten Ausgabeuntertyp nach der Hologrammkomposition und/oder Videostabilisierung fest. Unterstützt Nv12 und Argb32MediaEncodingSubtypes. |
PreferredHologramPerspective | UINT32 | Einstellung "Rendern aus Kamera " im Windows-Geräteportal | Aufzählung, die verwendet wird, um anzugeben, welche Konfiguration der holografischen Kameraansicht erfasst werden soll: 0 (Anzeige) bedeutet, dass die App nicht aufgefordert wird, von der Foto-/Videokamera zu rendern, 1 (PhotoVideoCamera) fordert die App auf, von der Foto-/Videokamera zu rendern (sofern die App dies unterstützt). Nur auf HoloLens 2 unterstützt |
Hinweis
Sie können den Standardwert von PreferredHologramPerspective im Windows-Geräteportal ändern, indem Sie zur Seite Mixed Reality Aufnahme wechseln und rendern von Kamera deaktivieren. Die Einstellung ist standardmäßig auf 1 (PhotoVideoCamera) festgelegt, kann jedoch deaktiviert werden, um sie auf 0 (Anzeige) festzulegen.
Der Standardwert von PreferredHologramPerspective war vor dem Update vom Juni 2020 0 ( Windows Holographic, Version 2004, Build 19041.1106 und Windows Holographic, Version 1903 Build 18362.1064).
Unterstützung für OutputSubtype wurde mit dem Update vom Mai 2021 (Windows Holographic, Version 21H1 Build 20346.1002) hinzugefügt.
MRC-Audioeffekt (Windows.Media.MixedRealityCapture.MixedRealityCaptureAudioEffect)
Eigenschaftenname | Typ | Standardwert | BESCHREIBUNG |
---|---|---|---|
MixerMode | UINT32 | 2 (Mikrofon- und Systemaudio) | Enumeration, die verwendet wird, um anzugeben, welche Audioquellen verwendet werden sollen: 0 (nur Mikrofonaudio), 1 (nur Systemaudio), 2 (Mikrofon und Systemaudio) |
LoopbackGain | float | Einstellung "App-Audiogewinn " im Windows-Geräteportal | Verstärkung, die auf die Systemaudiolautstärke angewendet werden soll. Reicht von 0,0 bis 5,0. Nur auf HoloLens 2 unterstützt |
MicrophoneGain | float | Mikrofon-Audio-Verstärkungseinstellung im Windows-Geräteportal | Verstärkung, die auf die Mikrofonlautstärke angewendet werden soll. Reicht von 0,0 bis 5,0. Nur auf HoloLens 2 unterstützt |
Hinweis
Sie können den Standardwert von LoopbackGain oder MicrophoneGain im Windows-Geräteportal ändern, indem Sie zur Seite Mixed Reality Aufnahme navigieren und den Schieberegler neben den jeweiligen Einstellungen anpassen. Beide Einstellungen sind standardmäßig 1,0, können aber auf einen beliebigen Wert zwischen 0,0 und 5,0 festgelegt werden.
Die Verwendung des Windows-Geräteportals zum Konfigurieren der Standardgewinnwerte wurde mit dem Update vom Juni 2020 (Windows Holographic, Version 2004, Build 19041.1106 und Windows Holographic, Version 1903 Build 18362.1064) hinzugefügt.
Gleichzeitige MRC-Einschränkungen
Sie müssen bestimmte Einschränkungen beachten, wenn mehrere Apps gleichzeitig auf MRC zugreifen.
Zugriff auf Foto-/Videokameras
Auf HoloLens 1 kann MRC kein Foto oder Video aufnehmen, während ein Prozess Videos oder Fotos aufnimmt. Umgekehrt gilt auch: Wenn MRC ausgeführt wird, erhält die Anwendung keinen Zugriff auf die Kamera.
Mit HoloLens 2 können Sie den Zugriff auf die Kamera freigeben. Wenn Sie keine direkte Steuerung der Auflösung oder Framerate benötigen, können Sie MediaCapture mithilfe der SharedMode-Eigenschaft mit SharedReadOnly initialisieren.
Integrierter MRC-Foto- und Videokamerazugriff
In Windows 10 integrierte MRC-Funktionalität (über Cortana, Startmenü, Hardwareverknüpfungen, Miracast, Windows-Geräteportal):
- Wird standardmäßig mit ExclusiveControl ausgeführt.
Es wurde jedoch Unterstützung für das MRC-Subsystem hinzugefügt, um in einem freigegebenen Modus zu arbeiten:
- Wenn eine App exclusiveControl-Zugriff auf die Foto-/Videokamera anfordert, wird die verwendung der integrierten MRC automatisch beendet, sodass die App-Anforderung erfolgreich ist.
- Wenn das integrierte MRC gestartet wird, während eine App über ExclusiveControl verfügt, wird das integrierte MRC im SharedReadOnly-Modus ausgeführt.
Für diese Funktion im freigegebenen Modus gelten bestimmte Einschränkungen:
- Foto über Cortana, Hardwareverknüpfungen oder Startmenü: Erfordert das Windows 10 Update vom April 2018 (oder höher)
- Video über Cortana, Hardwareverknüpfungen oder Startmenü: Erfordert das Windows 10 Update vom April 2018 (oder höher)
- Streamen von MRC über Miracast: Erfordert das update vom Windows 10 Oktober 2018 (oder höher)
- Streamen von MRC über das Windows-Geräteportal oder über die HoloLens-Begleit-App: Erfordert HoloLens 2
Hinweis
Die Auflösung und Bildfrequenz der integrierten BEnutzeroberfläche der MRC-Kamera kann von den normalen Werten reduziert werden, wenn eine andere App die Foto-/Videokamera verwendet.
MRC-Zugriff für Entwickler
Es wird empfohlen, bei Verwendung von MRC immer die exklusive Steuerung für die Kamera anzufordern. Dadurch wird sichergestellt, dass Ihre Anwendung die vollständige Kontrolle über die Einstellungen für die Kamera hat, solange Sie die oben aufgeführten Einschränkungen kennen.
- Erstellen eines Medienaufnahmeobjekts mithilfe der Initialisierungseinstellungen
- Festlegen der SharingMode-Eigenschaft auf exklusiv
Achtung
Lesen Sie unbedingt die Hinweise zu SharingMode , bevor Sie fortfahren.
- Richten Sie Ihre Kamera wie gewünscht ein.
- Starten Sie die App, erfassen Sie Videoframes mit der Start-API, und aktivieren Sie dann MRC.
Achtung
Wenn Sie MRC starten, bevor Sie Ihre App starten, können wir nicht garantieren, dass das Feature wie erwartet funktioniert.
Ein vollständiges Beispiel für den obigen Prozess finden Sie im Beispiel für die holografische Gesichtsverfolgung.
Hinweis
Vor dem Windows 10 Update vom April 2018 wurde der benutzerdefinierte MRC-Recorder einer App mit dem MRC-System (Aufnahme von Fotos, Aufzeichnen von Videos oder Streaming über das Windows-Geräteportal) gegenseitig ausgeschlossen.