Erfassen von Medienobjekten mit dem Media Services SDK für .NET
Dieses Thema ist Teil der Windows Azure Media Services-Serie mit dem Titel Erstellen von Anwendungen mit dem Media Services SDK für .NET. Es zeigt das Erfassen von Inhalten in Media Services. In einer Media Services-Anwendung werden Inhalte (Medienobjekte, Mediendateien usw.) durch Erfassen von Aufgaben in das System hochgeladen. Das grundlegendste Inhaltsobjekt in Media Services 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 Media Services finden Sie unter Asset.
Das Erfassen von Medienobjekten in Media Services 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 Windows 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 Windows Azure Media Services mithilfe einer separaten Uploadlösung. Weitere Informationen zu diesem Verfahren finden Sie unter Sammelerfassung von Medienobjekten.
Tipp |
|---|
Wenn Sie eine große Anzahl von Medienobjekten hochladen, können Sie die folgenden Aktionen in Erwägung ziehen.
|
Der Code in diesem Thema zeigt, wie die folgenden allgemeinen Aufgaben ausgeführt werden:
-
Erstellen eines leeren Medienobjekts
-
Hochladen einer einzelnen Datei
-
Hochladen mehrerer Dateien aus einem lokalen Verzeichnis und Anzeigen des Uploadstatus
Hinweis |
|---|
Damit ein beliebiges Medienobjekt erstellt werden kann, muss zuerst ein Verweis auf den Media Services-Serverkontext wie im Thema Herstellen einer Verbindung mit Media Services mithilfe des Media Services SDKs beschrieben vorhanden sein. Das Kontextobjekt wird durch die Variable namens _context in den folgenden Codebeispielen dargestellt. |
Erstellen eines leeren Medienobjekts
Bevor Sie eine Datei auf den Media Services-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.
Hinweis Beachten Sie, dass Media Services 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;
}
Hochladen einer einzelnen Datei
Der Code in diesem Abschnitt führt die folgenden Aufgaben aus:
-
Erstellen eines leeren Asset-Objekts mithilfe der Methode
CreateEmptyAsset, die im vorherigen Schritt definiert wurde. -
Erstellen einer AssetFile-Instanz, die dem Asset zugeordnet ist.
-
Hochladen der Mediendatei, die AssetFile zugeordnet ist, in Media Services
Hinweis |
|---|
| 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;
}
Hochladen mehrerer Dateien aus einem lokalen Verzeichnis und Anzeigen des Uploadstatus
Der Code in diesem Abschnitt führt die folgenden Aufgaben aus:
-
Erstellen eines leeren Medienobjekts mithilfe der Methode
CreateEmptyAsset, die im vorherigen Schritt definiert wurde. -
Erstellen einer AccessPolicy-Instanz, die die Zugriffsberechtigungen für und die Zugriffsdauer auf das Medienobjekt definiert.
-
Erstellen einer Locator-Instanz, die Zugriff auf das Medienobjekt bereitstellt.
-
Erstellen einer BlobTransferClient-Instanz. Dieser Typ stellt einen Client dar, der die Windows Azure-Blobs verwendet. In diesem Beispiel wird der Client zum Überwachen des Uploadstatus verwendet.
-
Aufzählen der Dateien im angegebenen Verzeichnis und Erstellen einer AssetFile-Instanz für jede Datei.
-
Hochladen der Dateien in Media Services mithilfe der Methode UploadAsync.
Tipp 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: Sammelerfassung von Medienobjekten.
Siehe auch
Konzepte
Erstellen von Anwendungen mit dem Media Services SDK für .NETInstallation für die Entwicklung mit dem Media Services SDK für .NET
Herstellen einer Verbindung mit Media Services mithilfe des Media Services SDKs
Verarbeiten von Medienobjekten mit dem Media Services SDK für .NET
Verwalten von Medienobjekten mit dem Media Services SDK für .NET
Übermitteln von Medienobjekten mit dem Media Services SDK für .NET
Überlegungen zu Media Services
Builddatum: