Sdílet prostřednictvím


HoloLens (1. generace) a Azure 306: Streamování videa


Poznámka:

Kurzy Mixed Reality Academy byly navrženy s HoloLensem (1. generace) a imerzivními náhlavními soupravami hybridní reality. Proto máme pocit, že je důležité nechat tyto kurzy zavedené pro vývojáře, kteří stále hledají pokyny při vývoji těchto zařízení. Tyto kurzy nebudou aktualizovány nejnovějšími sadami nástrojů ani interakcemi používanými pro HoloLens 2. Budou zachovány, aby pokračovaly v práci na podporovaných zařízeních. Bude k dispozici nová série kurzů, které budou publikovány v budoucnu, které předvádějí, jak vyvíjet pro HoloLens 2. Toto oznámení se při publikování aktualizuje odkazem na tyto kurzy.


Snímek obrazovky s příkladem prostředí Windows Mixed Reality V RSnímek obrazovky s prostředím Windows Mixed Reality V R

V tomto kurzu se dozvíte, jak připojit Službu Azure Media Services k prostředí vr pro Windows Mixed Reality, abyste umožnili streamování 360stupňového přehrávání videa na imerzivních náhlavních soupravách.

Azure Media Services je kolekce služeb, které vám poskytují služby streamování videa v kvalitě vysílání, aby se dostaly k větším cílovým skupinám na dnešních nejoblíbenějších mobilních zařízeních. Další informace najdete na stránce Azure Media Services.

Po dokončení tohoto kurzu budete mít aplikaci pro imerzivní náhlavní soupravu hybridní reality, která bude moct provádět následující akce:

  1. Načtěte 360stupňové video ze služby Azure Storage prostřednictvím služby Azure Media Service.

  2. Zobrazí načtené 360stupňové video ve scéně Unity.

  3. Mezi dvěma scénami můžete přecházet se dvěma různými videi.

V aplikaci je na vás, jak integrovat výsledky s návrhem. Tento kurz je navržený tak, aby vás naučil, jak integrovat službu Azure s projektem Unity. Vaším úkolem je využít znalosti získané z tohoto kurzu k vylepšení aplikace hybridní reality.

Podpora zařízení

Kurz HoloLens Imerzivní náhlavní soupravy
MR a Azure 306: Streamování videa ✔️

Požadavky

Poznámka:

Tento kurz je určený pro vývojáře, kteří mají základní zkušenosti s Unity a C#. Mějte také na paměti, že požadavky a písemné pokyny v tomto dokumentu představují to, co bylo otestováno a ověřeno v době psaní (květen 2018). Můžete používat nejnovější software, jak je uvedeno v článku o instalaci nástrojů, i když by se nemělo předpokládat, že informace v tomto kurzu budou dokonale odpovídat tomu, co najdete v novějším softwaru, než je uvedeno níže.

Pro tento kurz doporučujeme následující hardware a software:

Než začnete

  1. Abyste se vyhnuli problémům při sestavování tohoto projektu, důrazně doporučujeme vytvořit projekt uvedený v tomto kurzu v kořenové nebo téměř kořenové složce (dlouhé cesty ke složkám můžou způsobovat problémy v době sestavení).

  2. Nastavte a otestujte asistivní náhlavní soupravu hybridní reality.

    Poznámka:

    Pro tento kurz nebudete vyžadovat ovladače pohybu. Pokud potřebujete podporu nastavení Asistivní náhlavní soupravy, klikněte na odkaz, jak nastavit Windows Mixed Reality.

Kapitola 1 – Azure Portal: Vytvoření účtu služby Azure Storage

Pokud chcete použít službu Azure Storage, budete muset vytvořit a nakonfigurovat účet úložiště na webu Azure Portal.

  1. Přihlaste se k webu Azure Portal.

    Poznámka:

    Pokud ještě nemáte účet Azure, budete ho muset vytvořit. Pokud tento kurz sledujete v situaci v učebně nebo testovacím prostředí, požádejte svého instruktora nebo některého z proktorů, aby vám pomohli nastavit nový účet.

  2. Po přihlášení klikněte v nabídce vlevo na účty úložiště.

    Snímek obrazovky s nabídkou webu Azure Portal Účty úložiště jsou zvýrazněné.

  3. Na kartě Účty úložiště klikněte na Přidat.

    Snímek obrazovky s dialogovým oknem účet úložiště Přidání je zvýrazněné.

  4. Na kartě Vytvořit účet úložiště:

    1. Vložte název svého účtu, mějte na paměti, že toto pole přijímá jenom číslice a malá písmena.

    2. Jako model nasazení vyberte Resource Manager.

    3. Jako druh účtu vyberte Úložiště (pro obecné účely v1).

    4. V případě výkonu vyberte Standard.*

    5. V případě replikace vyberte Místně redundantní úložiště (LRS).

    6. Zabezpečený přenos ponechte jako zakázaný.

    7. Vyberte nějaké předplatné.

    8. Zvolte skupinu prostředků nebo vytvořte novou. Skupina prostředků poskytuje způsob, jak monitorovat, řídit přístup, zřizovat a spravovat fakturaci pro kolekci prostředků Azure.

    9. Určete umístění vaší skupiny prostředků (pokud vytváříte novou skupinu prostředků). Umístění by ideálně bylo v oblasti, ve které by aplikace běžela. Některé prostředky Azure jsou dostupné jenom v určitých oblastech.

  5. Musíte potvrdit, že jste porozuměli podmínkám a ujednáním použitým pro tuto službu.

    Snímek obrazovky se stránkou vytvořit účet úložiště

  6. Jakmile kliknete na Vytvořit, budete muset počkat, až se služba vytvoří, může to chvíli trvat.

  7. Po vytvoření instance služby se na portálu zobrazí oznámení.

    Snímek obrazovky s oznámením o úspěšném nasazení

  8. V tomto okamžiku nemusíte postupovat podle zdroje, jednoduše přejděte na další kapitolu.

