セールス: 1-800-867-1380

Media Services SDK for .NET による資産の管理

更新日: 2014年7月

このトピックでは、次の Media Services 管理タスクを達成する方法について説明します。

noteメモ
既存の Media Services 資産を管理するコードを記述するには、トピック「Media Services SDK for .NET を使用した Media Services への接続」で説明されているように、最初に Media Services サーバー コンテキストへの参照を保持する必要があります。コンテキスト オブジェクトは、次のコード例のように、_context という名前の変数によって表現されます。

頻繁に実行するタスクは、Media Services の既存の資産への参照を取得することです。次のコード例では、資産 ID に基づき、サーバー コンテキスト オブジェクトの 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 コードで処理タスクを使用するときに、多くの場合、ID に基づいて既存のジョブへの参照を取得する必要があります。次のコード例では、Jobs コレクションから IJob オブジェクトへの参照を取得する方法を示します。

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 オブジェクトを一覧表示してから、各ジョブに対してジョブに関するプロパティ、すべての関連タスク、すべての入力資産、およびすべての出力資産を表示する方法を示します。この例のコードは、その他の多数のタスクにも役立ちます。たとえば、このコードでは、前に実行した 1 つ以上のエンコード ジョブから出力資産を一覧表示する場合に出力資産にアクセスする方法を示しています。出力資産への参照がある場合は、ダウンロードまたは URL の指定によって他のユーザーまたはアプリケーションにコンテンツを配信できます。資産の配信に関するオプションの詳細については、「Media Services SDK for .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 オブジェクトを作成してから既存の資産に関連付けてアクセス ポリシーを定義します。次に、Media Services の資産に直接アクセスするための ILocator オブジェクトを作成します。このドキュメント シリーズに付随する Visual Studio プロジェクトには、アクセス ポリシーおよびロケーターを作成して資産に割り当てる方法を示すコード例がいくつか含まれています。

次のコード例では、サーバーのすべてのアクセス ポリシーを一覧表示する方法を示し、それぞれに関連付けられた権限のタイプを示します。アクセス ポリシーを表示するもう 1 つの便利な方法としては、サーバーのすべての 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 です。これには、ロケーターの関連アクセス ポリシーで定義された資産に対する権限が付随します。各資産では、Locators プロパティにより、資産に関連付けられた ILocator オブジェクトのコレクションを保持できます。また、サーバー コンテキストでは、すべてのロケーターが含まれた Locators コレクションを保持できます。

次のコード例では、サーバーのすべてのロケーターを一覧表示します。各ロケーターに対して、関連する資産の ID とアクセス ポリシーが表示されます。また、権限のタイプ、有効期限、および資産への完全パスも表示されます。

noteメモ
資産へのロケーター パスは、資産へのベース URL のみです。ユーザーまたはアプリケーションが参照できる個々のファイルへの直接的なパスを作成するには、コードにおいて固有のファイル パスをロケーター パスに追加する必要があります。その方法の詳細については、「Media Services SDK for .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;
        }

    }
}


次のコード例では、ポリシー ID に基づいてアクセス ポリシーへの参照を取得してからポリシーを削除する方法を示します。

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

}


関連項目

この情報は役に立ちましたか。
(残り 1500 文字)
フィードバックをいただき、ありがとうございました
表示:
© 2014 Microsoft