Exportar (0) Imprimir
Expandir todo

Introducción de recursos con el SDK de Media Services para .NET

Actualizado: agosto de 2014

En este tema se muestra cómo incluir (cargar) contenido en Media Services. En una aplicación Media Services, las tareas de ingesta son el proceso de cargar contenido (recursos, archivos multimedia, etc.) en el sistema. El objeto de contenido más importante en Media Services es IAsset, que es una colección de metadatos sobre un conjunto de archivos multimedia. Cada objeto IAsset contiene uno o más objetos IAssetFile. Para obtener una explicación más detallada de un objeto Asset en Media Services, consulte Activo.

noteNota
Media Services usa el valor de la propiedad IAssetFile.Name al generar las URL para el contenido de streaming (por ejemplo, http://{WAMSAccount}.origin.mediaservices.windows.net/{GUID}/{IAssetFile.Name}/streamingParameters). Por este motivo, no se permite la codificación de porcentaje. El valor de la propiedad Name no puede contener ninguno de los siguientes caracteres reservados a la codificación de porcentaje: !*'();:@&=+$,/?%#[]". Además, solo puede haber un ‘.’ para la extensión de nombre de archivo.

Para la ingesta de recursos en Media Services se pueden seguir varios métodos:

  • Cree un objeto Asset, cree uno o más objetos AssetFiles asociados con el objeto Asset y luego cargue el objeto AssetFiles en Servicios multimedia de Microsoft Azure. Use este método a la hora de trabajar con conjuntos más pequeños de archivos multimedia y cuando no se usa una solución de carga separada. Todos los ejemplos de este tema son de este tipo.

  • Para realizar la ingesta en bloque de un conjunto de archivos, prepare un manifiesto y cárguelo en Servicios multimedia de Microsoft Azure mediante una solución de carga independiente. Para obtener más información sobre este método, consulte Introducción de recursos en bloque con el SDK de Media Services para .NET.

TipSugerencia
Cuando cargue un número elevado de recursos, considere la posibilidad de llevar a cabo lo siguiente.

  • Cree un objeto CloudMediaContext nuevo por subproceso. La clase CloudMediaContext no tiene seguro para subprocesos.

  • Aumente NumberOfConcurrentTransfers del valor predeterminado 2 a un valor mayor como, por ejemplo, el 5. La configuración de esta propiedad afecta a todas las instancias de CloudMediaContext.

  • Mantenga ParallelTransferThreadCount con el valor predeterminado de 10.

El código de este tema muestra cómo llevar a cabo las siguientes tareas comunes:

noteNota
Para crear un recurso, primero debe tener una referencia al contexto del servidor de Media Services, según se describe en el tema Conectar con Media Services mediante el SDK de Media Services. El objeto de contexto se representa con la variable denominada _context en los siguientes ejemplos de código.

Antes de poder cargar un archivo al servidor de Media Services, deberá crear un recurso mediante el método Create o CreateAsync. Ambos métodos aceptan el nombre de recurso y la opción de cifrado como parámetros.

Cuando cree recursos podrá especificar hasta tres opciones distintas para el cifrado:

  • AssetCreationOptions.None: sin cifrado.

  • AssetCreationOptions.CommonEncryptionProtected: para archivos protegidos con cifrado común (CENC). Un ejemplo es un conjunto de archivos que ya están cifrados con PlayReady.

  • AssetCreationOptions.StorageEncrypted: cifrado del almacenamiento. Cifra un archivo de entrada sin cifrar antes de cargarlo en el almacenamiento de Azure.

    noteNota
    Tenga en cuenta que Media Services solo proporciona cifrado de almacenamiento en disco, y no a través de la conexión como, por ejemplo, Digital Rights Management (DRM).

El método CreateEmptyAsset muestra cómo crear un recurso vacío.

static private IAsset CreateEmptyAsset(string assetName, AssetCreationOptions assetCreationOptions)
{
    var asset = _context.Assets.Create(assetName, assetCreationOptions);

    Console.WriteLine("Asset name: " + asset.Name);
    Console.WriteLine("Time created: " + asset.Created.Date.ToString());

    return asset;
}

El código que se muestra en esta sección lleva a cabo lo siguiente:

  1. Crea un objeto Asset vacío mediante el método CreateEmptyAsset definido en el paso anterior.

  2. Cree una instancia de AssetFile asociada con el objeto Asset.

  3. Carga el archivo multimedia asociado al objeto AssetFile en Media Services.

noteNota
La instancia de AssetFile y el archivo multimedia actual son dos objetos distintos. La instancia de AssetFile contiene metadatos sobre el archivo multimedia, mientras que este último contiene el contenido multimedia real.

static public IAsset CreateAssetAndUploadSingleFile( AssetCreationOptions assetCreationOptions, string singleFilePath)
{   
    var assetName = "UploadSingleFile_" + DateTime.UtcNow.ToString();
    var asset = CreateEmptyAsset(assetName, assetCreationOptions);
    var fileName = Path.GetFileName(singleFilePath);
    var assetFile = asset.AssetFiles.Create(fileName);

    Console.WriteLine("Created assetFile {0}", assetFile.Name);
    Console.WriteLine("Upload {0}", assetFile.Name);

    assetFile.Upload(singleFilePath);
    Console.WriteLine("Done uploading of {0}", assetFile.Name);

    return asset;

}

El código que se muestra en esta sección lleva a cabo lo siguiente:

  1. Crea un recurso vacío utilizando el método CreateEmptyAsset definido en el paso anterior.

  2. Crea una instancia de AccessPolicy que define los permisos y la duración del acceso al recurso.

  3. Crea una instancia de Locator que proporciona acceso al recurso.

  4. Crea una instancia de BlobTransferClient. Este tipo representa un cliente que funciona en los blobs de Azure. En este ejemplo, se usa el cliente para supervisar el progreso de la carga.

  5. Enumera los archivos del directorio especificado y crea una instancia de AssetFile para cada archivo.

  6. Carga los archivos en Media Services con el método UploadAsync.

    TipSugerencia
    Utilice el método UploadAsync para asegurarse de que las llamadas no se estén bloqueando y de que los archivos se estén cargando de forma paralela.

static public IAsset CreateAssetAndUploadMultipleFiles(AssetCreationOptions assetCreationOptions, string folderPath)
{
      var assetName = "UploadMultipleFiles_" + DateTime.UtcNow.ToString();
      var asset = CreateEmptyAsset(assetName, assetCreationOptions);
      var accessPolicy = _context.AccessPolicies.Create(assetName, TimeSpan.FromDays(30), AccessPermissions.Write | AccessPermissions.List);
      var locator = _context.Locators.CreateLocator(LocatorType.Sas, asset, accessPolicy);

      var blobTransferClient = new BlobTransferClient();
      blobTransferClient.NumberOfConcurrentTransfers = 20;
      blobTransferClient.ParallelTransferThreadCount = 20;
      blobTransferClient.TransferProgressChanged += blobTransferClient_TransferProgressChanged;

       var filePaths = Directory.EnumerateFiles(folderPath);

       Console.WriteLine("There are {0} files in {1}", filePaths.Count(), folderPath);

       if (!filePaths.Any())
       {
           throw new FileNotFoundException(String.Format("No files in directory, check folderPath: {0}", folderPath));
       }

       var uploadTasks = new List<Task>();
       foreach (var filePath in filePaths)
       {
            var assetFile = asset.AssetFiles.Create(Path.GetFileName(filePath));

            Console.WriteLine("Start uploading of {0}", assetFile.Name);
            uploadTasks.Add(assetFile.UploadAsync(filePath, blobTransferClient, locator, CancellationToken.None));
       }

      Task.WaitAll(uploadTasks.ToArray());
      Console.WriteLine("Done uploading the files");

      blobTransferClient.TransferProgressChanged -= blobTransferClient_TransferProgressChanged;
      locator.Delete();
      accessPolicy.Delete();

      return asset;

}

static void  blobTransferClient_TransferProgressChanged(object sender, BlobTransferProgressChangedEventArgs e)
{
    Console.WriteLine("{0}% upload competed for {1}.", e.ProgressPercentage, e.LocalFile);
}

Ya puede pasar al siguiente tema: Introducción de recursos en bloque con el SDK de Media Services para .NET.

Vea también

Mostrar:
© 2014 Microsoft