Kapitola 2 – Azure Portal: vytvoření služby Media Service

Pokud chcete službu Azure Media Service používat, musíte nakonfigurovat instanci služby, která se zpřístupní vaší aplikaci (kde vlastník účtu musí být správcem).

  1. Na webu Azure Portal klikněte v levém horním rohu na Vytvořit prostředek a vyhledejte Media Service stisknutím klávesy Enter. Požadovaný prostředek má aktuálně růžovou ikonu; kliknutím na tuto možnost zobrazíte novou stránku.

    Snímek obrazovky webu Azure Portal Je zvýrazněná možnost Media Services.

  2. Na nové stránce se zobrazí popis služby Media Service. V levém dolním rohu této výzvy klikněte na tlačítko Vytvořit a vytvořte přidružení k této službě.

    Snímek obrazovky webu Azure Portal Tlačítko Vytvořit je zvýrazněné.

  3. Po kliknutí na vytvořit panel se zobrazí, kde potřebujete zadat podrobnosti o nové službě Media Service:

    1. Vložte požadovaný název účtu pro tuto instanci služby.

    2. Vyberte nějaké předplatné.

    3. Zvolte skupinu prostředků nebo vytvořte novou. Skupina prostředků poskytuje způsob, jak monitorovat, řídit přístup, zřizovat a spravovat fakturaci pro kolekci prostředků Azure. Doporučujeme zachovat všechny služby Azure přidružené k jednomu projektu (například k těmto testovacím prostředím) v rámci společné skupiny prostředků).

    Pokud si chcete přečíst další informace o skupinách prostředků Azure, postupujte podle tohoto odkazu, jak spravovat skupiny prostředků Azure.

    1. Určete umístění vaší skupiny prostředků (pokud vytváříte novou skupinu prostředků). Umístění by ideálně bylo v oblasti, ve které by aplikace běžela. Některé prostředky Azure jsou dostupné jenom v určitých oblastech.

    2. V části Účet úložiště klikněte na oddíl Vyberte prosím... a potom klikněte na účet úložiště, který jste vytvořili v poslední kapitole.

    3. Budete také muset potvrdit, že jste porozuměli podmínkám a ujednáním použitým pro tuto službu.

    4. Klikněte na Vytvořit.

      Snímek obrazovky se stránkou Vytvořit účet Media Service

  4. Jakmile kliknete na Vytvořit, budete muset počkat, až se služba vytvoří, může to chvíli trvat.

  5. Po vytvoření instance služby se na portálu zobrazí oznámení.

    Snímek obrazovky s ikonou oznámení v nabídce portálu

  6. Kliknutím na oznámení můžete prozkoumat novou instanci služby.

    Snímek obrazovky s oznámením pro úspěšné nasazení

  7. Kliknutím na tlačítko Přejít k prostředku v oznámení můžete prozkoumat novou instanci služby.

  8. Na nové stránce služby Media Service v panelu vlevo klikněte na odkaz Prostředky , který je přibližně v polovině dolů.

  9. Na další stránce v levém horním rohu stránky klikněte na Nahrát.

    Snímek obrazovky se stránkou Prostředky Možnosti pro nahrávání a prostředky jsou zvýrazněné.

  10. Kliknutím na ikonu Složka procházejte soubory a vyberte první video 360, které chcete streamovat.

    Na tomto odkazu si můžete stáhnout ukázkové video.

    Snímek obrazovky se stránkou nahrát video asset

Upozorňující

