Hantera tillgångar och relaterade entiteter med Media Services .NET SDKManaging Assets and Related Entities with Media Services .NET SDK

Anteckning

Inga nya funktioner läggs till i Media Services v2.No new features or functionality are being added to Media Services v2.
Upptäck den senaste versionen, Media Services v3.Check out the latest version, Media Services v3. Se även migreringsvägledningen från v2 till v3Also, see migration guidance from v2 to v3

Det här avsnittet visar hur du hanterar Azure Media Services-enheter med .NET.This topic shows how to manage Azure Media Services entities with .NET.

Från och med 1 april 2017 raderas alla jobbposter i ditt konto som är äldre än 90 dagar automatiskt, tillsammans med deras associerade uppgiftsposter, även om det totala antalet poster är lägre än den maximala kvoten.Starting April 1, 2017, any Job record in your account older than 90 days will be automatically deleted, along with its associated Task records, even if the total number of records is below the maximum quota. Exempelvis den 1 April 2017 tas alla jobbposter i ditt konto som är äldre än den 31 December 2016 automatiskt bort.For example, on April 1, 2017, any Job record in your account older than December 31, 2016, will be automatically deleted. Om du behöver Arkivera jobb/uppgiftsinformationen kan du använda koden som beskrivs i det här avsnittet.If you need to archive the job/task information, you can use the code described in this topic.

Nödvändiga komponenterPrerequisites

Konfigurera utvecklingsmiljön och fyll i filen app.config med anslutningsinformation, enligt beskrivningen i Media Services-utveckling med .NET.Set up your development environment and populate the app.config file with connection information, as described in Media Services development with .NET.

Hämta en referens för tillgångenGet an Asset Reference

En återkommande uppgift är att hämta en referens till en befintlig tillgång i Media Services.A frequent task is to get a reference to an existing asset in Media Services. I följande kodexempel visas hur du skaffar en tillgång referens från mängden tillgångar på servern context-objektet, baserat på en tillgång Id. I följande kodexempel används en Linq-frågan för att hämta en referens till ett befintligt IAsset-objekt.The following code example shows how you can get an asset reference from the Assets collection on the server context object, based on an asset Id. The following code example uses a Linq query to get a reference to an existing IAsset object.

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

Lista över alla tillgångarList All Assets

När antalet tillgångar som du har i storage växer, är det bra att lista dina tillgångar.As the number of assets you have in storage grows, it is helpful to list your assets. I följande kodexempel visar hur du gå igenom samlingen tillgångar på server context-objektet.The following code example shows how to iterate through the Assets collection on the server context object. Med varje tillgången skriver kodexemplet aktuella även några av dess egenskapsvärden till konsolen.With each asset, the code example also writes some of its property values to the console. Varje tillgång kan exempelvis innehålla många mediefiler.For example, each asset can contain many media files. Kodexemplet skriver ut alla filer som är associerade med varje tillgång.The code example writes out all files associated with each asset.

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

Hämta en referens för jobbetGet a Job Reference

När du arbetar med bearbetning av uppgifter i Media Services-koden kan behöver du ofta hämta en referens till ett befintligt jobb baserat på ett Id. I följande kodexempel visar hur du hämtar en referens till en IJob-objektet från mängden jobb.When you work with processing tasks in Media Services code, you often need to get a reference to an existing job based on an Id. The following code example shows how to get a reference to an IJob object from the Jobs collection.

Du kan behöva hämta en referens för jobbet när du startar en tidskrävande kodningsjobb och behöva kontrollera Jobbstatus i en tråd.You may need to get a job reference when starting a long-running encoding job, and need to check the job status on a thread. När metoden returnerar från en tråd i detta fall måste du hämta en uppdaterad referens till ett jobb.In cases like this, when the method returns from a thread, you need to retrieve a refreshed reference to a job.

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

Lista jobb och tillgångarList Jobs and Assets

En viktig relaterade uppgift är att lista resurser med deras associerade jobbet i Media Services.An important related task is to list assets with their associated job in Media Services. I följande kodexempel visar hur att lista alla IJob-objekt, och sedan för varje jobb visas egenskaper om jobbet, alla relaterade uppgifter, alla indata-tillgångar och alla resurser som utdata.The following code example shows you how to list each IJob object, and then for each job, it displays properties about the job, all related tasks, all input assets, and all output assets. Koden i det här exemplet kan vara användbart för ett flertal andra aktiviteter.The code in this example can be useful for numerous other tasks. Om du vill visa en lista över utdataresultat från en eller flera kodningsjobb som du körde tidigare visar den här kod hur du kommer åt utdata-tillgångar.For example, if you want to list the output assets from one or more encoding jobs that you ran previously, this code shows how to access the output assets. När du har en referens till en utdatatillgången, kan du sedan levererar innehåll till andra användare eller program genom att hämta den eller tillhandahålla URL: er.When you have a reference to an output asset, you can then deliver the content to other users or applications by downloading it, or providing URLs.

