Эта тема еще не получила оценку - Оценить эту тему

Управление ресурсами с помощью пакета SDK для служб Media Services для платформы .NET

Этот раздел — часть цикла о Windows Azure Media Services под названием Создание приложений с помощью пакета SDK для служб Media Services для платформы .NET. В нем описаны способы управления ресурсами мультимедиа, ранее принятыми в Службы Media Services. Также можно управлять другими объектами на сервере, которые являются частью Службы Media Services, включая задания, задачи, политики доступа, указатели и т. д. Существует большое количество задач по управлению, которые можно выполнить в приложении Службы Media Services, однако в данном разделе описаны типичные вспомогательные задачи, необходимые для начала программирования в Службы Media Services.

В этом разделе описаны способы выполнения следующих задач по управлению Службы Media Services:

noteПримечание
Для написания кода, который будет управлять имеющимися ресурсами Службы Media Services, нужно иметь ссылку на контекст сервера Службы Media Services, как описано в разделе Подключение к службам Media Services с помощью пакета SDK для служб Media Services. В следующих примерах кода объект контекста представлен переменной с именем _context.

Получение ссылки на ресурс

Обычной задачей является получение ссылки на имеющийся ресурс в Службы Media Services. В следующем примере кода показано, как получить ссылку на ресурс из коллекции Assets объекта контекста сервера на основе идентификатора ресурса.

В следующем примере кода для получения ссылки на имеющийся объект IAsset используется запрос к компоненту LINQ.

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

Получение ссылки на задание

При выполнении задач по обработке в коде Службы Media Services часто необходимо получить ссылку на имеющееся задание на основании идентификатора. В следующем примере кода показано, как получить ссылку на объект IJob из коллекции Jobs.

WarningПредупреждение
Получение ссылки на задание может быть необходимо при запуске длительного задания кодирования, состояние которого в потоке необходимо проверять. В таких случаях, когда метод возвращается из потока, может возникнуть необходимость получить обновленную ссылку на задание.

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

Список всех ресурсов

По мере того, как количество ресурсов в хранилище растет, полезно составить список ваших ресурсов. В следующем примере кода показано, как выполнить итерацию в коллекции Assets объекта контекста сервера. Для каждого ресурса пример кода также записывает на консоль некоторые значения его свойств. Например, каждый ресурс может содержать несколько файлов мультимедиа. Пример кода выписывает все файлы, связанные с каждым ресурсом.

noteПримечание
Чтобы просмотреть всю информацию о ресурсе, отображенную в консоли, можно установить в программе Visual Studio точку останова на закрывающейся фигурной скобке метода примера. Иначе консоль закроется, прежде чем вы сможете просмотреть данные. Другой способ — это записать всю предоставленную информацию о ресурсе в файл. В сопутствующем проекте показано, как записать список ресурсов в файл с помощью метода, который составляет список ресурсов, похожий на этот пример кода.


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

Список заданий и ресурсов

Важной связанной задачей является составление списка ресурсов и связанных с ними заданий в Службы Media Services. В следующем примере кода показано, как внести в список каждый объект IJob, а потом для каждого задания код отображает свойства задания, все связанные задачи, все входные и выходные ресурсы. Код из данного примера может быть полезен при выполнении многих других задач. Например, если необходимо создать список выходных ресурсов из одного или нескольких заданий по кодированию, которые выполнялись ранее, в этом коде показано, как получить доступ к выходным ресурсам. При наличии ссылки на выходной ресурс содержимое можно доставить другим пользователям или в другие приложения, загрузив его или предоставив URL-адреса. Дополнительные сведения о доставке ресурсов см. в разделе Передача ресурсов с помощью пакета SDK для служб Media Services для платформы .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());
}

Список всех политик доступа

В Службы Media Services можно определить политику доступа для ресурса или его файлов. Политика доступа определяет разрешения для файла или ресурса (тип доступа и срок действия разрешения). В коде Службы Media Services политика доступа обычно определяется путем создания объекта IAccessPolicy и связывания его с имеющимся ресурсом. После этого создается объект ILocator, с помощью которого можно предоставить непосредственный доступ к ресурсам в Службы Media Services. Проект Visual Studio, сопровождающий этот цикл документации, содержит несколько примеров кода, в которых показано, как создать и назначить для ресурсов политики доступа и указатели.

В следующем примере кода показано, как создать список политик доступа на сервере, также показан тип разрешений, связанных с каждой из них. Еще один полезный способ просмотреть политики доступа — это создать список всех объектов ILocator на сервере, а потом для каждого указателя можно составить список связанных политик доступа с помощью свойства указателя 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("==============");

    }
}

Список всех указателей

Указатель — это URL-адрес, который предоставляет прямой путь для доступа к ресурсу вместе с разрешениями для ресурса, определенными соответствующей политикой доступа указателя. У каждого ресурса может быть коллекция объектов ILocator, связанных с ним, которые содержатся в свойстве Locators. Контекст сервера также содержит коллекцию Locators, в которую включены все указатели.

В следующем примере кода перечислены все указатели на сервере. Для каждого указателя отображается идентификатор соответствующего ресурса и политики доступа. Также отображается тип разрешений, дата окончания срока действия и полный путь к ресурсу.

noteПримечание
Путем указателя к ресурсу является базовый URL-адрес ресурса. Чтобы создать прямой путь к отдельным файлам, к которым смогут перейти пользователи или приложения, необходимо с помощью кода добавить путь определенного файла к пути указателя. Дополнительные сведения о необходимых действиях см. в разделе Передача ресурсов с помощью пакета SDK для служб Media Services для платформы .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("");
    }
}


Удаление ресурса

В примере ниже показано удаление ресурса.

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

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

}

Удаление задания

Чтобы удалить задание, необходимо проверить состояние задания, указанное в свойстве State. Законченные или отмененные задания можно удалить, в то время как задания с другими состояниями, такими как «в очереди», «запланировано» или «в обработке» необходимо сначала отменить, и только потом их можно удалить.

В следующем примере кода показан метод удаления задания путем проверки состояний задания и удаления, когда его состояние — «завершено» или «отменено». Этот код зависит от действий по получению ссылки на задание, описанных в предыдущем разделе данной темы: Получение ссылки на задание.

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

    }
}


Удаление политики доступа

В следующем примере кода показано, как получить ссылку на политику доступа на основании идентификатора политики, и после этого удалить ее.

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

}


См. также


Дата сборки:

2013-04-11
Была ли вам полезна эта информация?
(1500 символов осталось)

Добавления сообщества

ДОБАВИТЬ
© 2013 Microsoft. Все права защищены.
facebook page visit twitter rss feed newsletter