Dlouhé názvy souborů můžou způsobit problém s kodérem: aby se zajistilo, že videa nemají problémy, zvažte zkrácení délky názvů videosouborů.

  1. Indikátor průběhu se po dokončení nahrávání videa zeleně změní na zelenou.

    Snímek obrazovky s panelem průběhu nahrávání video assetu

  2. Kliknutím na text výše (název_vaší služby – Prostředky) se vrátíte na stránku Prostředky .

  3. Všimněte si, že se video úspěšně nahrálo. Klikněte na ni.

    Snímek obrazovky se stránkou Prostředky Zvýrazní se video 1 tečka M P 4.

  4. Na stránce, na kterou jste přesměrováni, se zobrazí podrobné informace o videu. Pokud chcete, aby video bylo možné použít, musíte ho zakódovat kliknutím na tlačítko Kódování v levém horním rohu stránky.

    Snímek obrazovky se stránkou assetu Tlačítko kódování je zvýrazněné.

  5. Vpravo se zobrazí nový panel, kde budete moct nastavit možnosti kódování souboru. Nastavte následující vlastnosti (některé budou již nastaveny ve výchozím nastavení):

    1. Název kodéru médií Media Encoder Standard

    2. Kódování přednastavené funkce Content Adaptive Multiple Bitrate MP4

    3. Zpracování Video1.mp4 s názvem úlohy Media Encoder Standard

    4. Název výstupního multimediálního prostředku Video1.mp4 – kódování Media Encoder Standard

      Snímek obrazovky se stránkou kódování prostředku

  6. Klikněte na tlačítko Vytvořit.

  7. Všimnete si pruhu s přidanou úlohou Kódování, klikněte na tento panel a zobrazí se panel s průběhem kódování zobrazeným v něm.

    Snímek obrazovky s přidanou úlohou kódování s popiskem oznámení

    Snímek obrazovky se stránkou pro zpracování kodéru

  8. Počkejte na dokončení úlohy. Po dokončení panelu můžete panel zavřít pomocí symbolu X v pravém horním rohu tohoto panelu.

    Snímek obrazovky s indikátorem průběhu a dokončeným stavem

    Snímek obrazovky s horní nabídkou stránky pro zpracování kodéru médií

    Důležité

    Doba trvání závisí na velikosti souboru videa. Tento proces může nějakou dobu trvat.

  9. Teď, když je vytvořená zakódovaná verze videa, můžete ji publikovat, aby byla přístupná. Uděláte to tak, že kliknete na modrý odkaz Prostředky a vrátíte se na stránku assetů.

    Snímek obrazovky webu Azure Portal Odkaz na prostředky je zvýrazněný.

  10. Uvidíte své video společně s dalším, což je multi-bitová rychlost MP4 typu assetu.

    Snímek obrazovky s nabídkou prostředků Microsoft Azure

    Poznámka:

    Můžete si všimnout, že nový prostředek vedle počátečního videa je Neznámý a má 0 bajtů pro velikost, stačí aktualizovat okno, aby se aktualizovalo.

  11. Klikněte na tento nový prostředek.

    Snímek obrazovky se seznamem prostředků adresáře

  12. Zobrazí se podobný panel jako ten, který jste použili dříve, jenom to je jiný prostředek. Klikněte na tlačítko Publikovat umístěné v horní části stránky.

    Snímek obrazovky s horním řádkem nabídek Tlačítko Publikovat je zvýrazněné.

  13. Zobrazí se výzva k nastavení lokátoru, což je vstupní bod, na soubor/s ve vašich prostředcích. Pro váš scénář nastavte následující vlastnosti:

    1. Typ>lokátoru Progresivní.

    2. Datum a čas se pro vás nastaví od aktuálního data do času v budoucnosti (v tomto případě sto let). Ponechte ji tak, jak je, nebo ji změňte tak, aby vyhovovala.

    Poznámka:

    Další informace o lokátorech a o tom, co můžete zvolit, najdete v dokumentaci ke službě Azure Media Services.

  14. V dolní části tohoto panelu klikněte na tlačítko Přidat .

    Snímek obrazovky zobrazující výpisy adresářů s dialogovým oknem pro publikování prostředku

  15. Vaše video je teď publikované a dá se streamovat pomocí jeho koncového bodu. Dále na stránce je oddíl Soubory . Tady budou různé kódované verze videa. Vyberte nejvyšší možné rozlišení (na obrázku pod ním je soubor 1920x960) a zobrazí se panel vpravo. Tam najdete adresu URL pro stažení. Zkopírujte tento koncový bod , protože ho použijete později ve svém kódu.

    Snímek obrazovky s částí Soubory Microsoft Azure

    Snímek obrazovky se stránkou s informacemi o prostředku

    Poznámka:

    Můžete také stisknout tlačítko Přehrát a přehrát video a otestovat ho.

  16. Teď musíte nahrát druhé video, které budete používat v tomto cvičení. Postupujte podle výše uvedených kroků a opakujte stejný postup pro druhé video. Ujistěte se, že zkopírujete také druhý koncový bod . Pomocí následujícího odkazu si můžete stáhnout druhé video.

  17. Po publikování obou videí můžete přejít na další kapitolu.

Kapitola 3 – Nastavení projektu Unity

Následuje typická sada pro vývoj s hybridní realitou a jako taková je vhodná šablona pro jiné projekty.

  1. Otevřete Unity a klikněte na Nový.

    Snímek obrazovky s kartou Projekty Unity Tlačítko Nový je zvýrazněné.

  2. Teď budete muset zadat název projektu Unity, vložit MR_360VideoStreaming.. Ujistěte se, že je typ projektu nastavený na 3D. Nastavte umístění na místo, které je pro vás vhodné (nezapomeňte, že blíže ke kořenovým adresářům je lepší). Potom klikněte na Vytvořit projekt.

    Snímek obrazovky se stránkou Nové projekty Unity

  3. Při otevření Unity stojí za to zkontrolovat, jestli je výchozí editor skriptů nastavený na Visual Studio. Přejděte na Upravitpředvolby a pak v novém okně přejděte na Externí nástroje. Změňte editor externích skriptů na Visual Studio 2017. Zavřete okno Předvolby.

    Snímek obrazovky s nabídkou editoru externích skriptů Je vybraná sada Visual Studio 2017.

  4. Dále přejděte do Nastavení sestavení souborůa přepněte platformu na Univerzální platforma Windows kliknutím na tlačítko Přepnout platformu.

  5. Ujistěte se také, že:

    1. Cílové zařízení je nastavené na libovolné zařízení.

    2. Typ sestavení je nastavený na D3D.

    3. Sada SDK je nastavená na nejnovější nainstalovanou verzi.

    4. Verze sady Visual Studio je nastavená na nejnovější nainstalovanou verzi.

    5. Sestavení a spuštění je nastavené na místní počítač.

    6. Nedělejte si starosti s nastavením scén právě teď, protože je nastavíte později.

    7. Zbývající nastavení by teď měla zůstat ve výchozím nastavení.

      Snímek obrazovky nastavení sestavení Unity

  6. V okně Nastavení sestavení klikněte na tlačítko Nastavení přehrávače, otevře se související panel v prostoru, kde se nachází inspektor.

  7. Na tomto panelu je potřeba ověřit několik nastavení:

    1. Na kartě Další nastavení:

      1. Skriptovací verze modulu runtime by měla být stabilní (ekvivalent .NET 3.5).

      2. Back-end skriptování by měl být .NET.

      3. Úroveň kompatibility rozhraní API by měla být .NET 4.6.

        Snímek obrazovky zobrazující stránku Nastavení pro Univerzální platforma Windows

    2. Dále na panelu v nastavení XR (v části Nastavení publikování níže) zaškrtněte možnost Podpora virtuální reality a ujistěte se, že je přidaná sada SDK pro Windows Mixed Reality.

      Snímek obrazovky nastavení Unity X R

    3. Na kartě Nastavení publikování v části Možnosti zaškrtněte:

      • InternetClient

        Snímek obrazovky Možnosti Je zaškrtnuto internetového klienta.

  8. Po provedení těchto změn zavřete okno Nastavení sestavení.

  9. Uložte projekt uložení souboruprojektu.

Kapitola 4 – Import balíčku InsideOutSphere Unity

Důležité

Pokud chcete přeskočit komponentu Nastavení Unity v tomto kurzu a pokračovat přímo do kódu, můžete si stáhnout tento balíček .unitypackage, importovat ho do projektu jako vlastní balíček a pokračovat z kapitoly 5. Stále budete muset vytvořit projekt Unity.

Pro účely tohoto kurzu si budete muset stáhnout balíček assetu Unity s názvem InsideOutSphere.unitypackage.

Postup importu balíčku Unitypackage:

  1. Na řídicím panelu Unity před vámi klikněte na Prostředky v nabídce v horní části obrazovky a potom klikněte na Importovat balíček > vlastní balíček.

    Snímek obrazovky s nabídkou prostředků Otevře se nabídka importu balíčku. Je vybrán vlastní balíček.

  2. Pomocí nástroje pro výběr souboru vyberte balíček InsideOutSphere.unitypackage a klikněte na Otevřít. Zobrazí se vám seznam komponent pro tento prostředek. Kliknutím na Importovat potvrďte import.

    Snímek obrazovky Import Unity Package (Importovat balíček Unity)

  3. Po dokončení importu si všimnete, že do složky Assets byly přidány tři nové složky, Materiály, Modely a Prefabs. Tento typ struktury složek je typický pro projekt Unity.

    Snímek obrazovky se složkou assets

    1. Otevřete složku Models a uvidíte, že se model InsideOutSphere naimportoval.

    2. Ve složce Materials najdete materiál InsideOutSpheres lambert1 spolu s materiálem s názvem ButtonMaterial, který používá GazeButton, který brzy uvidíte.

    3. Složka Prefabs obsahuje prefab InsideOutSphere, který obsahuje model InsideOutSphere i GazeButton.

    4. Žádný kód není zahrnutý, kód napíšete podle tohoto kurzu.

  4. V hierarchii vyberte objekt hlavní kamery a aktualizujte následující součásti:

    1. Transformovat

      1. Pozice = X: 0, Y: 0, Z: 0.

      2. Otočení = X: 0, Y: 0, Z: 0.

      3. Měřítko X: 1, Y: 1, Z: 1.

    2. Fotoaparát

      1. Vymazat příznaky: plná barva.

      2. Výřezy roviny: Blízko: 0.1, Daleko: 6.

        Snímek obrazovky inspektoru

  5. Přejděte do složky Prefab a přetáhněte prefab InsideOutSphere do panelu hierarchie .

    Snímek obrazovky s nabídkou prefab složek a vývojářským prostředím

  6. Rozbalte objekt InsideOutSphere v hierarchii kliknutím na malou šipku vedle něj. Pod ním uvidíte podřízený objekt s názvem GazeButton. Použije se ke změně scén a videa.

    Snímek obrazovky s kartou hierarchie

  7. V okně inspektoru klikněte na komponentu Transformace InsideOutSphere, ujistěte se, že jsou nastaveny následující vlastnosti:

Transformace – pozice

X Y Z
0 0 0

Transformace – otočení

X Y Z
0 −50 0

Transformace – škálování

X Y Z
0 0 0

Snímek obrazovky inspektoru otevřeného pro Inside Out Sphere

  1. Klikněte na podřízený objekt GazeButton a nastavte jeho transformaci následujícím způsobem:

Transformace – pozice

X Y Z
3,6 1.3 0

Transformace – otočení

X Y Z
0 0 0

Transformace – škálování

X Y Z
1 1 1

Snímek obrazovky s otevřenou kartou scény

Kapitola 5 – Vytvoření třídy VideoController

Třída VideoController hostuje dva koncové body videa, které se použijí k streamování obsahu ze služby Azure Media Service.

Vytvoření této třídy:

  1. Klikněte pravým tlačítkem myši do složky Asset, která se nachází na panelu projektu , a klikněte na Vytvořit > složku. Pojmenujte složky Skripty.

    Snímek obrazovky s nabídkou složek assetů Nabídka Vytvořit je otevřená a je vybrána složka.

    Snímek obrazovky s kartou projektu Je vybrána složka Assets.

  2. Poklikáním otevřete složku Skripty .

  3. Klikněte pravým tlačítkem do složky a potom klikněte na Vytvořit > skript jazyka C#. Pojmenujte skript VideoController.

    Snímek obrazovky se souborem s názvem Video Controller

  4. Poklikáním na nový skript VideoController ho otevřete v sadě Visual Studio 2017.

    Snímek obrazovky s kódem pro soubor Video Controlleru

  5. Aktualizujte obory názvů v horní části souboru kódu následujícím způsobem:

    using System.Collections;
    using UnityEngine;
    using UnityEngine.SceneManagement;
    using UnityEngine.Video;
    
  6. Do třídy VideoController zadejte následující proměnné spolu s metodou Awake():

        /// <summary> 
        /// Provides Singleton-like behaviour to this class. 
        /// </summary> 
        public static VideoController instance; 
    
        /// <summary> 
        /// Reference to the Camera VideoPlayer Component.
        /// </summary> 
        private VideoPlayer videoPlayer; 
    
        /// <summary>
        /// Reference to the Camera AudioSource Component.
        /// </summary> 
        private AudioSource audioSource; 
    
        /// <summary> 
        /// Reference to the texture used to project the video streaming 
        /// </summary> 
        private RenderTexture videoStreamRenderTexture;
    
        /// <summary>
        /// Insert here the first video endpoint
        /// </summary>
        private string video1endpoint = "-- Insert video 1 Endpoint here --";
    
        /// <summary>
        /// Insert here the second video endpoint
        /// </summary>
        private string video2endpoint = "-- Insert video 2 Endpoint here --";
    
        /// <summary> 
        /// Reference to the Inside-Out Sphere. 
        /// </summary> 
        public GameObject sphere;
    
        void Awake()
        {
            instance = this;
        }
    
  7. Teď je čas zadat koncové body z videí služby Azure Media Service:

    1. První do proměnné video1endpointu.

    2. Druhá proměnná video2endpointu.

    Upozorňující

    Existuje známý problém s používáním https v Unity ve verzi 2017.4.1f1. Pokud videa při přehrávání obsahují chybu, zkuste místo toho použít http.

  8. Dále je potřeba upravit metodu Start( ). Tato metoda se aktivuje pokaždé, když uživatel přepne scénu (v důsledku toho přepne video) tak, že se podívá na tlačítko Pohled.

        // Use this for initialization
        void Start()
        {
            Application.runInBackground = true;
            StartCoroutine(PlayVideo());
        }
    
  9. Za metodou Start() vložte metodu IEnumerator PlayVideo(), která se použije k bezproblémovému spuštění videí (takže se nezobrazí žádné nepřekrývané zakrývky).

        private IEnumerator PlayVideo()
        {
            // create a new render texture to display the video 
            videoStreamRenderTexture = new RenderTexture(2160, 1440, 32, RenderTextureFormat.ARGB32);
    
            videoStreamRenderTexture.Create();
    
            // assign the render texture to the object material 
            Material sphereMaterial = sphere.GetComponent<Renderer>().sharedMaterial;
    
            //create a VideoPlayer component 
            videoPlayer = gameObject.AddComponent<VideoPlayer>();
    
            // Set the video to loop. 
            videoPlayer.isLooping = true;
    
            // Set the VideoPlayer component to play the video from the texture 
            videoPlayer.renderMode = VideoRenderMode.RenderTexture;
    
            videoPlayer.targetTexture = videoStreamRenderTexture;
    
            // Add AudioSource 
            audioSource = gameObject.AddComponent<AudioSource>();
    
            // Pause Audio play on Awake 
            audioSource.playOnAwake = true;
            audioSource.Pause();
    
            // Set Audio Output to AudioSource 
            videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
            videoPlayer.source = VideoSource.Url;
    
            // Assign the Audio from Video to AudioSource to be played 
            videoPlayer.EnableAudioTrack(0, true);
            videoPlayer.SetTargetAudioSource(0, audioSource);
    
            // Assign the video Url depending on the current scene 
            switch (SceneManager.GetActiveScene().name)
            {
                case "VideoScene1":
                    videoPlayer.url = video1endpoint;
                    break;
    
                case "VideoScene2":
                    videoPlayer.url = video2endpoint;
                    break;
    
                default:
                    break;
            }
    
            //Set video To Play then prepare Audio to prevent Buffering 
            videoPlayer.Prepare();
    
            while (!videoPlayer.isPrepared)
            {
                yield return null;
            }
    
            sphereMaterial.mainTexture = videoStreamRenderTexture;
    
            //Play Video 
            videoPlayer.Play();
    
            //Play Sound 
            audioSource.Play();
    
            while (videoPlayer.isPlaying)
            {
                yield return null;
            }
        }
    
  10. Poslední metodou , kterou pro tuto třídu potřebujete, je metoda ChangeScene(), která se použije k prohození mezi scénami.

        public void ChangeScene()
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().name == "VideoScene1" ? "VideoScene2" : "VideoScene1");
        }
    

    Tip

    Metoda ChangeScene() používá praktickou funkci jazyka C#, která se nazývá Podmíněný operátor. To umožňuje kontrolovat podmínky a pak hodnoty vrácené na základě výsledku kontroly, a to vše v rámci jednoho příkazu. Další informace o podmíněném operátoru najdete na tomto odkazu.

  11. Před návratem do Unity uložte změny v sadě Visual Studio.

  12. Zpět v Unity Editoru klikněte a přetáhněte třídu VideoController [from]{.underline} do objektu Hlavní kamera na panelu hierarchie.

  13. Klikněte na hlavní kameru a podívejte se na panel inspektoru. Všimněte si, že v rámci nově přidané komponenty Script je pole s prázdnou hodnotou. Toto je referenční pole, které cílí na veřejné proměnné v kódu.

  14. Přetáhněte objekt InsideOutSphere z panelu hierarchie do slotu Sphere, jak je znázorněno na obrázku níže.

    Snímek obrazovky s nabídkou hierarchie Je vybrána hlavní kamera.Snímek obrazovky s slotem Sphere

