Exporter (0) Imprimer
Développer tout

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

Mis à jour: juillet 2014

Cette rubrique indique comment accomplir les tâches de gestion des Media Services suivantes :

noteRemarque
Pour écrire du code permettant de gérer les éléments multimédias Media Services existants, vous devez d'abord disposer d'une référence au contexte serveur de Media Services tel qu'il 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.

Obtenir une référence à un élément multimédia existant dans Media Services constitue une tâche fréquente. L'exemple de code ci-dessous montre comment vous pouvez obtenir une référence à un élément multimédia à partir de la collection Assets sur l'objet de contexte serveur, en fonction d'un identificateur d'élément multimédia.

L'exemple de code ci-dessous utilise une requête Linq pour obtenir une référence à un objet IAsset existant.

static IAsset GetAsset(string assetId)
{
    // Use a LINQ Select query to get an asset.
    var assetInstance =
        from a in _context.Assets
        where a.Id == assetId
        select a;
    // Reference the asset as an IAsset.
    IAsset asset = assetInstance.FirstOrDefault();

    return asset;
}

Quand vous utilisez des tâches de traitement dans le code des Media Services, vous avez souvent besoin d'obtenir une référence à un travail existant en fonction d'un identificateur. L'exemple de code ci-dessous montre comment obtenir une référence à un objet IJob à partir de la collection Jobs.

WarningAvertissement
Vous aurez peut-être besoin d'obtenir une référence à un travail quand vous démarrerez un travail d'encodage de longue durée, et vous aurez besoin de vérifier l'état du travail sur un thread. En pareil cas, quand la méthode retourne des résultats d'un thread, vous avez besoin de récupérer une référence actualisée à un travail.

static IJob GetJob(string jobId)
{
    // Use a Linq select query to get an updated 
    // reference by Id. 
    var jobInstance =
        from j in _context.Jobs
        where j.Id == jobId
        select j;
    // Return the job reference as an Ijob. 
    IJob job = jobInstance.FirstOrDefault();

    return job;
}

Au fur et à mesure que le nombre d'éléments multimédias stockés croît, il est utile de répertorier vos éléments multimédias. L'exemple de code ci-dessous montre comment parcourir par itérations la collection Assets sur l'objet de contexte serveur. Avec chaque élément multimédia, l'exemple de code écrit également certaines de ses valeurs de propriétés dans la console. Par exemple, chaque élément multimédia peut contenir de nombreux fichiers multimédias. L'exemple de code fournit la liste de tous les fichiers associés à chaque élément multimédia.

noteRemarque
Pour voir toutes les informations d'élément multimédia affichées dans la console, vous pouvez définir un point d'arrêt dans Visual Studio sur l'accolade fermante de l'exemple de méthode. Dans le cas contraire, la console se ferme avant que vous puissiez visualiser les données. Une autre option consiste à écrire toutes les informations d'élément multimédia sélectionnées dans un fichier. Le projet associé vous montre comment écrire la liste des éléments multimédias dans un fichier à l'aide d'une méthode qui répertorie les éléments multimédias de façon similaire à cet exemple de code.


static void ListAssets()
{
    string waitMessage = "Building the list. This may take a few "
        + "seconds to a few minutes depending on how many assets "
        + "you have."
        + Environment.NewLine + Environment.NewLine
        + "Please wait..."
        + Environment.NewLine;
    Console.Write(waitMessage);

    // Create a Stringbuilder to store the list that we build. 
    StringBuilder builder = new StringBuilder();

    foreach (IAsset asset in _context.Assets)
    {
        // Display the collection of assets.
        builder.AppendLine("");
        builder.AppendLine("******ASSET******");
        builder.AppendLine("Asset ID: " + asset.Id);
        builder.AppendLine("Name: " + asset.Name);
        builder.AppendLine("==============");
        builder.AppendLine("******ASSET FILES******");

        // Display the files associated with each asset. 
        foreach (IAssetFile fileItem in asset.AssetFiles)
        {
            builder.AppendLine("Name: " + fileItem.Name);
            builder.AppendLine("Size: " + fileItem.ContentFileSize);
            builder.AppendLine("==============");
        }
    }

    // Display output in console.
    Console.Write(builder.ToString());
}

Une tâche associée importante consiste à répertorier les éléments multimédias avec leur travail associé dans Media Services. L'exemple de code ci-dessous vous montre comment répertorier chaque objet IJob. Ensuite, pour chaque travail, il affiche les propriétés concernant le travail, toutes les tâches associées, tous éléments multimédias d'entrée et tous les éléments multimédias de sortie. Le code de cet exemple peut être utile pour de nombreuses autres tâches. Par exemple, si vous souhaitez répertorier les éléments multimédias de sortie provenant d'un ou de plusieurs travaux d'encodage que vous avez exécutés précédemment, ce code montre comment accéder à ces éléments multimédias de sortie. Quand vous disposez d'une référence à un élément multimédia de sortie, vous pouvez fournir le contenu à d'autres utilisateurs ou applications en le téléchargeant ou en fournissant des URL. Pour plus d'informations sur les options permettant de fournir des éléments multimédias, consultez Fourniture des éléments multimédias avec le Kit de développement logiciel (SDK) de Media Services pour .NET.

// List all jobs on the server, and for each job, also list 
// all tasks, all input assets, all output assets.
static void ListJobsAndAssets()
{
    string waitMessage = "Building the list. This may take a few "
        + "seconds to a few minutes depending on how many assets "
        + "you have."
        + Environment.NewLine + Environment.NewLine
        + "Please wait..."
        + Environment.NewLine;
    Console.Write(waitMessage);

    // Create a Stringbuilder to store the list that we build. 
    StringBuilder builder = new StringBuilder();

    foreach (IJob job in _context.Jobs)
    {
        // Display the collection of jobs on the server.
        builder.AppendLine("");
        builder.AppendLine("******JOB*******");
        builder.AppendLine("Job ID: " + job.Id);
        builder.AppendLine("Name: " + job.Name);
        builder.AppendLine("State: " + job.State);
        builder.AppendLine("Order: " + job.Priority);
        builder.AppendLine("==============");


        // For each job, display the associated tasks (a job  
        // has one or more tasks). 
        builder.AppendLine("******TASKS*******");
        foreach (ITask task in job.Tasks)
        {
            builder.AppendLine("Task Id: " + task.Id);
            builder.AppendLine("Name: " + task.Name);
            builder.AppendLine("Progress: " + task.Progress);
            builder.AppendLine("Configuration: " + task.Configuration);
            if (task.ErrorDetails != null)
            {
                builder.AppendLine("Error: " + task.ErrorDetails);
            }
            builder.AppendLine("==============");
        }

        // For each job, display the list of input media assets.
        builder.AppendLine("******JOB INPUT MEDIA ASSETS*******");
        foreach (IAsset inputAsset in job.InputMediaAssets)
        {

            if (inputAsset != null)
            {
                builder.AppendLine("Input Asset Id: " + inputAsset.Id);
                builder.AppendLine("Name: " + inputAsset.Name);
                builder.AppendLine("==============");
            }
        }

        // For each job, display the list of output media assets.
        builder.AppendLine("******JOB OUTPUT MEDIA ASSETS*******");
        foreach (IAsset theAsset in job.OutputMediaAssets)
        {
            if (theAsset != null)
            {
                builder.AppendLine("Output Asset Id: " + theAsset.Id);
                builder.AppendLine("Name: " + theAsset.Name);
                builder.AppendLine("==============");
            }
        }

    }

    // Display output in console.
    Console.Write(builder.ToString());
}

