Ingerir ativos com o SDK do Media Services para .NET
Este tópico faz parte da série Serviços de Mídia do Windows Azure intitulada Criando aplicativos com o SDK do Media Services para .NET e mostra como ingerir conteúdo para o Serviços de Mídia. Em um aplicativo Serviços de Mídia, as tarefas de ingestão são o processo de carregamento e conteúdo (ativos, arquivos de mídia e assim por diante) ao sistema. O objeto de conteúdo mais fundamental no Serviços de Mídia é um IAsset, que é uma coleção de metadados sobre um conjunto de arquivos de mídia. Cada IAsset contém um ou mais objetos IAssetFile. Para obter explicações mais detalhadas sobre o que é um Asset no Serviços de Mídia, consulte Asset.
Existem alguns modos diferentes de ingerir ativos no Serviços de Mídia:
-
Crie um Asset, crie um ou mais AssetFiles que sejam associados ao Asset e depois carregue os AssetFiles no Serviços de Mídia do Windows Azure. Use esta abordagem quando estiver trabalhando com conjuntos menores de arquivos de mídia e quando não tiver uma solução de carregamento em separado. Todos os exemplos neste tópico são deste tipo.
-
Faça uma ingestão em massa de um conjunto de arquivos preparando um manifesto e carregue-os no Serviços de Mídia do Windows Azure usando uma solução de carregamento em separado. Para obter mais informações sobre essa abordagem, consulte Ingestão de ativos em massa.
Dica |
|---|
Ao carregar um grande número de ativos, considere o seguinte.
|
O código neste tópico mostra como realizar as seguintes tarefas comuns:
-
Criando um ativo vazio
-
Carregando um único arquivo
-
Carregar múltiplos arquivos do diretório local e exibir o progresso do carregamento
Observação |
|---|
Para criar qualquer ativo, primeiro você deve ter uma referência ao contexto de servidor do Serviços de Mídia, conforme descrito no tópico Conectar ao Media Services usando o SDK do Media Services. Nos exemplos de código a seguir o objeto de contexto é representado pela variável chamada _context. |
Criando um ativo vazio
Para que você possa carregar um arquivo no servidor do Serviços de Mídia, deverá criar um ativo usando o método Create ou CreateAsync. Ambos recebem o nome do ativo e as opções de criptografia como parâmetros.
Quando você cria ativos, é possível especificar três opções diferentes para criptografá-los.
-
AssetCreationOptions.None: sem criptografia.
-
AssetCreationOptions.CommonEncryptionProtected: para arquivos Protegidos por Criptografia Comum (CENC). Um exemplo é um conjunto de arquivos que já estão criptografados com PlayReady.
-
AssetCreationOptions.StorageEncrypted: criptografia de armazenamento. Criptografa um arquivo de entrada não criptografado antes de carregá-lo no armazenamento Azure.
Observação Observe que o Serviços de Mídia somente fornece criptografia de armazenamento em disco e não na transmissão, como a solução Gerenciamento de direitos digitais (DRM).
O método CreateEmptyAsset mostra como criar um ativo vazio.
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;
}
Carregando um único arquivo
O código nesta sessão faz o seguinte:
-
Cria um Asset vazio usando o método
CreateEmptyAssetdefinido na etapa anterior. -
Cria uma instância do AssetFile associada ao ativo Asset.
-
Carrega os arquivos de mídia associados ao ativo AssetFile no Serviços de Mídia.
Observação |
|---|
| A instância do AssetFile e o arquivo de mídia real são dois objetos diferentes. A instância do AssetFile contém metadados sobre o arquivo de mídia, enquanto o arquivo de mídia contém o conteúdo de mídia real. |
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;
}
Carregar múltiplos arquivos do diretório local e exibir o progresso do carregamento
O código nesta sessão faz o seguinte:
-
Cria um ativo vazio usando o método
CreateEmptyAssetdefinido na etapa anterior. -
Cria uma instância AccessPolicy que define as permissões e a duração de acesso ao ativo.
-
Cria um instância Locator que fornece acesso ao ativo.
-
Cria uma instância BlobTransferClient. Esse tipo representa um cliente que opera nos blobs do Windows Azure. Nesse exemplo usamos o cliente para monitorar o progresso do carregamento.
-
Enumera os arquivos no diretório especificado e cria uma instância AssetFile para cada arquivo.
-
Carrega os arquivos no Serviços de Mídia usando o método UploadAsync.
Dica Use o método UploadAsync para garantir que as chamadas não estejam bloqueadas e que os arquivos sejam carregados em paralelo.
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);
}
Você está pronto para prosseguir para o próximo tópico: Ingestão de ativos em massa.
Consulte também
Conceitos
Criando aplicativos com o SDK do Media Services para .NETInstalação para desenvolvimento no SDK do Media Services para .NET
Conectar ao Media Services usando o SDK do Media Services
Processar ativos com o Media Services SDK para .NET
Gerenciar ativos com o SDK do Media Services para .NET
Fornecer ativos com o SDK do Media Services para .NET
Considerações do Media Services
Data da compilação: