从 Azure Blob 存储提供视频内容

Posted

技术标签:

【中文标题】从 Azure Blob 存储提供视频内容【英文标题】:Serving Video Content from Azure Blob Storage 【发布时间】:2012-07-15 06:27:45 【问题描述】:

我正在尝试从 Azure Blob 存储提供 MP4 视频内容。通过确保将 Blob 的内容类型设置为 video/mp4,我可以让视频在现代浏览器中播放;但是我无法向后寻找。

将相同的视频放入 S3 存储桶会产生所需的结果,因此我排除了内容问题。

我是否需要以特定方式配置存储角色来提供视频内容?

【问题讨论】:

您的视频内容是如何通过基于网络的播放器或启动器在浏览器中播放的?它是先流式传输还是先完整下载然后播放?你有链接可以访问它并查看吗? 内容通过标准 html5 <video> 元素显示;这依赖于渐进式下载而不是流式传输。我将尝试并提供一个问题示例,但是使用Azure Storage Emulator 很容易重新创建 【参考方案1】:

从@smarx 的回答中我不清楚如何为我的 blob 容器设置它 - 但经过一番谷歌搜索后,我找到了下面的代码。只需在 LINQPad 中执行它,视频就会开始流式传输:

var storageAccount = CloudStorageAccount.Parse("AccountName=<accountName>;AccountKey=<accountKeyBase64>;DefaultEndpointsProtocol=http");
var blobClient = storageAccount.CreateCloudBlobClient();

// Get the current service properties
var serviceProperties = blobClient.GetServiceProperties();

// Set the default service version to 2011-08-18 (or a higher version like 2012-03-01)
serviceProperties.DefaultServiceVersion = "2011-08-18";

// Save the updated service properties
blobClient.SetServiceProperties(serviceProperties);

【讨论】:

这对我也有用。我将我的设置为 2016-05-31。我必须在一个全新的存储帐户上执行此操作。我不确定为什么在您创建新存储帐户时 Azure 不会设置最新版本。 如果您正在寻找最新版本:docs.microsoft.com/en-us/rest/api/storageservices/…。在发表此评论时,最新版本是 2019-07-07【参考方案2】:

您可以尝试将存储帐户的默认版本设置为 2011-08-18:http://blogs.msdn.com/b/windowsazurestorage/archive/2011/09/15/windows-azure-blobs-improved-http-headers-for-resume-on-download-and-a-change-in-if-match-conditions.aspx。它改进了范围请求周围的一些事情(可能是浏览器中的渐进式下载正在做的事情)。我还没有听说过有关视频播放的任何具体信息,但尝试一下也无妨。 :-)

【讨论】:

你是我的英雄!通过 service:properties 端点将DefaultServiceVersion 更改为2011-08-18 成功了——视频现在可以正确搜索!您知道是否有比在我的 C# 代码中手动创建 WebRequest 对象更简单的方法来更改存储帐户的此设置? 我不知道,抱歉。存储客户端库中没有方法? 供将来参考,是的,有 - C# 代码列在 smarx 答案中 msdn 博客文章引用的底部。【参考方案3】:

对于从谷歌来到这里的任何人:

Azure 有两种类型的存储帐户:StorageV1/V2 (default option selected when making new account) and BlobStorage。

虽然 StorageV2 选项可能有更多功能,但它支持partial content requests,这意味着 Chrome 将不允许视频搜索。

您可以通过导航到存储帐户 > 属性 > 帐户类型来识别 Azure 门户中的存储类型

【讨论】:

我在 Azure 门户 > 存储帐户 > 属性中看不到“帐户类型”的任何字段或标题。此外,您链接到的有关 Storage 与 StorageV2 的页面根本没有提及“部分”请求。【参考方案4】:

致任何想要使用 Azure CLI 的人:

az storage account blob-service-properties update --account-name [account_name] --default-service-version '2020-10-02'

【讨论】:

【参考方案5】:

我尝试在启用控件的情况下直接从 HTML5 视频元素播放一个非常小的 MP4 编码 blob,我可以使用控件来回滚动我的视频。

您的视频内容的大小是多少?您还可以使用 Fiddler 检查 HTTP 标头以验证它们是否符合预期,或者当您使用 S3 存储桶中的相同 blob 时它们是否完全匹配?

如果您可以分享您的 blob 链接,我可以快速尝试一下,看看可能是什么问题。

【讨论】:

【参考方案6】:

您可以通过 Powershell 来完成。这是 Azures ARM 的示例(不是经典,但您可以轻松转换)。

Select-AzureRmSubscription -SubscriptionName "subscription" $Name = 'storageaccountname' $resourcegroup = 'resourcegroup'

$sp = New-Object -TypeName Microsoft.WindowsAzure.Storage.Shared.Protocol.ServiceProperties 

$sp.DefaultServiceVersion = "2017-04-17" $key = (Get-AzureRMStorageAccountKey -StorageAccountName $Name
-ResourceGroupName $resourcegroup).Value[1]

$context = New-AzureStorageContext -StorageAccountName $Name
-StorageAccountKey $key

$blobClient = $context.StorageAccount.Create

【讨论】:

以上是关于从 Azure Blob 存储提供视频内容的主要内容,如果未能解决你的问题,请参考以下文章

从 azure blob 存储中提供 webapp 静态内容

如何为单个 azure blob 请求设置内容处置?

如何保护 azure blob 存储 url 不被任何使用开发人员工具的人检索

Azure Blob PHP SDK - 直接从自定义多部分 API 请求上传到 Azure 存储

直接从前端将数据上传到 Azure Blob 存储时的安全问题

Azure Media Services -可提供视频点播(VOD)