Exporter (0) Imprimer
Développer tout

Réception d'éléments multimédias à l'aide du Kit de développement logiciel (SDK) Media Services pour .NET

Mis à jour: août 2014

Cette rubrique montre comment réceptionner (télécharger) du contenu dans Media Services. Dans une application Media Services, les tâches d'ingestion correspondent au processus de téléchargement de contenu (éléments multimédias, fichiers multimédias, etc.) dans le système. L'objet de contenu le plus fondamental dans Media Services est IAsset, qui est une collection de métadonnées concernant un ensemble de fichiers multimédias. Chaque IAsset contient un ou plusieurs objets IAssetFile. Pour obtenir une explication plus détaillée de ce qu'est une entité Asset dans Media Services, consultez Asset.

noteRemarque
Media Services utilise la valeur de la propriété IAssetFile.Name lors de la génération d'URL pour la diffusion de contenu en continu (par exemple, http://{WAMSAccount}.origin.mediaservices.windows.net/{GUID}/{IAssetFile.Name}/streamingParameters). Pour cette raison, l'encodage pourcentage n'est pas admis. La valeur de la propriété Name ne peut contenir aucun des caractères réservés d'encodage pourcentage suivants : !*'();:@&=+$,/?%#[]". Il ne peut aussi y avoir qu'un seul « . » pour l'extension de nom de fichier.

Il existe quelques approches différentes de l'ingestion d'éléments multimédias dans Media Services:

  • Créez une entité Asset, créez un ou plusieurs AssetFiles associés à l'entité Asset, puis téléchargez les AssetFiles vers Microsoft Azure Media Services. Utilisez cette approche quand vous travaillez avec des ensembles réduits de fichiers multimédias et quand vous n'utilisez pas une solution de téléchargement distincte. Tous les exemples figurant dans cette rubrique sont de ce type.

  • Ingérez en bloc un ensemble de fichiers en préparant un manifeste et téléchargez-les vers Microsoft Azure Media Services à l'aide d'une solution de téléchargement distincte. Pour plus d'informations sur cette approche, consultez Réception en bloc d'éléments multimédias à l'aide du Kit de développement logiciel (SDK) Media Services pour .NET.

TipConseil
Quand vous téléchargez un grand nombre d'éléments multimédias, prenez en compte les opérations suivantes.

  • Créez un nouvel objet CloudMediaContext par thread. La classe CloudMediaContext n'est pas thread-safe.

  • Augmentez NumberOfConcurrentTransfers de la valeur 2 par défaut à une valeur plus élevée, telle que 5. La définition de cette propriété affecte toutes les instances de CloudMediaContext.

  • Maintenez ParallelTransferThreadCount à la valeur par défaut de 10.

Le code figurant dans cette rubrique montre comment effectuer les tâches courantes suivantes :

noteRemarque
Pour créer un élément multimédia quelconque, vous devez disposer au préalable d'une référence au contexte serveur de Media Services, comme cela est décrit dans la rubrique Connexion à Media Services avec le Kit de développement logiciel (SDK) Media Services pour .NET. L'objet de contexte est représenté par la variable nommée _context dans les exemples de code suivants.

Avant de pouvoir télécharger un fichier vers le serveur Media Services, vous devez créer un élément multimédia à l'aide de la méthode Create ou CreateAsync. Ces deux méthodes acceptent le nom de l'élément multimédia et l'option de chiffrement comme paramètres.

Quand vous créez des éléments multimédias, vous pouvez spécifier trois options différentes pour le chiffrement.

  • AssetCreationOptions.None : aucun chiffrement.

  • AssetCreationOptions.CommonEncryptionProtected : pour les fichiers CENC (protégés par un chiffrement commun). Un ensemble de fichiers déjà chiffrés en PlayReady en est un exemple.

  • AssetCreationOptions.StorageEncrypted : chiffrement de stockage. Chiffre un fichier d'entrée en clair avant son téléchargement vers le stockage Azure.

    noteRemarque
    Notez que Media Services fournit un chiffrement de stockage sur disque, et non pas sur le réseau comme une solution de gestion des droits numériques (DRM).

La méthode CreateEmptyAsset montre comment créer un élément multimédia vide.

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;
}

Le code de cette section effectue les opérations suivantes :

  1. Il crée une entité Asset vide en utilisant la méthode CreateEmptyAsset définie à l'étape précédente.

  2. Il crée une instance AssetFile associée à l'entité Asset.

  3. Il télécharge le fichier multimédia associé à AssetFile dans Media Services.

noteRemarque
L'instance AssetFile et le fichier multimédia lui-même sont deux objets distincts. L'instance AssetFile contient des métadonnées sur le fichier multimédia, tandis que le fichier multimédia contient le contenu multimédia lui-même.

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;

}

Le code de cette section effectue les opérations suivantes :

  1. Il crée un élément multimédia vide en utilisant la méthode CreateEmptyAsset définie à l'étape précédente.

  2. Il crée une instance AccessPolicy qui définit les autorisations et la durée de l'accès à l'élément multimédia.

  3. Il crée une instance Locator qui assure l'accès à l'élément multimédia.

  4. Il crée une instance BlobTransferClient. Ce type représente un client qui utilise les objets blob Azure. Dans cet exemple, nous utilisons le client pour surveiller la progression du téléchargement.

  5. Il énumère les fichiers dans le répertoire spécifié et crée une instance AssetFile pour chaque fichier.

  6. Il télécharge les fichiers dans Media Services en utilisant la méthode UploadAsync.

    TipConseil
    Utilisez la méthode UploadAsync pour vous assurer que les appels ne créent pas de blocage et que les fichiers sont téléchargés en parallèle.

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);
}

Vous êtes prêt à passer à la rubrique suivante : Réception en bloc d'éléments multimédias à l'aide du Kit de développement logiciel (SDK) Media Services pour .NET.

Voir aussi

Afficher:
© 2014 Microsoft