Exportieren (0) Drucken
Alle erweitern

Verwalten von Medienobjekten mit dem Media Services SDK für .NET

Letzte Aktualisierung: Februar 2015

Dieses Thema beschreibt, wie Sie die folgenden Media Services-Verwaltungsaufgaben ausführen können:

noteHinweis
Um Code zur Verwaltung existierender Media Services-Medienobjekte schreiben zu können, benötigen Sie zunächst einen Verweis auf den Media Services-Serverkontext, wie im Thema Connect to Media Services Using the Media Services SDK beschrieben. Das Kontextobjekt ist in den folgenden Codebeispielen durch die Variable _context dargestellt.

Eine häufige Aufgabe ist das Abrufen eines Verweises auf ein existierendes Medienobjekt in Media Services. Das folgende Codebeispiel zeigt, wie Sie einen Verweis auf eine Medienobjekt anhand der Medienobjekt-ID aus der Assets-Sammlung im Serverkontextobjekt abrufen können.

Das folgende Codebeispiel verwendet eine Linq-Abfrage, um einen Verweis auf ein existierendes IAsset-Objekt abzurufen.

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

Wenn Sie mit Verarbeitungsaufgaben in Media Services-Code arbeiten, benötigen Sie oftmals einen Verweist zu einem vorhandenen Auftrag anhand einer ID. Das folgende Codebeispiel zeigt, wie ein Verweis zu einem IJob-Objekt von der Jobs-Auflistung abgerufen wird.

WarningWarnung
Möglicherweise benötigen Sie einen Verweis beim Start eines langwierigen Codierungsauftrags, um den Auftragsfortschritt in einem Thread zu überwachen. In diesen Fällen müssen Sie einen aktualisierten Verweis auf einen Auftrag abrufen, wenn die Methode aus einem Thread zurückkehrt.

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

Mit steigender Anzahl von Medienobjekten in Ihrem Speicher ist es hilfreich, diese Medienobjekte aufzulisten. Das folgende Codebeispiel zeigt, wie Sie die Assets-Sammlung im Serverkontextobjekt durchlaufen können. Für jedes Medienobjekt schreibt das Codebeispiel außerdem einige Eigenschaftswerte in die Konsole. Jedes Medienobjekt kann z. B. mehrere Mediendateien enthalten. Das Codebeispiel gibt alle zugehörigen Dateien pro Medienobjekt aus.

noteHinweis
Um alle angezeigten Medienobjektinformationen in der Konsole zu sehen, können Sie auf der schließenden Klammer der Beispielmethode einen Haltepunkt in Visual Studio setzen. Andernfalls wird die Konsole geschlossen, bevor Sie die Daten lesen können. Alternativ können Sie die aufgelisteten Medienobjektinformationen in eine Datei schreiben. Das begleitende Projekt zeigt, wie Sie die Medienobjektliste mit einer Methode in eine Datei schreiben können, die Medienobjekte ähnlich wie dieses Codebeispiel auflistet.


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

Eine wichtige Aufgabe ist das Auflisten von Medienobjekten und deren zugehörigen Aufträgen in Media Services. Das folgende Codebeispiel zeigt, wie Sie die einzelnen IJob-Objekte auflisten können. Anschließend werden pro Auftrag die Eigenschaften, alle verwandten Aufträge sowie Eingangs- und Ausgangs-Medienobjekte angezeigt. Der Code in diesem Beispiel ist hilfreich für viele weitere Aufgaben. Wenn Sie z. B. die Ausgangs-Medienobjekte für einen oder mehrere bereits abgeschlossene Codierungsaufträge anzeigen möchten, finden Sie in diesem Code ein Beispiel zum Auflisten der Ausgangs-Medienobjekte. Wenn Sie einen Verweis auf ein Ausgangs-Medienobjekt haben, können Sie dessen Inhalt in Form von Downloads oder URLs an andere Benutzer oder Anwendungen ausliefern. Weitere Informationen zum Ausliefern von Medienobjekten finden Sie unter Bereitstellen von Medienobjekten mit dem Media Services SDK für .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());
}

In Media Services können Sie Zugriffsrichtlinien für Medienobjekte oder dessen Dateien definieren. Eine Zugriffsrichtlinie definiert die Berechtigungen für eine Datei oder ein Medienobjekt (Art und Dauer des Zugriffs). In Ihrem Media Services-Code werden Zugriffsrichtlinien normalerweise durch Erstellung eines IAccessPolicy-Objekts definiert, das anschließend zu einem existierenden Medienobjekt zugeordnet wird. Anschließend erstellen Sie ein ILocator-Objekt, mit dem Sie direkten Zugriff auf Medienobjekte in Media Services vergeben können. Das begleitende Visual Studio-Projekt zu dieser Dokumentationsreihe enthält verschiedene Codebeispiele zum Erstellen und Zuweisen von Zugriffsrichtlinien und Locatorobjekten zu Medienobjekten.

Das folgende Codebeispiel zeigt, wie Sie alle Zugriffsrichtlinien auf dem Server auflisten und deren zugeordnete Berechtigungen anzeigen können. Alternativ können Sie die Zugriffsrichtlinien anzeigen, indem Sie alle ILocator-Objekte auf dem Server auflisten und anschließend für jeden Locator über dessen AccessPolicy-Eigenschaft auf die zugeordnete Zugriffsrichtlinie zugreifen.

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

    }
}

Ein Locator ist eine URL mit einem direkten Pfad für den Zugriff auf ein Medienobjekt, zusammen mit Berechtigungen für das Medienobjekt gemäß der Zugriffsrichtlinie des Locators. Jedes Medienobjekt kann eine Sammlung von ILocator-Objekten zu dessen Locators-Eigenschaft zugeordnet haben. Der Serverkontext enthält außerdem eine Locators-Sammlung, die alle Locatorobjekte enthält.

Das folgende Codebeispiel listet alle Locatorobjekte auf dem Server auf. Für jeden Locator wird die ID des zugeordneten Medienobjekts und die Zugriffsrichtlinie angezeigt. Außerdem wird der Typ der Berechtigungen, das Ablaufdatum und der komplette Pfad zum Medienobjekt angezeigt.

noteHinweis
Ein Locatorpfad zu einem Medienobjekt ist nur eine Basis-URL zum Medienobjekt. Um einen direkten Pfad zu einzelnen Dateien für den Benutzer- oder Anwendungszugriff zu erstellen, muss Ihr Code den genauen Dateipfad an den Locatorpfad anhängen. Weitere Informationen zu dieser Vorgehensweise finden Sie im Thema Bereitstellen von Medienobjekten mit dem Media Services SDK für .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("");
    }
}


Das folgende Beispiel löscht ein Medienobjekt.

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

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

}

Um einen Auftrag zu löschen, müssen Sie den Status des Auftrags anhand der State-Eigenschaft prüfen. Abgeschlossene oder abgebrochene Aufträge können gelöscht werden. Aufträge mit dem Status "In Warteschlange", "Geplant" oder "In Bearbeitung" müssen vor dem Löschen abgebrochen werden.

Das folgende Codebeispiel zeigt, wie Sie einen Auftrag löschen können, indem Sie zunächst den Auftragsstatus prüfen und den Auftrag löschen, wenn dieser abgeschlossen oder abgebrochen ist. Dieser Code benötigt die vorherigen Codebeispiele aus diesem Thema, um einen Verweis auf den Auftrag abzurufen: Abrufen eines Auftragsverweises.

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

    }
}


Das folgende Codebeispiel zeigt, wie Sie einen Verweis auf eine Zugriffsrichtlinie anhand deren ID abrufen und die Zugriffsrichtlinie anschließend löschen können.

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

}


Siehe auch

Anzeigen:
© 2015 Microsoft