Realidad mixta y Azure (306): Vídeo en streamingMR and Azure 306: Streaming video


Nota

Los tutoriales de Mixed Reality Academy se han diseñado teniendo en cuenta HoloLens (1.ª generación) y los cascos envolventes de realidad mixta.The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. Por lo tanto, creemos que es importante conservar estos tutoriales para los desarrolladores que sigan buscando instrucciones sobre el desarrollo para esos dispositivos.As such, we feel it is important to leave these tutorials in place for developers who are still looking for guidance in developing for those devices. Estos tutoriales no se actualizarán con los conjuntos de herramientas o las interacciones más recientes que se usan para HoloLens 2.These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. Se mantendrán para que sigan funcionando en los dispositivos compatibles.They will be maintained to continue working on the supported devices. Habrá una nueva serie de tutoriales que se publicarán en el futuro que mostrarán cómo desarrollar para HoloLens 2.There will be a new series of tutorials that will be posted in the future that will demonstrate how to develop for HoloLens 2. Este aviso se actualizará con un vínculo a esos tutoriales cuando se publiquen.This notice will be updated with a link to those tutorials when they are posted.


producto final: Inicio  final del producto-Iniciofinal product -start final product -start

En este curso aprenderá a conectar su Azure Media Services a una experiencia de Windows Mixed Reality VR para permitir la reproducción de vídeo a través de streaming de 360 Degree en auriculares de gran rendimiento.In this course you will learn how connect your Azure Media Services to a Windows Mixed Reality VR experience to allow streaming 360 degree video playback on immersive headsets.

Azure Media Services son una colección de servicios que ofrece servicios de streaming de vídeo con calidad de difusión para llegar a audiencias de mayor tamaño en los dispositivos móviles más populares de hoy en día.Azure Media Services are a collection of services that gives you broadcast-quality video streaming services to reach larger audiences on today’s most popular mobile devices. Para obtener más información, visite la página Azure Media Services.For more information, visit the Azure Media Services page.

Una vez finalizado este curso, tendrá una aplicación de auriculares envolvente de realidad mixta, que podrá hacer lo siguiente:Having completed this course, you will have a mixed reality immersive headset application, which will be able to do the following:

  1. Recupere un vídeo de 360 grados de un Azure Storage a través de Azure Media Services.Retrieve a 360 degree video from an Azure Storage, through the Azure Media Service.

  2. Muestra el vídeo de 360 Degree recuperado dentro de una escena de Unity.Display the retrieved 360 degree video within a Unity scene.

  3. Desplazarse entre dos escenas, con dos vídeos diferentes.Navigate between two scenes, with two different videos.

En su aplicación, depende del modo en que va a integrar los resultados con el diseño.In your application, it is up to you as to how you will integrate the results with your design. Este curso está diseñado para enseñarle a integrar un servicio de Azure con su proyecto de Unity.This course is designed to teach you how to integrate an Azure Service with your Unity Project. Es su trabajo usar el conocimiento que obtiene de este curso para mejorar su aplicación de realidad mixta.It is your job to use the knowledge you gain from this course to enhance your mixed reality application.

Compatibilidad con dispositivosDevice support

CursoCourse HoloLensHoloLens Cascos envolventesImmersive headsets
Realidad mixta y Azure (306): Vídeo en streamingMR and Azure 306: Streaming video ✔️✔️

Requisitos previosPrerequisites

Nota

Este tutorial está diseñado para desarrolladores que tienen experiencia básica con Unity y C#.This tutorial is designed for developers who have basic experience with Unity and C#. Tenga en cuenta también que los requisitos previos y las instrucciones escritas dentro de este documento representan lo que se ha probado y comprobado en el momento de la escritura (2018 de mayo).Please also be aware that the prerequisites and written instructions within this document represent what has been tested and verified at the time of writing (May 2018). Puede usar el software más reciente, como se indica en el artículo instalar las herramientas, aunque no se debe suponer que la información de este curso se ajusta perfectamente a lo que encontrará en el software más reciente que el que se indica a continuación.You are free to use the latest software, as listed within the install the tools article, though it should not be assumed that the information in this course will perfectly match what you'll find in newer software than what's listed below.

Se recomienda el siguiente hardware y software para este curso:We recommend the following hardware and software for this course:

Antes de comenzarBefore you start

  1. Para evitar que se produzcan problemas al compilar este proyecto, se recomienda encarecidamente que cree el proyecto mencionado en este tutorial en una carpeta raíz o cerca de la raíz (las rutas de acceso de carpeta largas pueden producir problemas en tiempo de compilación).To avoid encountering issues building this project, it is strongly suggested that you create the project mentioned in this tutorial in a root or near-root folder (long folder paths can cause issues at build-time).

  2. Configure y pruebe sus auriculares de la realidad mixta.Set up and test your Mixed Reality Immersive Headset.

    Nota

    No necesitará controladores de movimiento para este curso.You will not require Motion Controllers for this course. Si necesita ayuda para configurar el casco envolvente, haga clic en el vínculo para configurar Windows Mixed Reality.If you need support setting up the Immersive Headset, please click link on how to set up Windows Mixed Reality.

Capítulo 1: Azure Portal: creación de la cuenta de Azure StorageChapter 1 - The Azure Portal: creating the Azure Storage Account