Kapitola 6 – Vytvoření třídy Gaze

Tato třída je zodpovědná za vytvoření raycastu, který se promítne z hlavní kamery, aby zjistil, na který objekt se uživatel dívá. V tomto případě bude raycast muset identifikovat, zda uživatel dívá na objekt GazeButton ve scéně a aktivuje chování.

Vytvoření této třídy:

  1. Přejděte do složky Scripts , kterou jste vytvořili dříve.

  2. Klikněte pravým tlačítkem na panel projektu a vytvořteskript jazyka C#. Pojmenujte skript Gaze.

  3. Poklikáním na nový skript Gaze ho otevřete v sadě Visual Studio 2017.

  4. Ujistěte se, že je v horní části skriptu následující obor názvů, a odeberte všechny ostatní:

    using UnityEngine;
    
  5. Pak do třídy Gaze přidejte následující proměnné:

        /// <summary> 
        /// Provides Singleton-like behaviour to this class. 
        /// </summary> 
        public static Gaze instance;
    
        /// <summary> 
        /// Provides a reference to the object the user is currently looking at. 
        /// </summary> 
        public GameObject FocusedGameObject { get; private set; }
    
        /// <summary> 
        /// Provides a reference to compare whether the user is still looking at 
        /// the same object (and has not looked away). 
        /// </summary> 
        private GameObject oldFocusedObject = null;
    
        /// <summary> 
        /// Max Ray Distance 
        /// </summary> 
        float gazeMaxDistance = 300;
    
        /// <summary> 
        /// Provides whether an object has been successfully hit by the raycast. 
        /// </summary> 
        public bool Hit { get; private set; }
    
  6. Kód pro metody Awake() a Start() je teď potřeba přidat.

        private void Awake()
        {
            // Set this class to behave similar to singleton 
            instance = this;
        }
    
        void Start()
        {
            FocusedGameObject = null;
        }
    
  7. Do metody Update() přidejte následující kód pro projekt Raycast a detekujte cílovou akci:

        void Update()
        {
            // Set the old focused gameobject. 
            oldFocusedObject = FocusedGameObject;
            RaycastHit hitInfo;
    
            // Initialise Raycasting. 
            Hit = Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hitInfo, gazeMaxDistance);
    
            // Check whether raycast has hit. 
            if (Hit == true)
            {
                // Check whether the hit has a collider. 
                if (hitInfo.collider != null)
                {
                    // Set the focused object with what the user just looked at. 
                    FocusedGameObject = hitInfo.collider.gameObject;
                }
                else
                {
                    // Object looked on is not valid, set focused gameobject to null. 
                    FocusedGameObject = null;
                }
            }
            else
            {
                // No object looked upon, set focused gameobject to null.
                FocusedGameObject = null;
            }
    
            // Check whether the previous focused object is this same 
            // object (so to stop spamming of function). 
            if (FocusedGameObject != oldFocusedObject)
            {
                // Compare whether the new Focused Object has the desired tag we set previously. 
                if (FocusedGameObject.CompareTag("GazeButton"))
                {
                    FocusedGameObject.SetActive(false);
                    VideoController.instance.ChangeScene();
                }
            }
        }
    
  8. Před návratem do Unity uložte změny v sadě Visual Studio.

  9. Klikněte a přetáhněte třídu Gaze ze složky Scripts do objektu Hlavní kamera na panelu hierarchie .

