Exportieren (0) Drucken
Alle erweitern

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

Letzte Aktualisierung: Februar 2015

Dieses Thema zeigt, wie Inhalte in Media Services erfasst (hochgeladen) werden. In einer Media Services-Anwendung stellt das Erfassen von Aufgaben den Vorgang des Hochladens von Inhalten (Medienobjekte, Mediendateien usw.) in das System dar. Das grundlegendste Inhaltsobjekt in Media Services ist ein IAsset. Hierbei handelt es sich um eine Auflistung von Metadaten über einen Satz von Mediendateien. Jedes IAsset enthält mindestens ein IAssetFile-Objekt. Detaillierte Informationen darüber, was ein Asset in Media Services ist, finden Sie unter Medienobjekt.

noteHinweis
Media Services verwendet den Wert der Eigenschaft IAssetFile.Name, wenn URLs für den Streaminginhalt erstellt werden (Beispiel: http://{WAMS-Konto}.origin.mediaservices.windows.net/{GUID}/{IAssetFile.Name}/streamingParameters). Aus diesem Grund wird Prozentcodierung nicht unterstützt. Der Wert der Eigenschaft Name darf keines der folgenden reservierten Zeichen für Prozentcodierung enthalten: !*'();:@&=+$,/?%#[]". Außerdem darf nur ein "." für die Dateinamenerweiterung vorhanden sein.

Es gibt ein paar unterschiedliche Ansätze in Bezug auf das Erfassen von Medienobjekten in Media Services:

  • Erstellen Sie ein Asset, erstellen Sie eine oder mehrere AssetFiles, die mit dem Asset verknüpft sind, und laden Sie dann die AssetFiles zu Microsoft Azure Media Services hoch. Verwenden Sie diesen Ansatz, wenn Sie kleinere Sätze von Mediendateien verwenden und wenn Sie keine separate Uploadlösung verwenden. Alle Beispiele in diesem Thema sind von diesem Typ.

  • Führen Sie eine Massenerfassung eines Satzes an Dateien aus, indem Sie ein Manifest vorbereiten und sie mithilfe einer separaten Uploadlösung zu Microsoft Azure Media Services hochladen. Weitere Informationen in Bezug auf diesen Ansatz finden Sie unter Massenerfassen von Medienobjekten mit dem Media Services SDK für .NET.

TipTipp
Beim Hochladen einer größeren Anzahl an Medienobjekten sollten Sie Folgendes berücksichtigen.

  • Erstellen Sie ein neues CloudMediaContext-Objekt pro Thread. Die Threadsicherheit der Klasse CloudMediaContext ist nicht gewährleistet.

  • Erhöhen Sie NumberOfConcurrentTransfers vom Standardwert "2" auf einen höheren Wert wie "5". Das Einstellen dieser Eigenschaft wirkt sich auf alle Instanzen von CloudMediaContext aus.

  • Behalten Sie bei ParallelTransferThreadCount den Standardwert von "10" bei.

Der Code in diesem Thema zeigt das Ausführen der folgenden allgemeinen Aufgaben:

noteHinweis
Zum Erstellen eines Medienobjekts müssen Sie zunächst über einen Verweis zum Media Services-Serverkontext verfügen, wie dies im Thema Connect to Media Services Using the Media Services SDK beschrieben ist. Das Kontextobjekt ist in den folgenden Codebeispielen durch die Variable _context dargestellt.

Bevor Sie eine Datei zum Media Services-Server hochladen können, müssen Sie mithilfe der Methode Create oder CreateAsync ein Medienobjekt erstellen. Beide Methoden übernehmen den Medienobjektnamen und die Verschlüsselungsoption als Parameter.

Beim Erstellen von Medienobjekten haben Sie drei verschiedene Optionen zur Verschlüsselung zur Auswahl.

  • AssetCreationOptions.None: keine Verschlüsselung.

  • AssetCreationOptions.CommonEncryptionProtected: für Common Encryption Protected-Dateien (CENC). Ein Beispiel hierfür sind bereits mit PlayReady verschlüsselte Dateien.

  • AssetCreationOptions.StorageEncrypted: Speicherverschlüsselung. Verschlüsselt eine unverschlüsselte Datei vor dem Hochladen in den Azure-Speicher.

    noteHinweis
    Beachten Sie, dass Media Services nur eine Verschlüsselung auf dem Speichermedium bietet und nicht für die Übertragung wie bei einer DRM-Lösung (Digital Rights Management, Verwaltung digitaler Rechte).

Die Methode CreateEmptyAsset zeigt, wie ein leeres Medienobjekt erstellt wird.

static private IAsset CreateEmptyAsset(string assetName, AssetCreationOptions assetCreationOptions)
{
    var asset = _context.Assets.Create(assetName, assetCreationOptions);

    Console.WriteLine("Asset name: " + asset.Name);
    Console.WriteLine("Time created: " + asset.Created.Date.ToString());

    return asset;
}

Der Code in diesem Abschnitt führt die folgenden Aktionen aus:

  1. Erstellt ein leeres Asset mithilfe der im vorherigen Schritt definierten CreateEmptyAsset-Methode.

  2. Erstellt eine mit dem Asset verknüpfte AssetFile-Instanz.

  3. Lädt die mit AssetFile verknüpfte Mediendatei in Media Services hoch.

noteHinweis
Die AssetFile-Instanz und die tatsächliche Mediendatei sind zwei verschiedene Objekte. Die AssetFile-Instanz enthält Metadaten über die Mediendatei. Die Mediendatei enthält hingegen den tatsächlichen Medieninhalt.

static public IAsset CreateAssetAndUploadSingleFile( AssetCreationOptions assetCreationOptions, string singleFilePath)
{   
    var assetName = "UploadSingleFile_" + DateTime.UtcNow.ToString();
    var asset = CreateEmptyAsset(assetName, assetCreationOptions);
    var fileName = Path.GetFileName(singleFilePath);
    var assetFile = asset.AssetFiles.Create(fileName);

    Console.WriteLine("Created assetFile {0}", assetFile.Name);
    Console.WriteLine("Upload {0}", assetFile.Name);

    assetFile.Upload(singleFilePath);
    Console.WriteLine("Done uploading of {0}", assetFile.Name);

    return asset;

}

Der Code in diesem Abschnitt führt die folgenden Aktionen aus:

  1. Erstellt ein leeres Medienobjekt mithilfe der im vorherigen Schritt definierten CreateEmptyAsset-Methode.

  2. Erstellt eine AccessPolicy-Instanz zum Definieren der Berechtigungen und der Zugriffsdauer für das Medienobjekt.

  3. Erstellt eine Locator-Instanz, die Zugriff auf das Objekt bietet.

  4. Erstellt eine BlobTransferClient-Instanz. Dieser Typ stellt einen Client dar, der auf den Azure-Blobs agiert. In diesem Beispiel verwenden wir den Client zum Überwachen des Uploadvorgangs.

  5. Es listet die Dateien im angegebenen Verzeichnis auf und erstellt die "AssetFile"-Instanz für jede Datei.

  6. Lädt die Dateien mithilfe der Methode UploadAsync in Media Services hoch.

    TipTipp
    Verwenden Sie die Methode UploadAsync, um sicherzustellen, dass die Aufrufe nicht blockieren und die Dateien parallel hochgeladen werden.

static public IAsset CreateAssetAndUploadMultipleFiles(AssetCreationOptions assetCreationOptions, string folderPath)
{
      var assetName = "UploadMultipleFiles_" + DateTime.UtcNow.ToString();
      var asset = CreateEmptyAsset(assetName, assetCreationOptions);
      var accessPolicy = _context.AccessPolicies.Create(assetName, TimeSpan.FromDays(30), AccessPermissions.Write | AccessPermissions.List);
      var locator = _context.Locators.CreateLocator(LocatorType.Sas, asset, accessPolicy);

      var blobTransferClient = new BlobTransferClient();
      blobTransferClient.NumberOfConcurrentTransfers = 20;
      blobTransferClient.ParallelTransferThreadCount = 20;
      blobTransferClient.TransferProgressChanged += blobTransferClient_TransferProgressChanged;

       var filePaths = Directory.EnumerateFiles(folderPath);

       Console.WriteLine("There are {0} files in {1}", filePaths.Count(), folderPath);

       if (!filePaths.Any())
       {
           throw new FileNotFoundException(String.Format("No files in directory, check folderPath: {0}", folderPath));
       }

       var uploadTasks = new List<Task>();
       foreach (var filePath in filePaths)
       {
            var assetFile = asset.AssetFiles.Create(Path.GetFileName(filePath));

            Console.WriteLine("Start uploading of {0}", assetFile.Name);
            uploadTasks.Add(assetFile.UploadAsync(filePath, blobTransferClient, locator, CancellationToken.None));
       }

      Task.WaitAll(uploadTasks.ToArray());
      Console.WriteLine("Done uploading the files");

      blobTransferClient.TransferProgressChanged -= blobTransferClient_TransferProgressChanged;
      locator.Delete();
      accessPolicy.Delete();

      return asset;

}

static void  blobTransferClient_TransferProgressChanged(object sender, BlobTransferProgressChangedEventArgs e)
{
    Console.WriteLine("{0}% upload competed for {1}.", e.ProgressPercentage, e.LocalFile);
}

Nun können Sie mit dem nächsten Thema fortfahren: Massenerfassen von Medienobjekten mit dem Media Services SDK für .NET

Siehe auch

Anzeigen:
© 2015 Microsoft