Para usar el servicio Azure Storage, debe crear y configurar una cuenta de almacenamiento en el Azure portal.To use the Azure Storage Service, you will need to create and configure a Storage Account in the Azure portal.

  1. Inicie sesión en Azure Portal.Log in to the Azure Portal.

    Nota

    Si aún no tiene una cuenta de Azure, tendrá que crear una.If you do not already have an Azure account, you will need to create one. Si sigue este tutorial en una situación de aula o de laboratorio, pregunte al instructor o a uno de los Proctors para obtener ayuda para configurar la nueva cuenta.If you are following this tutorial in a classroom or lab situation, ask your instructor or one of the proctors for help setting up your new account.

  2. Una vez que haya iniciado sesión, haga clic en cuentas de almacenamiento en el menú de la izquierda.Once you are logged in, click on Storage accounts in the left menu.

    Configuración de Azure Storage cuenta

  3. En la pestaña cuentas de almacenamiento , haga clic en Agregar.On the Storage Accounts tab, click on Add.

    Configuración de Azure Storage cuenta

  4. En la pestaña crear cuenta de almacenamiento :In the Create storage account tab:

    1. Inserte un nombre para la cuenta. tenga en cuenta que este campo solo acepta números y letras minúsculas.Insert a Name for your account, be aware this field only accepts numbers, and lowercase letters.

    2. En modelo de implementación, seleccione Resource Manager.For Deployment model, select Resource manager.

    3. En tipo de cuenta, seleccione almacenamiento (uso general V1).For Account kind, select Storage (general purpose v1).

    4. En rendimiento, seleccione **estándar *.**For Performance, select Standard*.

    5. En replicación , seleccione almacenamiento con redundancia local (LRS).For Replication select Locally-redundant storage (LRS).

    6. Deje la transferencia segura requerida como deshabilitada.Leave Secure transfer required as Disabled.

    7. Seleccione una opción en Suscripción.Select a Subscription.

    8. Elija un grupo de recursos o cree uno nuevo.Choose a Resource group or create a new one. Un grupo de recursos proporciona una manera de supervisar, controlar el acceso, aprovisionar y administrar la facturación de una colección de recursos de Azure.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets.

    9. Determine la Ubicación del grupo de recursos (si va a crear un nuevo grupo de recursos).Determine the Location for your resource group (if you are creating a new Resource Group). Idealmente, la ubicación estará en la región donde se ejecutará la aplicación.The location would ideally be in the region where the application would run. Algunos recursos de Azure solo están disponibles en determinadas regiones.Some Azure assets are only available in certain regions.

  5. Tendrá que confirmar que ha comprendido los términos y condiciones que se aplican a este servicio.You will need to confirm that you have understood the Terms and Conditions applied to this Service.

    Configuración de Azure Storage cuenta

  6. Una vez que haya hecho clic en crear, tendrá que esperar a que se cree el servicio, lo que puede tardar un minuto.Once you have clicked on Create, you will have to wait for the service to be created, this might take a minute.

  7. Una vez que se crea la instancia de servicio, aparecerá una notificación en el portal.A notification will appear in the portal once the Service instance is created.

    Configuración de Azure Storage cuenta

  8. En este momento no es necesario seguir el recurso, simplemente vaya al siguiente capítulo.At this point you do not need to follow the resource, simply move to the next Chapter.

Capítulo 2: Azure Portal: creación del servicio multimediaChapter 2 - The Azure Portal: creating the Media Service

Para usar Azure Media Services, debe configurar una instancia del servicio para que esté disponible para la aplicación (donde el titular de la cuenta debe ser un administrador).To use the Azure Media Service, you will need to configure an instance of the service to be made available to your application (wherein the account holder needs to be an Admin).

  1. En Azure portal, haga clic en crear un recurso en la esquina superior izquierda y busque Media Service, Presione entrar.In the Azure Portal, click on Create a resource in the top left corner, and search for Media Service, press Enter. El recurso que desea actualmente tiene un icono de color rosa; Haga clic en esta para mostrar una nueva página.The resource you want currently has a pink icon; click this, to show a new page.

    Azure Portal

  2. La nueva página proporcionará una descripción del servicio multimedia.The new page will provide a description of the Media Service. En la parte inferior izquierda de este mensaje, haga clic en el botón crear para crear una asociación con este servicio.At the bottom left of this prompt, click the Create button, to create an association with this service.

    Azure Portal

  3. Una vez que haya hecho clic en crear un panel, aparecerá donde debe proporcionar algunos detalles sobre el nuevo servicio multimedia:Once you have clicked on Create a panel will appear where you need to provide some details about your new Media Service:

    1. Inserte el nombre de cuenta que desee para esta instancia de servicio.Insert your desired Account Name for this service instance.

    2. Seleccione una opción en Suscripción.Select a Subscription.

    3. Elija un grupo de recursos o cree uno nuevo.Choose a Resource Group or create a new one. Un grupo de recursos proporciona una manera de supervisar, controlar el acceso, aprovisionar y administrar la facturación de una colección de recursos de Azure.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. Se recomienda mantener todos los servicios de Azure asociados a un único proyecto (por ejemplo, estos laboratorios) en un grupo de recursos común).It is recommended to keep all the Azure services associated with a single project (e.g. such as these labs) under a common resource group).

    Si desea leer más sobre los grupos de recursos de Azure, siga este vínculo sobre cómo administrar grupos de recursos de Azure.If you wish to read more about Azure Resource Groups, please follow this link on how to manage Azure Resource Groups.

    1. Determine la Ubicación del grupo de recursos (si va a crear un nuevo grupo de recursos).Determine the Location for your resource group (if you are creating a new Resource Group). Idealmente, la ubicación estará en la región donde se ejecutará la aplicación.The location would ideally be in the region where the application would run. Algunos recursos de Azure solo están disponibles en determinadas regiones.Some Azure assets are only available in certain regions.

    2. En la sección cuenta de almacenamiento , haga clic en la sección Seleccione.. . y luego haga clic en la cuenta de almacenamiento que creó en el último capítulo.For the Storage Account section, click the Please select... section, then click the Storage Account you created in the last Chapter.

    3. También deberá confirmar que ha comprendido los términos y condiciones que se aplican a este servicio.You will also need to confirm that you have understood the Terms and Conditions applied to this Service.

    4. Haga clic en Crear.Click Create.

      Azure Portal

  4. Una vez que haya hecho clic en crear, tendrá que esperar a que se cree el servicio, lo que puede tardar un minuto.Once you have clicked on Create, you will have to wait for the service to be created, this might take a minute.

  5. Una vez que se crea la instancia de servicio, aparecerá una notificación en el portal.A notification will appear in the portal once the Service instance is created.

    Azure Portal

  6. Haga clic en la notificación para explorar la nueva instancia de servicio.Click on the notification to explore your new Service instance.

    Azure Portal

  7. Haga clic en el botón ir a recurso de la notificación para explorar la nueva instancia de servicio.Click the Go to resource button in the notification to explore your new Service instance.

  8. Dentro de la página nuevo servicio multimedia, dentro del panel de la izquierda, haga clic en el vínculo activos , que se encuentra cerca de la mitad.Within the new Media service page, within the panel on the left, click on the Assets link, which is about halfway down.

  9. En la página siguiente, en la esquina superior izquierda de la página, haga clic en cargar.On the next page, in the top-left corner of the page, click Upload.

    Azure Portal

  10. Haga clic en el icono de la carpeta para examinar los archivos y seleccione el primer vídeo 360 que le gustaría transmitir.Click on the Folder icon to browse your files and select the first 360 Video that you would like to stream.

    Puede seguir este vínculo para descargar un vídeo de ejemplo.You can follow this link to download a sample video.

    Azure Portal