Kapitola 7 – Nastavení dvou scén Unity

Účelem této kapitoly je nastavit dvě scény, z nichž každý je hostitelem videa pro streamování. Již vytvořenou scénu duplikujete, takže ji nebudete muset znovu nastavit, i když pak upravíte novou scénu, aby objekt GazeButton byl v jiném umístění a měl jiný vzhled. Tady se dozvíte, jak se mezi scénami měnit.

  1. Uděláte to tak, že přejdete do > složky Uložit scénu jako.... Zobrazí se okno pro uložení. Klikněte na tlačítko Nová složka .

    Kapitola 7 – Nastavení dvou scén Unity

  2. Pojmenujte složku Scény.

  3. Okno Uložit scénu bude stále otevřené. Otevřete nově vytvořenou složku Scény .

  4. Do textového pole Název souboru zadejte VideoScene1 a stiskněte klávesu Uložit.

  5. Zpátky v Unity otevřete složku Scény a klikněte levým tlačítkem na soubor VideoScene1 . Použijte klávesnici a stiskněte Ctrl+D , abyste tuto scénu duplikovat

    Tip

    Příkaz Duplikovat lze provést také tak, že přejdete na příkaz Upravit > duplikát.

  6. Unity automaticky zvýší číslo názvů scén, ale přesto zkontroluje, jestli odpovídá dříve vloženému kódu.

    Měli byste mít VideoScene1 a VideoScene2.

  7. Se dvěma scénami přejděte do Nastavení sestavení souborů>. V otevřeném okně Nastavení sestavení přetáhněte scény do části Scény v části Sestavení.

    Snímek obrazovky s oknem Nastavení sestavení

    Tip

    Obě scény můžete vybrat ze složky Scény tak, že podržíte klávesu Ctrl a potom na každou scénu kliknete levým tlačítkem a nakonec přetáhnete obě scény.

  8. Zavřete okno Nastavení sestavení a poklikejte na VideoScene2.

  9. Při otevření druhé scény klikněte na podřízený objekt GazeButton InsideOutSphere a nastavte jeho transformaci následujícím způsobem:

Transformace – pozice

X Y Z
0 1.3 3,6

Transformace – otočení

X Y Z
0 0 0

Transformace – škálování

X Y Z
1 1 1
  1. Když je dítě GazeButton stále vybrané, podívejte se na inspektor a na filtr mesh. Klikněte na malý cíl vedle referenčního pole Sítě :

    Snímek obrazovky inspektoru pro tlačítko Pohled

  2. Zobrazí se automaticky otevírané okno Select Mesh. Poklikejte na síť datové krychle ze seznamu prostředků.

    Snímek obrazovky s místním oknem Vybrat síť

  3. Filtr mesh se aktualizuje a teď bude datová krychle. Nyní klikněte na ikonu ozubeného kola vedle sbalovače Sphere a klepněte na tlačítko Odebrat komponentu, chcete-li odstranit sbajovač z tohoto objektu.

    Snímek obrazovky s nabídkou Collider Sphere Je vybrána možnost Odebrat komponentu.

  4. Pokud je tlačítko GazeButton stále vybrané, klikněte na tlačítko Přidat součást v dolní části inspektoru. Do vyhledávacího pole zadáte pole a sbajovač pole bude možnost – kliknutím na toto pole přidáte do objektu GazeButton sbalovač boxu.

    Snímek obrazovky s vyhledávacím polem Přidat součást

  5. GazeButton je nyní částečně aktualizován, aby vypadal jinak, ale nyní vytvoříte nový materiál, aby vypadal úplně jinak a je jednodušší rozpoznat jako jiný objekt, než objekt v první scéně.

  6. V panelu projektu přejděte do složky Materiály. Duplikujte materiál ButtonMaterial (stiskněte ctrl + D na klávesnici nebo klikněte levým tlačítkem myši na Materiál a potom v nabídce Upravit soubor vyberte Možnost Duplikovat).

    Snímek obrazovky se složkou Materiály na kartě projektuSnímek obrazovky s nabídkou pro úpravy s vybranou duplicitní možností

  7. Vyberte nový materiál ButtonMaterial Material (zde pojmenovaný ButtonMaterial 1) a v inspektoru klikněte na barevné okno Albedo. Zobrazí se automaticky otevírané okno, kde můžete vybrat jinou barvu (podle toho, co se vám líbí), a pak místní okno zavřít. Materiál bude svou vlastní instancí a liší se od originálu.

    Snímek obrazovky s místní nabídkou výběru barev

  8. Přetáhněte nový materiál na dítě GazeButton , aby se nyní zcela aktualizoval jeho vzhled, aby byl snadno rozlišitelný od prvního tlačítka scény.

    Snímek obrazovky s kartou scény editoru projektů

  9. V tomto okamžiku můžete projekt otestovat v Editoru před sestavením projektu UPW.

    • Stiskněte tlačítko Přehrát v Editoru a používejte náhlavní soupravu.

      Snímek obrazovky znázorňující tlačítka přehrát, pozastavit a přeskočit Tlačítko přehrát je zvýrazněné.

  10. Podívejte se na dva objekty GazeButton a přepněte mezi prvním a druhým videem.

