Mixed Reality-Aufnahme für Entwickler (DirectX)
Hinweis
Eine Anleitung zu einer neuen MRC-Funktion für HoloLens 2 finden Sie unter "Rendern aus der PV-Kamera unten".
Bevor Sie hier beginnen, empfehlen wir Ihnen, einen Blick auf unseren Übersichtsartikel zur Mixed Reality-Aufnahme zu werfen.
Rendern von der PV-Kamera (Opt-In)
HoloLens 2 bietet die Möglichkeit, eine immersive App aus der PV-Kamera zu rendern, während mixed Reality-Aufnahme ausgeführt wird. Um sicherzustellen, dass die App das zusätzliche Rendern korrekt unterstützt, muss sich die App für diese Funktionalität entscheiden.
Rendern von der PV-Kamera bietet die folgenden Verbesserungen gegenüber der standardmäßigen MRC-Erfahrung:
- Die Hologrammausrichtung auf Ihre physische Umgebung und die Hände für nahe Interaktionen sollte in allen Abständen genau sein. Vermeiden Sie es, einen Abstand zu anderen Entfernungen als dem Fokuspunkt zu haben, wie sie in der Standard-MRC-Standardeinstellung 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 zum Aktivieren des Renderings von der PV-Kamera:
- Aktivieren der PhotoVideoCamera HolographicViewConfiguration
- Behandeln des zusätzlichen HolographicCamera-Renders
- Überprüfen Sie, ob Ihre Shader und Der Code ordnungsgemäß von dieser zusätzlichen HolographicCamera gerendert werden
Aktivieren der PhotoVideoCamera HolographicViewConfiguration in DirectX
Um sich für das Rendern von der PV-Kamera zu entscheiden, ermöglicht eine App einfach die HolographicViewConfiguration von 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 sich die App für das Rendern von der PV-Kamera und mixed Reality-Aufnahme entscheidet:
- Das CameraAdded-Ereignis von HolographicSpace wird ausgelöst. Dieses Ereignis kann zurückgestellt werden, wenn die App die Kamera zurzeit nicht verarbeiten kann.
- Sobald das Ereignis ohne ausstehende Verzögerung abgeschlossen wurde, wird die HolographicCamera in der nächsten AddCameras-Liste von HolographicFrames angezeigt.
Wenn die Mixed Reality-Aufnahme beendet wird (oder wenn die App die Ansichtskonfiguration deaktiviert, während die Mixed Reality-Aufnahme ausgeführt wird): Die HolographicCamera wird in der Liste "RemovedCameras" von HolographicFrame angezeigt, und das CameraRemoved-Ereignis von HolographicSpace wird ausgelöst.
Eine ViewConfiguration-Eigenschaft wurde holographicCamera 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-Aufnahme aus, und überprüfen Sie auf ungewöhnliche Ausrichtungs-, fehlende Inhalte oder Leistungsprobleme. Aktualisieren Sie Shader und Code entsprechend.
Wenn es bestimmte Szenen gibt, die das Rendern für eine zusätzliche 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 festlegen, dass ihre visuellen Inhalte verdeckt werden, wenn mixed Reality-Aufnahme ausgeführt wird:
- Mit der DXGI_PRESENT_RESTRICT_TO_OUTPUT-Kennzeichnung präsentieren
- Erstellen der Swapchain der App mit dem DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED-Flag
- Mit dem Windows 10 Mai 2019 Update legen Sie applicationViews IsScreenCaptureEnabled fest
Immersive App
Immersive Apps können auswählen, dass ihre visuellen Inhalte von der Mixed Reality-Aufnahme ausgeschlossen werden, indem Sie:
- Festlegen von HolographicCameraRenderingParameters IsContentProtectionEnabled zum Deaktivieren der Mixed Reality-Aufnahme für den zugehörigen Frame
- Festlegen von HolographicCameras IsHardwareContentProtectionEnabled zum Deaktivieren der Mixed Reality-Aufnahme für seine zugeordnete holografische Kamera
Kennworttastaturen
Mit dem Windows 10 Mai 2019 Update werden visuelle Inhalte automatisch von der Mixed Reality-Aufnahme ausgeschlossen, wenn ein Kennwort oder eine Pintastatur sichtbar ist.
Wissen, wann MRC aktiv ist
Die AppCapture-Klasse kann von einer App verwendet werden, um zu wissen, wann die Mixed Reality-Aufnahme des Systems ausgeführt wird (für Audio oder Video).
Hinweis
Die GetForCurrentView-API von AppCapture kann NULL zurückgeben, wenn die Mixed Reality-Aufnahme auf dem Gerät nicht verfügbar ist. Es ist auch wichtig, das CaptureChanged-Ereignis zu deaktivieren, wenn Ihre App angehalten wird, andernfalls kann MRC in einen blockierten Zustand gelangen.
Integrieren von MRC-Funktionen aus Ihrer App
Ihre Mixed Reality-App kann MRC-Foto- oder Videoaufnahmen aus der App starten, und die aufgenommenen Inhalte werden ihrer App zur Verfügung gestellt, ohne auf dem Gerät "Eigene Aufnahmen" gespeichert zu werden. Sie können einen benutzerdefinierten MRC-Recorder erstellen oder die integrierte Kameraaufnahme-UI nutzen.
MRC mit integrierter Kamera-UI
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-Kamera-UI, auf der Benutzer ein Foto oder Video aufnehmen können und die resultierende Aufnahme an Ihre App zurückgibt. Sie können einen benutzerdefinierten Mixed Reality Capture-Recorder erstellen, wenn Sie Ihre eigene Kamera-UI oder den Zugriff auf niedrigere Ebene für Aufnahmedatenströme hinzufügen müssen.
MRC mit Bildschirmaufnahme
Mit dem HoloLens-Update vom 2. 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
Der Benutzer kann zwar immer ein Foto oder Video mit dem MRC-Aufnahmedienst des Systems auslösen, aber eine Anwendung möchte möglicherweise eine benutzerdefinierte Kamera-App erstellen, die Hologramme im Kameradatenstrom wie MRC enthält. Auf diese Weise kann die Anwendung Aufzeichnungen von Benutzereingaben starten, benutzerdefinierte Aufzeichnungs-UI 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 Stillen und Videos einzuschließen.
Anwendungen haben 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, sodass dynamische Eigenschaften bearbeitet werden können): Windows.Media.Capture.MediaCapture.AddVideoEffectAsync() / Windows.Media.Capture.MediaCapture.AddAudioEffectAsync(), wodurch 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)
Eigenschaftsname | type | Standardwert | Beschreibung |
---|---|---|---|
StreamType | UINT32 (MediaStreamType) | 1 (VideoRecord) | Beschreiben Sie, für welchen Aufnahmedatenstrom 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, um die Aufzeichnungsanzeige auf dem Bildschirm während der Hologrammaufnahme zu aktivieren oder zu deaktivieren. |
VideoStabilizationEnabled | boolean | FALSE | Kennzeichnen, um die Videostabilisierung zu aktivieren oder zu deaktivieren, die vom HoloLens-Tracker unterstützt wird. |
VideoStabilizationBufferLength | UINT32 | 0 | Legen Sie fest, wie viele Verlaufsframes für die Videostabilisierung verwendet werden. 0 ist 0-Latenz und fast "frei" aus Leistungs- und Leistungsperspektive. 15 wird für höchste Qualität empfohlen (zu Kosten von 15 Frames von Latenz und Arbeitsspeicher). |
GlobalOpacityCoefficient | float | 0.9 (HoloLens) 1.0 (Immersives Headset) | Legen Sie den globalen Deckkraftkoeffizienten des Hologramms im Bereich von 0,0 (vollständig transparent) auf 1,0 (vollständig undurchsichtig) fest. |
BlankOnProtectedContent | boolean | FALSE | Kennzeichnen, um das Zurückgeben eines leeren Frames zu aktivieren oder zu deaktivieren, wenn eine 2d-UWP-App geschützte Inhalte anzeigt. Wenn dieses Kennzeichen falsch ist und eine 2d-UWP-App geschützte Inhalte anzeigt, wird die 2d-UWP-App durch eine geschützte Inhaltstextur sowohl im Headset als auch in der Mixed Reality-Aufnahme ersetzt. |
ShowHiddenMesh | boolean | FALSE | Flag zum Aktivieren oder Deaktivieren der Anzeige des ausgeblendeten Bereichsgitters und des benachbarten Inhalts der holografischen Kamera. |
OutputSize | Größe | 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 Argb32 MediaEncodingSubtypes. |
PreferredHologramPerspective | UINT32 | Rendern aus Kameraeinstellung im Windows Device Portal | Aufzählung, die verwendet wird, um anzugeben, welche Konfiguration der holografischen Kameraansicht aufgenommen 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 (wenn die App sie unterstützt). Nur unterstützt auf HoloLens 2 |
Hinweis
Sie können den Standardwert von PreferredHologramPerspective im Windows Device Portal ändern, indem Sie zur Seite Mixed Reality Capture 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 ( 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)
Eigenschaftsname | type | Standardwert | Beschreibung |
---|---|---|---|
MixerMode | UINT32 | 2 (Mikrofon und Systemaudio) | Aufzählung, die verwendet wird, um anzugeben, welche Audioquellen verwendet werden sollten: 0 (nur Mikrofonaudio), 1 (nur Systemaudio), 2 (Mikrofon- und Systemaudio) |
LoopbackGain | float | Einstellung "App-Audiozunahme " im Windows Device Portal | Um die Systemaudiolautstärke anzuwenden. Reicht von 0,0 bis 5,0. Nur unterstützt auf HoloLens 2 |
MicrophoneGain | float | Einstellung "Mikrofonaudiozunahme " im Windows Device Portal | Um die Mikrofonlautstärke anzuwenden. Reicht von 0,0 bis 5,0. Nur unterstützt auf HoloLens 2 |
Hinweis
Sie können den Standardwert von LoopbackGain oder MicrophoneGain im Windows Device Portal ändern, indem Sie zur Mixed Reality Capture-Seite wechseln und den Schieberegler neben den jeweiligen Einstellungen anpassen. Beide Einstellungen sind standardmäßig auf 1,0 festgelegt, können jedoch auf einen beliebigen Wert zwischen 0,0 und 5,0 festgelegt werden.
Die Verwendung des Windows Device Portals zum Konfigurieren der Standardwerte 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.
Foto-/Videokamerazugriff
Auf HoloLens 1 kann MRC ein Foto oder Video nicht aufnehmen, während ein Prozess Video aufzeichnen oder ein Foto aufnehmen kann. Die Umgekehrte ist auch wahr: Wenn MRC ausgeführt wird, kann die Anwendung keinen Zugriff auf die Kamera erhalten.
Mit HoloLens 2 können Sie den Zugriff auf die Kamera freigeben. Wenn Sie keine direkte Kontrolle über die Auflösung oder Bildfrequenz benötigen, können Sie MediaCapture mithilfe der SharedMode-Eigenschaft mit SharedReadOnly initialisieren.
Integrierter MRC-Foto- und Videokamerazugriff
MRC-Funktionalität, die in Windows 10 integriert ist (über Cortana, Startmenü, Hardwareverknüpfungen, Miracast, Windows Device Portal):
- Wird standardmäßig mit ExclusiveControl ausgeführt
Unterstützung wurde jedoch dem MRC-Subsystem hinzugefügt, um in einem gemeinsam genutzten Modus zu arbeiten:
- Wenn eine App den ExclusiveControl-Zugriff auf die Foto-/Videokamera anfordert, wird die integrierte MRC-Funktion automatisch beendet, sodass die Anforderung der App erfolgreich ist.
- Wenn die integrierte MRC-Datei gestartet wird, während eine App "ExclusiveControl" besitzt, wird das integrierte MRC im SharedReadOnly-Modus ausgeführt.
Diese Funktionalität für den gemeinsam genutzten Modus weist bestimmte Einschränkungen auf:
- Foto über Cortana, Hardwareverknüpfungen oder Startmenü: Erfordert das Windows 10 April 2018 Update (oder höher)
- Video über Cortana, Hardwareverknüpfungen oder Startmenü: Erfordert das Windows 10 April 2018 Update (oder höher)
- Streaming MRC over Miracast: Erfordert das Windows 10 Oktober 2018 Update (oder höher)
- Streamen von MRC über das Windows Device Portal oder über die HoloLens-Begleit-App: Erfordert HoloLens 2
Hinweis
Die Auflösung und Bildfrequenz der integrierten MRC-Kamera-UI kann von den normalen Werten reduziert werden, wenn eine andere App die Foto-/Videokamera verwendet.
MRC-Zugriff für Entwickler
Wir empfehlen, bei Verwendung von MRC immer exklusive Steuerung für die Kamera anzufordern. Dadurch wird sichergestellt, dass Ihre Anwendung die volle 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 SharingMode-Hinweise sorgfältig, bevor Sie fortfahren.
- Richten Sie Ihre Kamera auf die gewünschte Weise 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 holografischen Gesichtsverfolgungsbeispiel.
Hinweis
Vor dem Windows 10 April 2018 Update schließt sich der benutzerdefinierte MRC-Recorder einer App gegenseitig mit system MRC aus (Aufnehmen von Fotos, Aufnehmen von Videos oder Streaming über das Windows Device Portal).