VERTRIEB: 1-800-867-1380

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

Letzte Aktualisierung: August 2014

In diesem Thema wird gezeigt, wie Inhalt in Mediendienste erfasst (hochgeladen) wird. In einer Mediendienste-Anwendung werden Inhalte (Medienobjekte, Mediendateien usw.) durch Erfassen von Aufgaben in das System hochgeladen. Das grundlegendste Inhaltsobjekt in Mediendienste ist ein IAsset-Objekt – eine Auflistung von Metadaten zu einer Sammlung von Mediendateien. Jedes IAsset-Objekt enthält mindestens ein IAssetFile-Objekt. Eine ausführlichere Erläuterung zu einem "Asset" in Mediendienste 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.

Das Erfassen von Medienobjekten in Mediendienste kann auf verschiedene Weise erfolgen:

  • Erstellen eines Asset-Objekts, Erstellen mindestens eines AssetFiles-Objekts, das dem Asset zugeordnet wird, und anschließendes Hochladen der AssetFiles in Microsoft Azure Media Services. Verwenden Sie diese Vorgehensweise, wenn Sie mit kleineren Sammlungen von Mediendateien arbeiten und keine separate Uploadlösung verwenden. Alle Beispiele in diesem Thema weisen diesen Typ auf.

  • Die Sammelerfassung von Dateien erfolgt durch Vorbereiten einer Manifestdatei und anschließendes Hochladen der Dateien in Microsoft Azure Media Services mithilfe einer separaten Uploadlösung. Weitere Informationen zu diesem Verfahren finden Sie unter Massenerfassen von Medienobjekten mit dem Media Services SDK für .NET.

TipTipp
Wenn Sie eine große Anzahl von Medienobjekten hochladen, können Sie die folgenden Aktionen in Erwägung ziehen.

  • Erstellen Sie ein neues CloudMediaContext Objekt pro Thread. Die Klasse CloudMediaContext ist nicht threadsicher.

  • Erhöhen Sie NumberOfConcurrentTransfers vom Standardwert 2 auf einen höheren Wert (z. B. 5). Das Festlegen dieser Eigenschaft wirkt sich auf alle Instanzen von CloudMediaContext aus.

  • Behalten Sie für ParallelTransferThreadCount den Standardwert 10 bei.

Der Code in diesem Thema zeigt, wie die folgenden allgemeinen Aufgaben ausgeführt werden:

noteHinweis
Damit ein beliebiges Medienobjekt erstellt werden kann, muss zuerst ein Verweis auf den Mediendienste-Serverkontext wie im Thema Herstellen einer Verbindung mit Media Services mit dem Media Services SDK beschrieben vorhanden sein. Das Kontextobjekt wird durch die Variable namens _context in den folgenden Codebeispielen dargestellt.

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

Wenn Sie Medienobjekte erstellen, können Sie drei verschiedene Optionen für die Verschlüsselung angeben:

  • AssetCreationOptions.None: keine Verschlüsselung.

  • AssetCreationOptions.CommonEncryptionProtected: für CENC-Dateien (Common Encryption Protected). Ein Beispiel wäre eine Sammlung von Dateien, die bereits mit PlayReady verschlüsselt sind.

  • AssetCreationOptions.StorageEncrypted: Speicherverschlüsselung. Verschlüsselt eine unverschlüsselte Eingabedatei, bevor diese in den Azure-Speicher hochgeladen wird.

    noteHinweis
    Beachten Sie, dass Mediendienste nur Speicherverschlüsselung auf dem Datenträger und nicht über das Netzwerk wie bei einer Lösung mit Verwaltung digitaler Rechte (DRM) bereitstellt.

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 Aufgaben aus:

  1. Erstellen eines leeren Asset-Objekts mithilfe der Methode CreateEmptyAsset, die im vorherigen Schritt definiert wurde.

  2. Erstellen einer AssetFile-Instanz, die dem Asset zugeordnet ist.

  3. Hochladen der Mediendatei, die AssetFile zugeordnet ist, in Mediendienste

noteHinweis
Die AssetFile-Instanz und die eigentliche Mediendatei sind zwei separate Objekte. Die AssetFile-Instanz enthält Metadaten zur Mediendatei, während die Mediendatei die eigentlichen Medieninhalte enthält.

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 Aufgaben aus:

  1. Erstellen eines leeren Medienobjekts mithilfe der Methode CreateEmptyAsset, die im vorherigen Schritt definiert wurde.

  2. Erstellen einer AccessPolicy-Instanz, die die Zugriffsberechtigungen für und die Zugriffsdauer auf das Medienobjekt definiert.

  3. Erstellen einer Locator-Instanz, die Zugriff auf das Medienobjekt bereitstellt.

  4. Erstellen einer BlobTransferClient-Instanz. Dieser Typ stellt einen Client dar, der die Azure-Blobs verwendet. In diesem Beispiel wird der Client zum Überwachen des Uploadstatus verwendet.

  5. Aufzählen der Dateien im angegebenen Verzeichnis und Erstellen einer AssetFile-Instanz für jede Datei.

  6. Hochladen der Dateien in Mediendienste mithilfe der Methode UploadAsync.

    TipTipp
    Verwenden der Methode UploadAsync zum Sicherstellen, dass die Aufrufe nicht blockiert 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);
}

Sie sind nun bereit, mit dem nächsten Thema fortzufahren: Massenerfassen von Medienobjekten mit dem Media Services SDK für .NET.

Siehe auch

Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Vielen Dank für Ihr Feedback.
Anzeigen:
© 2014 Microsoft