Advertencia

Los nombres de archivo largos pueden producir un problema con el codificador: para asegurarse de que los vídeos no tienen problemas, considere la posibilidad de acortar la longitud de los nombres de archivo de vídeo.Long filenames may cause an issue with the encoder: so to ensure videos do not have issues, consider shortening the length of your video file names.

  1. La barra de progreso se volverá verde cuando el vídeo termine de cargarse.The progress bar will turn green when the video has finished uploading.

    Azure Portal

  2. Haga clic en el texto anterior (yourservicename-assets) para volver a la página activos .Click on the text above (yourservicename - Assets) to return to the Assets page.

  3. Observará que el vídeo se ha cargado correctamente.You will notice that your video has been successfully uploaded. Haga clic en él.Click on it.

    Azure Portal

  4. La página a la que se redirige le mostrará información detallada acerca del vídeo.The page you are redirected to will show you detailed information about your video. Para poder usar el vídeo debe codificarlo, haga clic en el botón codificar situado en la parte superior izquierda de la página.To be able to use your video you need to encode it, by clicking the Encode button at the top-left of the page.

    Azure Portal

  5. Aparecerá un nuevo panel a la derecha, donde podrá establecer las opciones de codificación para el archivo.A new panel will appear to the right, where you will be able to set encoding options for your file. Establezca las siguientes propiedades (algunas ya estarán establecidas de forma predeterminada):Set the following properties (some will be already set by default):

    1. Nombre del codificador multimedia Media Encoder StandardMedia encoder name Media Encoder Standard

    2. Contenido preestablecido de codificación de varias velocidades de bits adaptables MP4Encoding preset Content Adaptive Multiple Bitrate MP4

    3. Nombre del trabajo Media Encoder Standard procesamiento de Video1.mp4Job name Media Encoder Standard processing of Video1.mp4

    4. Nombre del recurso multimedia de salidaVideo1.mp4--Media Encoder Standard codificadoOutput media asset name Video1.mp4 -- Media Encoder Standard encoded

      Azure Portal

  6. Haga clic en el botón Crear.Click the Create button.

  7. Observará que se ha agregado una barra con el trabajo de codificación, haga clic en esa barra y aparecerá un panel con el progreso de la codificación que se muestra en ella.You will notice a bar with Encoding job added, click on that bar and a panel will appear with the Encoding progress displayed in it.

    Azure Portal

    Azure Portal

  8. Espere a que se complete el trabajo.Wait for the Job to be completed. Una vez hecho esto, no dude en cerrar el panel con la "X" en la parte superior derecha de ese panel.Once it is done, feel free to close the panel with the 'X' at the top right of that panel.

    Azure Portal

    Azure Portal

    Importante

    El tiempo que tarda, depende del tamaño de archivo del vídeo.The time this takes, depends on the file size of your video. Este proceso puede tardar bastante tiempo.This process can take quite some time.

  9. Ahora que se ha creado la versión codificada del vídeo, puede publicarla para que sea accesible.Now that the encoded version of the video has been created, you can publish it to make it accessible. Para ello, haga clic en los recursos de vínculo azul para volver a la página activos.To do so, click the blue link Assets to go back to the assets page.

    Azure Portal

  10. Verá el vídeo junto con otro, que es el tipo de recurso MP4 de velocidad de bits múltiple.You will see your video along with another, which is of Asset Type Multi-Bitrate MP4.

    Azure Portal

    Nota

    Es posible que observe que el nuevo recurso, junto con el vídeo inicial, es desconocido y tiene ' 0 ' bytes para su tamaño, solo tiene que actualizar la ventana para que se actualice.You may notice that the new asset, alongside your initial video, is Unknown, and has '0' bytes for it's Size, just refresh your window for it to update.

  11. Haga clic en este nuevo recurso.Click this new asset.

    Azure Portal

  12. Verá un panel similar al que usó antes, solo que se trata de un recurso diferente.You will see a similar panel to the one you used before, just this is a different asset. Haga clic en el botón publicar situado en el centro superior de la página.Click the Publish button located at the top-center of the page.

    Azure Portal

  13. Se le pedirá que establezca un localizador, que es el punto de entrada, en archivo/s en los recursos.You will be prompted to set a Locator, which is the entry point, to file/s in your Assets. En el escenario, establezca las siguientes propiedades:For your scenario set the following properties:

    1. Tipo de localizador > Progresiva.Locator type > Progressive.

    2. La fecha y la hora se establecerán automáticamente, desde la fecha actual, hasta una hora futura (100 años en este caso).The date and time will be set for you, from your current date, to a time in the future (one hundred years in this case). Deje tal cual o cámbielo para adaptarse.Leave as is or change it to suit.

    Nota

    Para obtener más información acerca de los localizadores y lo que puede elegir, visite la documentación de Azure Media Services.For more information about Locators, and what you can choose, visit the Azure Media Services Documentation.

  14. En la parte inferior de ese panel, haga clic en el botón Agregar .At the bottom of that panel, click on the Add button.

    Azure Portal

  15. El vídeo ya está publicado y se puede transmitir mediante su punto de conexión.Your video is now published and can be streamed by using its endpoint. Más abajo, la página es una sección de archivos .Further down the page is a Files section. Aquí es donde serán las distintas versiones codificadas del vídeo.This is where the different encoded versions of your video will be. Seleccione la resolución más alta posible (en la imagen siguiente es el archivo 1920x960) y, a continuación, aparecerá un panel a la derecha.Select the highest possible resolution one (in the image below it is the 1920x960 file), and then a panel to the right will appear. Allí encontrará una dirección URL de descarga.There you will find a Download URL. Copie este punto de conexión , ya que lo usará más adelante en el código.Copy this Endpoint as you will use it later in your code.

    Azure Portal

    Azure Portal

    Nota

    También puede hacer clic en el botón reproducir para reproducir el vídeo y probarlo.You can also press the Play button to play your video and test it.

  16. Ahora debe cargar el segundo vídeo que usará en este laboratorio.You now need to upload the second video that you will use in this Lab. Siga los pasos anteriores y repita el mismo proceso para el segundo vídeo.Follow the steps above, repeating the same process for the second video. Asegúrese de copiar también el segundo punto de conexión .Ensure you copy the second Endpoint also. Use el siguiente vínculo para descargar un segundo vídeo.Use the following link to download a second video.

  17. Una vez publicados ambos vídeos, está listo para pasar al siguiente capítulo.Once both videos have been published, you are ready to move to the next Chapter.

Capítulo 3: configuración del proyecto de UnityChapter 3 - Setting up the Unity Project

Lo siguiente es una configuración típica para desarrollar con la realidad mixta y, como tal, es una buena plantilla para otros proyectos.The following is a typical set up for developing with the Mixed Reality, and as such, is a good template for other projects.

  1. Abra Unity y haga clic en nuevo.Open Unity and click New.

    Azure Portal

  2. Ahora tendrá que proporcionar un nombre de proyecto de Unity, insertar Mr _ 360VideoStreaming..You will now need to provide a Unity Project name, insert MR_360VideoStreaming.. Asegúrese de que el tipo de proyecto está establecido en 3D.Make sure the project type is set to 3D. Establezca la ubicación en algún lugar adecuado para usted (Recuerde que, más cerca de los directorios raíz es mejor).Set the Location to somewhere appropriate for you (remember, closer to root directories is better). A continuación, haga clic en crear proyecto.Then, click Create project.

    Azure Portal

  3. Con Unity abierto, merece la pena comprobar que el Editor de scripts predeterminado está establecido en Visual Studio.With Unity open, it is worth checking the default Script Editor is set to Visual Studio. Vaya a Editar preferencias y, a continuación, en la nueva ventana, vaya a herramientas externas.Go to Edit Preferences and then from the new window, navigate to External Tools. Cambie el Editor de script externo a Visual Studio 2017.Change External Script Editor to Visual Studio 2017. Cierre la ventana preferencias .Close the Preferences window.

    Azure Portal

  4. A continuación, vaya a configuración de compilación de archivos y cambie la plataforma a plataforma universal de Windows, haciendo clic en el botón cambiar plataforma .Next, go to File Build Settings and switch the platform to Universal Windows Platform, by clicking on the Switch Platform button.

  5. Asegúrese también de que:Also make sure that:

    1. El dispositivo de destino se establece en cualquier dispositivo.Target Device is set to Any Device.

    2. El tipo de compilación se establece en D3D.Build Type is set to D3D.

    3. SDK está establecido en instalado más recientemente.SDK is set to Latest installed.

    4. La versión de Visual Studio está establecida en instalación más reciente.Visual Studio Version is set to Latest installed.

    5. Compilar y ejecutar está establecido en equipo local.Build and Run is set to Local Machine.

    6. No se preocupe por la configuración de escenas en este momento, ya que las configurará más adelante.Do not worry about setting up Scenes right now, as you will set these up later.

    7. El resto de la configuración debe dejarse como predeterminada por ahora.The remaining settings should be left as default for now.

      Configuración del proyecto de Unity

  6. En la ventana configuración de compilación , haga clic en el botón Configuración del reproductor ; se abrirá el panel relacionado en el espacio donde se encuentra el Inspector .In the Build Settings window, click on the Player Settings button, this will open the related panel in the space where the Inspector is located.

  7. En este panel, deben comprobarse algunas opciones de configuración:In this panel, a few settings need to be verified:

    1. En la pestaña otros valores :In the Other Settings tab:

      1. La versión de scripting en tiempo de ejecución debe ser estable (.net 3,5 equivalente).Scripting Runtime Version should be Stable (.NET 3.5 Equivalent).

      2. El back-end de scripting debe ser .net.Scripting Backend should be .NET.

      3. El nivel de compatibilidad de API debe ser .net 4,6.API Compatibility Level should be .NET 4.6.

        Configuración del proyecto de Unity

    2. Más abajo en el panel, en la configuración de XR (se encuentra debajo de configuración de publicación), tick Virtual Reality compatible, asegúrese de que se agrega el SDK de Windows Mixed Reality .Further down the panel, in XR Settings (found below Publish Settings), tick Virtual Reality Supported, make sure the Windows Mixed Reality SDK is added.

      Configuración del proyecto de Unity

    3. En la pestaña configuración de publicación , en capacidades, seleccione:Within the Publishing Settings tab, under Capabilities, check:

      • InternetClientInternetClient

        Configuración del proyecto de Unity

  8. Una vez realizados los cambios, cierre la ventana configuración de compilación .Once you have made those changes, close the Build Settings window.

  9. Guarde el proyecto *archivo * guardar proyecto * *.Save your Project *File *Save Project**.

Capítulo 4: importación del paquete Unity de InsideOutSphereChapter 4 - Importing the InsideOutSphere Unity package

Importante

Si desea omitir el componente de configuración de Unity de este curso y continuar directamente en el código, no dude en descargar este . unitypackage Tools, impórtelo en el proyecto como un paquete personalizadoy, después, continúe con el capítulo 5.If you wish to skip the Unity Set up component of this course, and continue straight into code, feel free to download this .unitypackage, import it into your project as a Custom Package, and then continue from Chapter 5. Todavía tendrá que crear un proyecto de Unity.You will still need to create a Unity Project.

En este curso, deberá descargar un paquete de recursos de Unity llamado InsideOutSphere. unitypackage Tools.For this course you will need to download a Unity Asset Package called InsideOutSphere.unitypackage.

Cómo importar unitypackage Tools:How-to import the unitypackage:

  1. Con el panel de Unity delante de usted, haga clic en recursos en el menú de la parte superior de la pantalla y, a continuación, haga clic en importar paquete > paquete personalizado.With the Unity dashboard in front of you, click on Assets in the menu at the top of the screen, then click on Import Package > Custom Package.

    Importación del paquete Unity de InsideOutSphere

  2. Use el selector de archivos para seleccionar el paquete InsideOutSphere. unitypackage Tools y haga clic en abrir.Use the file picker to select the InsideOutSphere.unitypackage package and click Open. Se le mostrará una lista de los componentes de este recurso.A list of components for this asset will be displayed to you. Confirme la importación haciendo clic en importar.Confirm the import by clicking Import.

    Importación del paquete Unity de InsideOutSphere

  3. Una vez que haya finalizado la importación, observará que se han agregado tres nuevas carpetas, materiales, modelos y Prefabs a la carpeta assets .Once it has finished importing, you will notice three new folders, Materials, Models, and Prefabs, have been added to your Assets folder. Este tipo de estructura de carpetas es típico para un proyecto de Unity.This kind of folder structure is typical for a Unity project.

    Importación del paquete Unity de InsideOutSphere

    1. Abra la carpeta modelos y verá que se ha importado el modelo InsideOutSphere .Open the Models folder, and you will see that the InsideOutSphere model has been imported.

    2. En la carpeta materiales encontrará el InsideOutSpheres material lambert1, junto con un material denominado ButtonMaterial, que se usa en el GazeButton, que verá en breve.Within the Materials folder you will find the InsideOutSpheres material lambert1, along with a material called ButtonMaterial, which is used by the GazeButton, which you will see soon.

    3. La carpeta Prefabs contiene recurso prefabricado InsideOutSphere , que contiene el modelo InsideOutSphere y el GazeButton.The Prefabs folder contains the InsideOutSphere prefab which contains both the InsideOutSphere model and the GazeButton.

    4. No se incluye ningún código, se escribirá el código siguiendo este curso.No code is included, you will write the code by following this course.

  4. Dentro de la jerarquía, seleccione el objeto de cámara principal y actualice los siguientes componentes:Within the Hierarchy, select the Main Camera object, and update the following components:

    1. TransformaciónTransform

      1. Position = X: 0, y: 0, Z: 0.Position = X: 0, Y: 0, Z: 0.

      2. Rotation = X: 0, y: 0, Z: 0.Rotation = X: 0, Y: 0, Z: 0.

      3. Escala X: 1, y: 1, Z: 1.Scale X: 1, Y: 1, Z: 1.

    2. CámaraCamera

      1. Borrar marcas: color sólido.Clear Flags: Solid Color.

      2. Planos de recorte: Near: 0,1, Far: 6.Clipping Planes: Near: 0.1, Far: 6.

        Importación del paquete Unity de InsideOutSphere

  5. Navegue hasta la carpeta recurso prefabricado y, a continuación, arrastre InsideOutSphere recurso prefabricado al panel jerarquía .Navigate to the Prefab folder, and then drag the InsideOutSphere prefab into the Hierarchy Panel.

    Importación del paquete Unity de InsideOutSphere

  6. Expanda el objeto InsideOutSphere dentro de la jerarquía haciendo clic en la pequeña flecha situada junto a él.Expand the InsideOutSphere object within the Hierarchy by clicking the little arrow next to it. Verá un objeto secundario debajo de él denominado GazeButton.You will see a child object beneath it called GazeButton. Se usará para cambiar escenas y, por lo tanto, vídeos.This will be used to change scenes and thus videos.

    Importación del paquete Unity de InsideOutSphere

  7. En la ventana del inspector, haga clic en el componente de transformación de InsideOutSphere, asegúrese de que se establecen las siguientes propiedades:In the Inspector Window click on the InsideOutSphere's Transform component, ensure that the following properties are set:

    TRANSFORMACIÓN: POSICIÓNTRANSFORM - POSITION
    X 0X 0 Y 0Y 0 Z 0Z 0
    TRANSFORMACIÓN-GIROTRANSFORM - ROTATION
    X 0X 0 Y -50Y -50 Z 0Z 0
    TRANSFORMACIÓN DE ESCALATRANSFORM - SCALE
    X 1X 1 S 1Y 1 Z 1Z 1

    Importación del paquete Unity de InsideOutSphere

  8. Haga clic en el objeto secundario GazeButton y establezca su transformación como se indica a continuación:Click on the GazeButton child object, and set its Transform as follows:

    TRANSFORMACIÓN: POSICIÓNTRANSFORM - POSITION
    X 3,6X 3.6 Y 1,3Y 1.3 Z 0Z 0
    TRANSFORMACIÓN-GIROTRANSFORM - ROTATION
    X 0X 0 Y 0Y 0 Z 0Z 0
    TRANSFORMACIÓN DE ESCALATRANSFORM - SCALE
    X 1X 1 S 1Y 1 Z 1Z 1

    Importación del paquete Unity de InsideOutSphere

Capítulo 5: creación de la clase videocontrollerChapter 5 - Create the VideoController class

La clase videocontroller hospeda los dos puntos de conexión de vídeo que se usarán para transmitir el contenido de Azure Media Services.The VideoController class hosts the two video endpoints that will be used to stream the content from the Azure Media Service.