Läs mer om alternativen för att leverera tillgångar leverera tillgångar med Media Services SDK för .NET.For more information on options for delivering assets, see Deliver Assets with the 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());
    }

Lista över alla åtkomstprinciperList all Access Policies

I Media Services kan du definiera en åtkomstprincip för en tillgång eller dess filer.In Media Services, you can define an access policy on an asset or its files. En åtkomstprincip definierar behörigheter för en fil eller en tillgång (vilken typ av åtkomst och varaktighet).An access policy defines the permissions for a file or an asset (what type of access, and the duration). I Media Services-koden definiera du vanligtvis en åtkomstprincip genom att skapa ett IAccessPolicy-objekt och koppla det till en befintlig tillgång.In your Media Services code, you typically define an access policy by creating an IAccessPolicy object and then associating it with an existing asset. Sedan kan du skapa ett ILocator-objekt, som låter dig ge direktåtkomst till tillgångar i Media Services.Then you create an ILocator object, which lets you provide direct access to assets in Media Services. Visual Studio-projekt som medföljer den här dokumentationen-serien innehåller flera kodexempel som visar hur du skapar och tilldelar åtkomstprinciper och positionerare till tillgångar.The Visual Studio project that accompanies this documentation series contains several code examples that show how to create and assign access policies and locators to assets.

I följande kodexempel visar hur du listar alla åtkomstprinciper på servern och visar vilken typ av behörigheter som hör till var.The following code example shows how to list all access policies on the server, and shows the type of permissions associated with each. En annan bra sätt att visa åtkomstprinciper är att lista alla ILocator objekt på servern och sedan för varje positionerare du visa en lista med dess associerade åtkomstprincip via egenskapen AccessPolicy.Another useful way to view access policies is to list all ILocator objects on the server, and then for each locator, you can list its associated access policy by using its AccessPolicy property.

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

        }
    }

Policyer för åtkomstLimit Access Policies

Anteckning

Det finns en gräns på 1 000 000 principer för olika AMS-principer (till exempel för positionerarprincipen eller ContentKeyAuthorizationPolicy).There is a limit of 1,000,000 policies for different AMS policies (for example, for Locator policy or ContentKeyAuthorizationPolicy). Du bör använda samma princip-ID om du alltid använder samma dagar/åtkomstbehörigheter, till exempel principer för positionerare som är avsedda att vara på plats under en längre tid (icke-överföringsprinciper).You should use the same policy ID if you are always using the same days / access permissions, for example, policies for locators that are intended to remain in place for a long time (non-upload policies).

Du kan till exempel skapa en allmän uppsättning principer med följande kod som körs endast en gång i ditt program.For example, you can create a generic set of policies with the following code that would only run one time in your application. Du kan logga ID: N till en loggfil för senare användning:You can log IDs to a log file for later use:

    double year = 365.25;
    double week = 7;
    IAccessPolicy policyYear = _context.AccessPolicies.Create("One Year", TimeSpan.FromDays(year), AccessPermissions.Read);
    IAccessPolicy policy100Year = _context.AccessPolicies.Create("Hundred Years", TimeSpan.FromDays(year * 100), AccessPermissions.Read);
    IAccessPolicy policyWeek = _context.AccessPolicies.Create("One Week", TimeSpan.FromDays(week), AccessPermissions.Read);

    Console.WriteLine("One year policy ID is: " + policyYear.Id);
    Console.WriteLine("100 year policy ID is: " + policy100Year.Id);
    Console.WriteLine("One week policy ID is: " + policyWeek.Id);

Du kan sedan använda de befintliga ID: N i din kod så här:Then, you can use the existing IDs in your code like this:

    const string policy1YearId = "nb:pid:UUID:2a4f0104-51a9-4078-ae26-c730f88d35cf";


    // Get the standard policy for 1 year read only
    var tempPolicyId = from b in _context.AccessPolicies
                       where b.Id == policy1YearId
                       select b;
    IAccessPolicy policy1Year = tempPolicyId.FirstOrDefault();

    // Get the existing asset
    var tempAsset = from a in _context.Assets
                where a.Id == assetID
                select a;
    IAsset asset = tempAsset.SingleOrDefault();

    ILocator originLocator = _context.Locators.CreateLocator(LocatorType.OnDemandOrigin, asset,
        policy1Year,
        DateTime.UtcNow.AddMinutes(-5));
    Console.WriteLine("The locator base path is " + originLocator.BaseUri.ToString());

Lista över alla positionerareList All Locators

En positionerare är en URL som innehåller en direkt sökväg för att få åtkomst till en tillgång, tillsammans med behörigheter för att tillgången som definieras av positionerarprincipen associerade åtkomst.A locator is a URL that provides a direct path to access an asset, along with permissions to the asset as defined by the locator's associated access policy. Varje tillgång kan ha en samling ILocator objekt som är associerade med den på dess positionerare-egenskap.Each asset can have a collection of ILocator objects associated with it on its Locators property. Server-kontexten har också en positionerare-samling som innehåller alla positionerare.The server context also has a Locators collection that contains all locators.

I följande kodexempel visar en lista över alla positionerare på servern.The following code example lists all locators on the server. För varje positionerare visas Id för principen för relaterade tillgångar och åtkomst.For each locator, it shows the Id for the related asset and access policy. Den visar även typ av behörigheter, datumet och den fullständiga sökvägen till tillgången.It also displays the type of permissions, the expiration date, and the full path to the asset.

Observera att en positionerare sökväg till en tillgång är en grundläggande Webbadress till tillgången.Note that a locator path to an asset is only a base URL to the asset. Om du vill skapa en direkt sökväg till enskilda filer som en användare eller ett program kan bläddra till din kod måste lägga till sökvägen till specifika positionerare sökvägen.To create a direct path to individual files that a user or application could browse to, your code must add the specific file path to the locator path. Mer information om hur du gör detta finns i avsnittet leverera tillgångar med Media Services SDK för .NET.For more information on how to do this, see the topic Deliver Assets with the 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("");
        }
    }

Uppräkning av stora mängder av entiteterEnumerating through large collections of entities

Vid frågor till entiteter, finns det en gräns på 1000 enheter som returneras i taget eftersom offentlig REST-v2 begränsar frågeresultaten till 1000 resultat.When querying entities, there is a limit of 1000 entities returned at one time because public REST v2 limits query results to 1000 results. Du måste använda hoppa över och vidta vid uppräkning av stora mängder av entiteter.You need to use Skip and Take when enumerating through large collections of entities.

Följande funktion igenom alla jobb i den angivna Media Services-konto.The following function loops through all the jobs in the provided Media Services Account. Media Services returnerar 1000 jobb i Jobbsamlingen.Media Services returns 1000 jobs in Jobs Collection. Funktionen gör att användning av hoppa över och gör att se till att alla jobb räknas (om du har fler än 1000 jobb i ditt konto).The function makes use of Skip and Take to make sure that all jobs are enumerated (in case you have more than 1000 jobs in your account).

    static void ProcessJobs()
    {
        try
        {

            int skipSize = 0;
            int batchSize = 1000;
            int currentBatch = 0;

            while (true)
            {
                // Loop through all Jobs (1000 at a time) in the Media Services account
                IQueryable _jobsCollectionQuery = _context.Jobs.Skip(skipSize).Take(batchSize);
                foreach (IJob job in _jobsCollectionQuery)
                {
                    currentBatch++;
                    Console.WriteLine("Processing Job Id:" + job.Id);
                }

                if (currentBatch == batchSize)
                {
                    skipSize += batchSize;
                    currentBatch = 0;
                }
                else
                {
                    break;
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

Ta bort en tillgångDelete an Asset

I följande exempel tar bort en tillgång.The following example deletes an asset.

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

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

    }

Ta bort ett jobbDelete a Job

Om du vill ta bort ett jobb, måste du kontrollera status för jobbet som anges i egenskapen State.To delete a job, you must check the state of the job as indicated in the State property. Jobb som har slutförts eller avbrutits kan tas bort när jobb som har vissa andra tillstånd, som i kö, schemalagda eller bearbetningsfunktioner, måste först avbrytas, och sedan kan du ta bort.Jobs that are finished or canceled can be deleted, while jobs that are in certain other states, such as queued, scheduled, or processing, must be canceled first, and then they can be deleted.

I följande kodexempel visar en metod för att ta bort ett jobb genom att markera status för jobb och tar sedan bort när tillståndet är klar eller har avbrutits.The following code example shows a method for deleting a job by checking job states and then deleting when the state is finished or canceled. Den här koden är beroende av föregående avsnitt i det här avsnittet för att hämta en referens till ett jobb: Hämta en referens för jobbet.This code depends on the previous section in this topic for getting a reference to a job: Get a job reference.

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

        }
    }

Ta bort en åtkomstprincipDelete an Access Policy

I följande kodexempel visar hur du hämtar en referens till en princip utifrån en princip-Id, och för att ta bort principen.The following code example shows how to get a reference to an access policy based on a policy Id, and then to delete the policy.

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

    }

Sökvägar för Media Services-utbildningMedia Services learning paths

Media Services v3 (senaste)Media Services v3 (latest)

Kolla in den senaste versionen av Azure Media Services!Check out the latest version of Azure Media Services!

Media Services v2 (bakåtkompatibelt)Media Services v2 (legacy)

Ge feedbackProvide feedback

Använd User Voice-forumet för att ge feedback och förslag på hur Azure Media Services kan förbättras.Use the User Voice forum to provide feedback and make suggestions on how to improve Azure Media Services. Du kan även gå direkt till någon av följande kategorier:You also can go directly to one of the following categories: