如何:通过下载传送资产How to: Deliver an asset by download

本文介绍已上传到媒体服务的媒体资产的交付选项。This article discusses options for delivering media assets uploaded to Media Services. 可以采用众多的应用程序方案来交付媒体服务内容。You can deliver Media Services content in numerous application scenarios. 编码后,下载生成的媒体资产,或使用流式处理定位符访问这些资产。After encoding, download the generated media assets, or access them by using a streaming locator.

此示例演示如何将媒体资产从媒体服务下载到本地计算机。This example shows how to download media assets from Media Services to your local computer. 该代码将按作业 ID 查询与媒体服务帐户关联的作业,并访问其 OutputMediaAssets 集合(即运行作业后生成的、包含一个或多个输出媒体资产的集) 。The code queries the jobs associated with the Media Services account by job ID and accesses its OutputMediaAssets collection (which is the set of one or more output media assets that results from running a job). 此示例演示如何通过作业下载输出媒体资产,但可以运用相同的方法来下载其他资产。This example shows how to download output media assets from a job, but you can apply the same approach to download other assets.

备注

不同 AMS 策略的策略限制为 1,000,000 个(例如,对于定位器策略或 ContentKeyAuthorizationPolicy)。There is a limit of 1,000,000 policies for different AMS policies (for example, for Locator policy or ContentKeyAuthorizationPolicy). 如果始终使用相同的日期/访问权限,请使用相同的策略 ID,例如,用于要长期就地保留的定位符的策略(非上传策略)。Use the same policy ID if you are always using the same days / access permissions, for example, policies for locators that are intended to remain in place for a long time (non-upload policies). 有关详细信息,请参阅本文For more information, see this article.

    // Download the output asset of the specified job to a local folder.
    static IAsset DownloadAssetToLocal( string jobId, string outputFolder)
    {
        // This method illustrates how to download a single asset. 
        // However, you can iterate through the OutputAssets
        // collection, and download all assets if there are many. 

        // Get a reference to the job. 
        IJob job = GetJob(jobId);

        // Get a reference to the first output asset. If there were multiple 
        // output media assets you could iterate and handle each one.
        IAsset outputAsset = job.OutputMediaAssets[0];

        // Create a SAS locator to download the asset
        IAccessPolicy accessPolicy = _context.AccessPolicies.Create("File Download Policy", TimeSpan.FromDays(30), AccessPermissions.Read);
        ILocator locator = _context.Locators.CreateLocator(LocatorType.Sas, outputAsset, accessPolicy);

        BlobTransferClient blobTransfer = new BlobTransferClient
        {
            NumberOfConcurrentTransfers = 20,
            ParallelTransferThreadCount = 20
        };

        var downloadTasks = new List<Task>();
        foreach (IAssetFile outputFile in outputAsset.AssetFiles)
        {
            // Use the following event handler to check download progress.
            outputFile.DownloadProgressChanged += DownloadProgress;

            string localDownloadPath = Path.Combine(outputFolder, outputFile.Name);

            Console.WriteLine("File download path:  " + localDownloadPath);

            downloadTasks.Add(outputFile.DownloadAsync(Path.GetFullPath(localDownloadPath), blobTransfer, locator, CancellationToken.None));

            outputFile.DownloadProgressChanged -= DownloadProgress;
        }

        Task.WaitAll(downloadTasks.ToArray());

        return outputAsset;
    }

    static void DownloadProgress(object sender, DownloadProgressChangedEventArgs e)
    {
        Console.WriteLine(string.Format("{0} % download progress. ", e.Progress));
    }

媒体服务学习路径Media Services learning paths

媒体服务 v3(最新版本)Media Services v3 (latest)

查看最新版本的 Azure 媒体服务!Check out the latest version of Azure Media Services!

媒体服务 v2(旧版)Media Services v2 (legacy)

另请参阅See Also

交付流内容Deliver streaming content