Para crear esta clase:To create this class:

  1. Haga clic con el botón derecho en la carpeta de recursos, que se encuentra en el panel proyecto , y haga clic en crear > carpeta.Right-click in the Asset Folder, located in the Project Panel, and click Create > Folder. Asigne a la carpeta el nombre scripts.Name the folder Scripts.

    Creación de la clase videocontroller

    Creación de la clase videocontroller

  2. Haga doble clic en la carpeta scripts para abrirla.Double click on the Scripts folder to open it.

  3. Haga clic con el botón derecho en la carpeta y, a continuación, haga clic en crear > # script de C.Right-click inside the folder, then click Create > C# Script. Asigne un nombre al videocontrolador del script.Name the script VideoController.

    Creación de la clase videocontroller

  4. Haga doble clic en el nuevo script videocontroller para abrirlo con Visual Studio 2017.Double click on the new VideoController script to open it with Visual Studio 2017.

    Creación de la clase videocontroller

  5. Actualice los espacios de nombres en la parte superior del archivo de código como se indica a continuación:Update the namespaces at the top of the code file as follows:

    using System.Collections;
    using UnityEngine;
    using UnityEngine.SceneManagement;
    using UnityEngine.Video;
    
  6. Escriba las siguientes variables en la clase videocontroller , junto con el método activo () :Enter the following variables in the VideoController class, along with the Awake() method:

        /// <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. Ahora es el momento de escribir los puntos de conexión de los vídeos de Azure Media Services:Now is the time to enter the endpoints from your Azure Media Service videos:

    1. El primero en la variable video1endpoint .The first into the video1endpoint variable.

    2. El segundo en la variable video2endpoint .The second into the video2endpoint variable.

    Advertencia

    Existe un problema conocido con el uso de https en Unity, con la versión 2017.4.1 F1.There is a known issue with using https within Unity, with version 2017.4.1f1. Si los vídeos proporcionan un error en la reproducción, pruebe a usar ' http ' en su lugar.If the videos provide an error on play, try using 'http' instead.

  8. A continuación, es necesario editar el método Start () .Next, the Start() method needs to be edited. Este método se desencadenará cada vez que el usuario cambie la escena (por lo tanto, cambiando el vídeo) examinando el botón de mira.This method will be triggered every time the user switches scene (consequently switching the video) by looking at the Gaze Button.

        // Use this for initialization
        void Start()
        {
            Application.runInBackground = true;
            StartCoroutine(PlayVideo());
        }
    
  9. Después del método Start () , inserte el método IEnumerator PlayVideo () , que se usará para iniciar vídeos sin problemas (por lo que no se verá ningún salto).Following the Start() method, insert the PlayVideo() IEnumerator method, which will be used to start videos seamlessly (so no stutter is seen).

        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. El último método que necesita para esta clase es el método ChangeScene () , que se usará para intercambiar entre las escenas.The last method you need for this class is the ChangeScene() method, which will be used to swap between scenes.

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

    Sugerencia

    El método ChangeScene () utiliza una característica de C muy útil # denominada operador condicional.The ChangeScene() method uses a handy C# feature called the Conditional Operator. Esto permite comprobar las condiciones y, después, los valores devueltos en función del resultado de la comprobación, todo dentro de una única instrucción.This allows for conditions to be checked, and then values returned based on the outcome of the check, all within a single statement. Siga este vínculo para obtener más información acerca del operador condicional.Follow this link to learn more about Conditional Operator.

  11. Guarde los cambios en Visual Studio antes de volver a Unity.Save your changes in Visual Studio before returning to Unity.

  12. De nuevo en el editor de Unity, haga clic y arrastre la clase videocontroller [desde] {. Underline} la carpeta scripts al objeto de cámara principal en el panel jerarquía .Back in the Unity Editor, click and drag the VideoController class [from]{.underline} the Scripts folder to the Main Camera object in the Hierarchy Panel.

  13. Haga clic en la cámara principal y mire en el panel del inspector.Click on the Main Camera and look at the Inspector Panel. Observará que, dentro del componente de script recién agregado, hay un campo con un valor vacío.You will notice that within the newly added Script component, there is a field with an empty value. Se trata de un campo de referencia, que tiene como destino las variables públicas del código.This is a reference field, which targets the public variables within your code.

  14. Arrastre el objeto InsideOutSphere desde el Panel jerarquía hasta la ranura de la esfera , tal como se muestra en la imagen siguiente.Drag the InsideOutSphere object from the Hierarchy Panel to the Sphere slot, as shown in the image below.

    Creación de la clase videocontroller  crear la clase videocontrollerCreate the VideoController class Create the VideoController class

Capítulo 6: crear la clase fijamenteChapter 6 - Create the Gaze class

Esta clase es responsable de crear un Raycast que se proyectará hacia delante desde la cámara principal, para detectar qué objeto está examinando el usuario.This class is responsible for creating a Raycast that will be projected forward from the Main Camera, to detect which object the user is looking at. En este caso, Raycast deberá identificar si el usuario mira el objeto GazeButton en la escena y desencadena un comportamiento.In this case, the Raycast will need to identify if the user is looking at the GazeButton object in the scene and trigger a behavior.

Para crear esta clase:To create this Class:

  1. Vaya a la carpeta scripts que creó anteriormente.Go to the Scripts folder you created previously.

  2. Haga clic con el botón derecho en el panel proyecto , *crear * C # script * *.Right-click in the Project Panel, *Create *C# Script**. Asigne un nombre al script.Name the script Gaze.

  3. Haga doble clic en el nuevo script de **premiraciónpara abrirlo con _* Visual Studio 2017.*Double click on the new **Gaze_ script to open it with _* Visual Studio 2017.*

  4. Asegúrese de que el siguiente espacio de nombres se encuentra en la parte superior del script y quite los demás:Ensure the following namespace is at the top of the script, and remove any others:

    using UnityEngine;
    
  5. Después, agregue las siguientes variables dentro de la clase mirate :Then add the following variables inside the Gaze class:

        /// <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. Ahora es necesario agregar el código para los métodos activo () e Inicio () .Code for the Awake() and Start() methods now needs to be added.

        private void Awake()
        {
            // Set this class to behave similar to singleton 
            instance = this;
        }
    
        void Start()
        {
            FocusedGameObject = null;
        }
    
  7. Agregue el código siguiente en el método Update () para proyectar un Raycast y detectar el acierto de destino:Add the following code in the Update() method to project a Raycast and detect the target hit:

        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. Guarde los cambios en Visual Studio antes de volver a Unity.Save your changes in Visual Studio before returning to Unity.

  9. Haga clic y arrastre la clase mira desde la carpeta scripts hasta el objeto cámara principal en el panel jerarquía .Click and drag the Gaze class from the Scripts folder to the Main Camera object in the Hierarchy Panel.

Capítulo 7: configuración de las dos escenas de UnityChapter 7 - Setup the two Unity Scenes

El propósito de este capítulo es configurar las dos escenas, cada una de las cuales hospeda un vídeo para la transmisión.The purpose of this Chapter is to setup the two scenes, each hosting a video to stream. Duplicará la escena que ya ha creado, de modo que no necesite configurarla de nuevo, aunque después modificará la nueva escena, de modo que el objeto GazeButton esté en una ubicación diferente y tenga un aspecto diferente.You will duplicate the scene you have already created, so that you do not need to set it up again, though you will then edit the new scene, so that the GazeButton object is in a different location and has a different appearance. Esto es para mostrar cómo cambiar entre escenas.This is to show how to change between scenes.

  1. Para ello, vaya a archivo > guardar la escena como.... Aparecerá una ventana de guardar.Do this by going to File > Save Scene as.... A save window will appear. Haga clic en el botón nueva carpeta .Click the New folder button.

    Capítulo 7: configuración de las dos escenas de Unity

  2. Asigne a la carpeta el nombre Scenes.Name the folder Scenes.

  3. La ventana Guardar escena permanecerá abierta.The Save Scene window will still be open. Abra la carpeta de escenas recién creada.Open your newly created Scenes folder.

  4. En el campo nombre de archivo: , escriba VideoScene1 y, a continuación, presione Guardar.In the File name: text field, type VideoScene1, then press Save.

  5. De nuevo en Unity, abra la carpeta Scenes y haga clic con el botón primario en el archivo VideoScene1 .Back in Unity, open your Scenes folder, and left-click your VideoScene1 file. Usar el teclado y presionar Ctrl + D se duplicará la escenaUse your keyboard, and press Ctrl + D you will duplicate that scene

    Sugerencia

    El comando duplicado también puede realizarse desplazándose a Editar > duplicar.The Duplicate command can also be performed by navigating to Edit > Duplicate.

  6. Unity incrementará automáticamente el número de nombres de escena, pero Compruébelo de todos modos para asegurarse de que coincide con el código insertado anteriormente.Unity will automatically increment the scene names number, but check it anyway, to ensure it matches the previously inserted code.

    Debe tener VideoScene1 y VideoScene2.You should have VideoScene1 and VideoScene2.

  7. Con las dos escenas, vaya a archivo > configuración de compilación.With your two scenes, go to File > Build Settings. Con la ventana configuración de compilación abierta, arrastre las escenas hasta la sección escenas en la compilación .With the Build Settings window open, drag your scenes to the Scenes in Build section.

    Capítulo 7: configuración de las dos escenas de Unity

    Sugerencia

    Puede seleccionar las dos escenas de la carpeta Scenes mientras mantiene presionado el botón Ctrl y, a continuación, hacer clic con el botón izquierdo en cada escena y, por último, arrastrar ambas cosas.You can select both of your scenes from your Scenes folder through holding the Ctrl button, and then left-clicking each scene, and finally drag both across.

  8. Cierre la ventana configuración de compilación y haga doble clic en VideoScene2.Close the Build Settings window, and double click on VideoScene2.

  9. Con la segunda escena abierta, haga clic en el objeto secundario GazeButton de InsideOutSphere y establezca su transformación como se indica a continuación:With the second scene open, click on the GazeButton child object of the InsideOutSphere, and set its Transform as follows:

    TRANSFORMACIÓN: POSICIÓNTRANSFORM - POSITION
    X 0X 0 Y 1,3Y 1.3 Z 3,6Z 3.6
    TRANSFORMACIÓN-GIROTRANSFORM - ROTATION
    X 0X 0 Y 0Y 0 Z 0Z 0
    TRANSFORMACIÓN DE ESCALATRANSFORM - SCALE
    X 1X 1 S 1Y 1 Z 1Z 1
  10. Con el elemento secundario GazeButton todavía seleccionado, fíjese en el Inspector y en el filtro de malla.With the GazeButton child still selected, look at the Inspector and at the Mesh Filter. Haga clic en el destino pequeño junto al campo de referencia de la malla :Click the little target next to the Mesh reference field:

    Capítulo 7: configuración de las dos escenas de Unity

  11. Aparecerá una ventana emergente de la malla seleccionada .A Select Mesh popup window will appear. Haga doble clic en la malla del cubo de la lista de activos.Double click the Cube mesh from the list of Assets.

    Capítulo 7: configuración de las dos escenas de Unity

  12. El filtro de malla se actualizará y ahora será un cubo.The Mesh Filter will update, and now be a Cube. Ahora, haga clic en el icono de engranaje junto a Sphere Colisionador y haga clic en quitar componente para eliminar el Colisionador de este objeto.Now, click the Gear icon next to Sphere Collider and click Remove Component, to delete the collider from this object.

    Capítulo 7: configuración de las dos escenas de Unity

  13. Con el GazeButton aún seleccionado, haga clic en el botón Agregar componente situado en la parte inferior del Inspector.With the GazeButton still selected, click the Add Component button at the bottom of the Inspector. En el campo de búsqueda, escriba Box y Box Colisionador será una opción; haga clic en él para agregar un Colisionador de cuadro al objeto GazeButton .In the search field, type box, and Box Collider will be an option -- click that, to add a Box Collider to your GazeButton object.

    Capítulo 7: configuración de las dos escenas de Unity

  14. El GazeButton se ha actualizado de forma parcial para que tenga un aspecto diferente. sin embargo, ahora creará un nuevo material, de modo que tenga un aspecto completamente diferente y sea más fácil de reconocer como un objeto diferente, que el objeto de la primera escena.The GazeButton is now partially updated, to look different, however, you will now create a new Material, so that it looks completely different, and is easier to recognize as a different object, than the object in the first scene.

  15. Vaya a la carpeta materiales , dentro del panel Proyecto.Navigate to your Materials folder, within the Project Panel. Duplique el material de ButtonMaterial (presione Ctrl + D en el teclado o haga clic con el botón primario en el material y, a continuación, en la opción de menú Editar archivo, seleccione duplicar).Duplicate the ButtonMaterial Material (press Ctrl + D on the keyboard, or left-click the Material, then from the Edit file menu option, select Duplicate).

    Capítulo 7: instalación de las dos escenas de Unity  capítulo 7: configuración de las dos escenas de UnityChapter 7 -- Setup the two Unity Scenes Chapter 7 -- Setup the two Unity Scenes

  16. Seleccione el nuevo material de ButtonMaterial (aquí llamado ButtonMaterial 1) y, dentro del Inspector, haga clic en la ventana color Albedo .Select the new ButtonMaterial Material (here named ButtonMaterial 1), and within the Inspector, click the Albedo color window. Aparecerá un menú emergente en el que podrá seleccionar otro color (elija el que desee) y, a continuación, cerrar el elemento emergente.A popup will appear, where you can select another color (choose whichever you like), then close the popup. El material será su propia instancia y diferente al original.The Material will be its own instance, and different to the original.

    Capítulo 7: configuración de las dos escenas de Unity

  17. Arrastre el nuevo material hasta el elemento secundario GazeButton y, a continuación, actualice su apariencia para que se pueda distinguir fácilmente del primer botón de escenas.Drag the new Material onto the GazeButton child, to now completely update its look, so that it is easily distinguishable from the first scenes button.

    Capítulo 7: configuración de las dos escenas de Unity

  18. Llegados a este punto, puede probar el proyecto en el editor antes de compilar el proyecto de UWP.At this point you can test the project in the Editor before building the UWP project.

    • Presione el botón de reproducción en el Editor y desgaste el casco.Press the Play button in the Editor and wear your headset.

      Capítulo 7: configuración de las dos escenas de Unity

  19. Examine los dos objetos GazeButton para cambiar entre el primer y el segundo vídeo.Look at the two GazeButton objects to switch between the first and second video.

