내보내기(0) 인쇄
모두 확장

Media Services SDK for .NET을 사용하여 자산 관리

업데이트 날짜: 2014년 7월

이 항목에서는 다음 미디어 서비스 관리 태스크를 완수하는 방법을 보여 줍니다.

note참고
기존 미디어 서비스 자산을 관리하는 코드를 작성하려면 먼저 항목 Media Services SDK for .NET을 사용하여 미디어 서비스에 연결의 설명대로 미디어 서비스 서버 컨텍스트에 대한 참조가 있어야 합니다. 컨텍스트 개체는 다음 코드 예제에서 _context라는 변수로 나타냅니다.

자주 수행하는 태스크는 미디어 서비스에서 기존 자산에 대한 참조를 가져오는 것입니다. 다음 코드 예제는 자산 ID를 기반으로 하여 서버 컨텍스트 개체에 대한 Assets 컬렉션에서 자산 참조를 가져오는 방법을 보여 줍니다.

다음 코드 예제는 LINQ 쿼리를 사용하여 기존 IAsset 개체에 대한 참조를 가져옵니다.

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

미디어 서비스 코드에서 처리 태스크를 작업할 때 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());
}

중요한 관련 태스크는 미디어 서비스에서 자산 및 관련 작업을 나열하는 것입니다. 다음 코드 예제는 각 IJob 개체를 나열하는 방법을 보여 줍니다. 그러면 각 작업에 대해 작업, 모든 관련 태스크, 모든 입력 자산 및 모든 출력 자산에 대한 속성이 표시됩니다. 이 예제의 코드는 다수의 다른 태스크에 유용할 수 있습니다. 예를 들어 이전에 실행한 하나 이상의 인코딩 작업에서 출력되는 자산을 나열하려는 경우 이 코드는 출력 자산에 액세스하는 방법을 보여 줍니다. 출력 자산에 대한 참조가 있는 경우 이를 다운로드하거나 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());
}

미디어 서비스에서 자산 또는 해당 파일에 대한 액세스 정책을 정의할 수 있습니다. 액세스 정책은 파일이나 자산에 대한 사용 권한(액세스 유형, 기간 등)을 정의합니다. 미디어 서비스 코드에서는 일반적으로 IAccessPolicy 개체를 만든 후 기존 자산에 연결하여 액세스 정책을 정의합니다. 그런 다음, ILocator 개체를 만들며, 이 개체를 통해 미디어 서비스에서 자산에 대한 직접 액세스를 제공할 수 있습니다. 이 문서 시리즈와 함께 제공되는 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입니다. 각 자산에는 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();

}


참고 항목

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2015 Microsoft