Kapitola 8 – Sestavení řešení pro UPW

Jakmile ověříte, že editor neobsahuje žádné chyby, jste připraveni k sestavení.

Sestavení:

  1. Kliknutím na Uložit soubor > uložte aktuální scénu.

  2. Zaškrtněte políčko s názvem Projekty Unity C# (to je důležité, protože vám umožní upravovat třídy po dokončení sestavení).

  3. Přejděte na Nastavení sestavení souboru > a klikněte na Sestavit.

  4. Zobrazí se výzva k výběru složky, do které chcete řešení sestavit.

  5. Vytvořte složku BUILDS a v této složce vytvořte jinou složku s odpovídajícím názvem podle vašeho výběru.

  6. Klikněte na novou složku a potom klikněte na Vybrat složku, abyste ji mohli vybrat, aby se sestavení zahájilo v daném umístění.

    Snímek obrazovky se zvýrazněnou složkou BUILDSSnímek obrazovky se zvýrazněnou složkou Video Streaming Build

  7. Jakmile Unity dokončí sestavování (může to nějakou dobu trvat), otevře se okno Průzkumník souborů v umístění sestavení.

Kapitola 9 – Nasazení na místním počítači

Po dokončení sestavení se v umístění sestavení zobrazí okno Průzkumník souborů. Otevřete složku, kterou jste pojmenovali a vytvořili, a potom poklikejte na soubor řešení (.sln) v této složce a otevřete řešení pomocí sady Visual Studio 2017.

Jedinou věcí, kterou zbývá udělat, je nasazení aplikace do počítače (nebo místního počítače).

Postup nasazení na místní počítač:

  1. V sadě Visual Studio 2017 otevřete soubor řešení, který byl právě vytvořen.

  2. Na platformě řešení vyberte x86, místní počítač.

  3. V konfiguraci řešení vyberte Ladit.

    Snímek obrazovky s nabídkou Konfigurace řešení

  4. Teď budete muset obnovit všechny balíčky do vašeho řešení. Klikněte pravým tlačítkem na řešení a klikněte na Obnovit balíčky NuGet pro řešení...

    Poznámka:

    To se provádí, protože balíčky, na které Sestavili Unity, je potřeba cílit, aby fungovaly s odkazy na místní počítače.

  5. Přejděte do nabídky Sestavení a kliknutím na Nasadit řešení aplikaci načtěte do počítače bokem. Visual Studio nejprve sestaví a pak nasadí vaši aplikaci.

  6. Vaše aplikace by se teď měla zobrazit v seznamu nainstalovaných aplikací připravených ke spuštění.

    Snímek obrazovky se seznamem nainstalovaných aplikací

Když spustíte aplikaci Hybridní realita, budete v modelu InsideOutSphere , který jste použili v aplikaci. Tato sféra bude tam, kam se video bude streamovat a poskytuje 360stupňový pohled na příchozí video (které bylo filmováno pro tento druh perspektivy). Nepřekvapujte, pokud načtení videa trvá několik sekund, vaše aplikace podléhá vaší dostupné rychlosti internetu, protože video je potřeba načíst a pak stáhnout, takže se do aplikace streamuje. Až budete připraveni, změňte scény a otevřete své druhé video tím, že se podíváte na červenou kouli! Pak se můžete vrátit zpět pomocí modré krychle ve druhé scéně!

Hotová aplikace Azure Media Service

Blahopřejeme, vytvořili jste aplikaci hybridní reality, která využívá službu Azure Media Service ke streamování 360 videí.

Snímek obrazovky s ukázkovou aplikací hybridní reality

Snímek obrazovky s příkladem aplikace hybridní reality

Bonusová cvičení

Cvičení 1

V rámci tohoto kurzu je zcela možné použít pouze jednu scénu ke změně videí. Experimentujte s aplikací a udělejte ji v jediné scéně! Možná dokonce přidejte další video do mixu.

Cvičení 2

Experimentujte s Azure a Unity a pokuste se implementovat schopnost aplikace automaticky vybrat video s jinou velikostí souboru v závislosti na síle připojení k internetu.