Capítulo 8: compilar la solución de UWPChapter 8 - Build the UWP Solution

Una vez que se ha asegurado de que el editor no tiene errores, está listo para compilar.Once you have ensured that the editor has no errors, you are ready to Build.

Para compilar:To Build:

  1. Guarde la escena actual haciendo clic en archivo > guardar.Save the current scene by clicking on File > Save.

  2. Active la casilla denominada # proyectos de Unity C (esto es importante porque le permitirá editar las clases una vez completada la compilación).Check the box called Unity C# Projects (this is important because it will allow you to edit the classes after build is completed).

  3. Vaya a archivo > configuración de compilación y haga clic en compilar.Go to File > Build Settings, click on Build.

  4. Se le pedirá que seleccione la carpeta en la que desea compilar la solución.You will be prompted to select the folder where you want to build the Solution.

  5. Cree una carpeta compilaciones y, dentro de esa carpeta, cree otra carpeta con un nombre adecuado de su elección.Create a BUILDS folder and within that folder create another folder with an appropriate name of your choice.

  6. Haga clic en la nueva carpeta y, a continuación, haga clic en Seleccionar carpeta para que se inicie la compilación en esa ubicación.Click your new folder and then click Select Folder, so to choose that folder, to begin the build at that location.

    Capítulo 8: compilar la solución UWP  capítulo 8: compilar la solución UWPChapter 8 -- Build the UWP Solution Chapter 8 -- Build the UWP Solution

  7. Una vez que Unity termine de compilar (puede tardar algún tiempo), se abrirá una ventana del Explorador de archivos en la ubicación de la compilación.Once Unity has finished building (it might take some time), it will open a File Explorer window at the location of your build.

Capítulo 9: implementación en el equipo localChapter 9 - Deploy on Local Machine

Una vez completada la compilación, aparecerá una ventana del Explorador de archivos en la ubicación de la compilación.Once the build has been completed, a File Explorer window will appear at the location of your build. Abra la carpeta con el nombre y la compilación en y, a continuación, haga doble clic en el archivo de solución (. sln) dentro de esa carpeta para abrir la solución con Visual Studio 2017.Open the Folder you named and built to, then double click on the solution (.sln) file within that folder, to open your solution with Visual Studio 2017.

Lo único que queda por hacer es implementar la aplicación en el equipo (o equipo local).The only thing left to do is deploy your app to your computer (or Local Machine).

Para implementar en la máquina local:To deploy to Local Machine:

  1. En Visual Studio 2017, abra el archivo de solución que acaba de crear.In Visual Studio 2017, open the solution file that has just been created.

  2. En la plataforma de la solución, seleccione x86, equipo local.In the Solution Platform, select x86, Local Machine.

  3. En la configuración de soluciones , seleccione depurar.In the Solution Configuration select Debug.

    Capítulo 9: implementación en el equipo local

  4. Ahora tendrá que restaurar los paquetes en la solución.You will now need to restore any packages to your solution. Haga clic con el botón derecho en la solución y haga clic en restaurar paquetes NuGet para la solución...Right-click on your Solution, and click Restore NuGet Packages for Solution...

    Nota

    Esto se hace porque los paquetes compilados por Unity deben estar destinados a funcionar con las referencias de los equipos locales.This is done because the packages which Unity built need to be targeted to work with your local machines references.

  5. Vaya al menú compilar y haga clic en implementar solución para transferir localmente la aplicación a la máquina.Go to Build menu and click on Deploy Solution to sideload the application to your machine. Visual Studio compilará primero y, a continuación, implementará la aplicación.Visual Studio will first build and then deploy your application.

  6. La aplicación debe aparecer ahora en la lista de aplicaciones instaladas, lista para iniciarse.Your App should now appear in the list of installed apps, ready to be launched.

    Capítulo 9: implementación en el equipo local

Al ejecutar la aplicación de realidad mixta, se encontrará dentro del modelo InsideOutSphere que usó en la aplicación.When you run the Mixed Reality application, you will you be within the InsideOutSphere model which you used within your app. Esta esfera será el lugar al que se transmitirá el vídeo, lo que proporciona una vista de 360 grados del vídeo entrante (que se filmó para este tipo de perspectiva).This sphere will be where the video will be streamed to, providing a 360-degree view, of the incoming video (which was filmed for this kind of perspective). No se sorprenda si el vídeo tarda un par de segundos en cargarse, la aplicación está sujeta a la velocidad de Internet disponible, ya que el vídeo debe capturarse y descargarse, por lo que debe transmitirse a la aplicación.Do not be surprised if the video takes a couple of seconds to load, your app is subject to your available Internet speed, as the video needs to be fetched and then downloaded, so to stream into your app. Cuando esté listo, cambie las escenas y abra el segundo vídeo, Gazing en la esfera roja.When you are ready, change scenes and open your second video, by gazing at the red sphere! Después, no dude en volver, usando el cubo azul en la segunda escena.Then feel free to go back, using the blue cube in the second scene!

Su aplicación finalizada de Azure Media ServicesYour finished Azure Media Service application

Enhorabuena, ha creado una aplicación de realidad mixta que aprovecha Azure Media Services para transmitir vídeos de 360.Congratulations, you built a mixed reality app that leverages the Azure Media Service to stream 360 videos.

resultado de laboratorio

resultado de laboratorio

Ejercicios de bonusBonus Exercises

Ejercicio 1Exercise 1

Es totalmente posible usar una sola escena para cambiar vídeos en este tutorial.It is entirely possible to only use a single scene to change videos within this tutorial. Experimente con la aplicación y conviértalo en una sola escena.Experiment with your application and make it into a single scene! Quizás incluso agregue otro vídeo a la combinación.Perhaps even add another video to the mix.

Ejercicio 2Exercise 2

Experimente con Azure y Unity e intente implementar la capacidad de la aplicación para seleccionar automáticamente un vídeo con un tamaño de archivo diferente, en función de la seguridad de una conexión a Internet.Experiment with Azure and Unity, and attempt to implement the ability for the app to automatically select a video with a different file size, depending on the strength of an Internet connection.