Dans les Media Services, vous pouvez définir une stratégie d'accès sur un élément multimédia ou les fichiers de ce dernier. Une stratégie d'accès définit les autorisations pour un fichier ou un élément multimédia (le type d'accès et la durée). Dans votre code des Media Services, vous définissez généralement une stratégie d'accès en créant un objet IAccessPolicy, puis en l'associant à un élément multimédia existant. Ensuite, vous créez un objet ILocator, ce qui vous permet de fournir un accès direct aux éléments multimédias dans Media Services. Le projet Visual Studio qui accompagne cette documentation contient plusieurs exemples de code qui vous montrent comment créer et attribuer des stratégies d'accès et des localisateurs à des éléments multimédias.

L'exemple de code ci-dessous montre comment répertorier toutes les stratégies d'accès sur le serveur et montre le type d'autorisations associé à chaque stratégie. Pour afficher les stratégies d’accès, une autre méthode consiste à répertorier tous les objets ILocator sur le serveur, puis à répertorier pour chaque localisateur la stratégie d'accès qui lui est associée en utilisant sa propriété AccessPolicy.

static void ListAllPolicies()
{
    foreach (IAccessPolicy policy in _context.AccessPolicies)
    {
        Console.WriteLine("");
        Console.WriteLine("Name:  " + policy.Name);
        Console.WriteLine("ID:  " + policy.Id);
        Console.WriteLine("Permissions: " + policy.Permissions);
        Console.WriteLine("==============");

    }
}

Un localisateur est une URL qui fournit un chemin d'accès direct à un élément multimédia, ainsi que les autorisations sur l'élément multimédia telles qu'elles sont définies par la stratégie d'accès associée au localisateur. Chaque élément multimédia peut disposer d'une collection d'objets ILocator qui lui sont associés sur sa propriété Locators. Le contexte serveur dispose également d'une collection Locators qui contient tous les localisateurs.

L'exemple de code suivant répertorie tous les localisateurs sur le serveur. Pour chaque localisateur, il montre l'identificateur correspondant à la stratégie d'accès et l'élément multimédia associés. Il affiche également le type des autorisations, la date d'expiration et le chemin d'accès complet à l'élément multimédia.

noteRemarque
Le chemin d'accès d'un localisateur à un élément multimédia est seulement une URL de base vers cet élément multimédia. Pour créer un chemin d'accès direct à des fichiers individuels auxquels un utilisateur ou une application peut accéder, votre code doit ajouter le chemin d'accès spécifique au fichier au chemin d'accès du localisateur. Pour plus d'informations sur cette opération, consultez la rubrique Fourniture des éléments multimédias avec le Kit de développement logiciel (SDK) de Media Services pour .NET.

static void ListAllLocators()
{
    foreach (ILocator locator in _context.Locators)
    {
        Console.WriteLine("***********");
        Console.WriteLine("Locator Id: " + locator.Id);
        Console.WriteLine("Locator asset Id: " + locator.AssetId);
        Console.WriteLine("Locator access policy Id: " + locator.AccessPolicyId);
        Console.WriteLine("Access policy permissions: " + locator.AccessPolicy.Permissions);
        Console.WriteLine("Locator expiration: " + locator.ExpirationDateTime);
        // The locator path is the base or parent path (with included permissions) to access  
        // the media content of an asset. To create a full URL to a specific media file, take 
        // the locator path and then append a file name and info as needed.  
        Console.WriteLine("Locator base path: " + locator.Path);
        Console.WriteLine("");
    }
}


L'exemple suivant supprime un élément multimédia.

static void DeleteAsset( IAsset asset)
{
    // delete the asset
    asset.Delete();

    // Verify asset deletion
    if (GetAsset(asset.Id) == null)
        Console.WriteLine("Deleted the Asset");

}

Pour supprimer un travail, vous devez vérifier son état tel qu'il est indiqué dans la propriété State. Les travaux terminés ou annulés peuvent être supprimés, tandis que les travaux présentant un autre état, tel qu'en file d'attente, planifié ou en cours de traitement, doivent être annulés au préalable pour pouvoir être supprimés.

L'exemple de code ci-dessous illustre une méthode de suppression d'un travail consistant à vérifier l'état du travail, puis à le supprimer quand l'état est terminé ou annulé. Ce code dépend de la section précédente de cette rubrique pour obtenir une référence à un travail : Obtenir une référence à un travail.

static void DeleteJob(string jobId)
{
    bool jobDeleted = false;

    while (!jobDeleted)
    {
        // Get an updated job reference.  
        IJob job = GetJob(jobId);

        // Check and handle various possible job states. You can 
        // only delete a job whose state is Finished, Error, or Canceled.   
        // You can cancel jobs that are Queued, Scheduled, or Processing,  
        // and then delete after they are canceled.
        switch (job.State)
        {
            case JobState.Finished:
            case JobState.Canceled:
            case JobState.Error:
                // Job errors should already be logged by polling or event 
                // handling methods such as CheckJobProgress or StateChanged.
                // You can also call job.DeleteAsync to do async deletes.
                job.Delete();
                Console.WriteLine("Job has been deleted.");
                jobDeleted = true;
                break;
            case JobState.Canceling:
                Console.WriteLine("Job is cancelling and will be deleted "
                    + "when finished.");
                Console.WriteLine("Wait while job finishes canceling...");
                Thread.Sleep(5000);
                break;
            case JobState.Queued:
            case JobState.Scheduled:
            case JobState.Processing:
                job.Cancel();
                Console.WriteLine("Job is scheduled or processing and will "
                    + "be deleted.");
                break;
            default:
                break;
        }

    }
}


L'exemple de code ci-dessous montre comment obtenir une référence à une stratégie d'accès en fonction d'un identificateur de stratégie, puis comment supprimer la stratégie.

static void DeleteAccessPolicy(string existingPolicyId)
{
    // To delete a specific access policy, get a reference to the policy.  
    // based on the policy Id passed to the method.
    var policyInstance =
            from p in _context.AccessPolicies
            where p.Id == existingPolicyId
            select p;
    IAccessPolicy policy = policyInstance.FirstOrDefault();

    policy.Delete();

}


Voir aussi

Afficher:
© 2014 Microsoft