从Azure Blob存储中提供视频内容

13

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

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

我需要以特定方式配置Storage角色才能提供视频内容吗?


您的视频内容是通过基于Web的播放器或启动方式在浏览器中播放的吗?它是流式传输还是先完全下载再播放?您有访问链接可以查看吗? - AvkashChauhan
内容通过标准的HTML5 <video>元素显示;这依赖于渐进式下载而不是流媒体。我会尝试托管一个问题的示例,但使用Azure Storage Emulator非常容易重新创建该问题。 - JonnyReeves
6个回答

19

我从@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);

1
这对我也起作用了。我将我的设置为2016-05-31。我不得不在一个全新的存储账户上这样做。我不确定为什么Azure在创建新的存储账户时不会设置最新版本。 - guyfromfargo
1
如果您正在寻找最新版本,请访问以下链接:https://learn.microsoft.com/en-us/rest/api/storageservices/versioning-for-the-azure-storage-services。在本评论发布时,最新版本为2019-07-07。 - Ziad Akiki

7
任何想使用Azure CLI的人:
az storage account blob-service-properties update --account-name [account_name] --default-service-version '2020-10-02'

5

你是我的英雄!通过服务端点:属性,将“DefaultServiceVersion”更改为“2011-08-18”,解决了问题 - 视频现在可以正确地查找!您是否知道是否有比手动创建C#代码中的“WebRequest”对象更简单的方法来更改存储帐户的此设置? - JonnyReeves
1
对不起,我不知道。存储客户端库中没有这个方法吗? - user94559
为了将来的参考,是的,C# 代码列在 smarx 回答中提到的 msdn 博客文章引用底部。 - JonnyReeves

4

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

Azure有两种类型的存储账户: StorageV1/V2(创建新账户时默认选项)和BlobStorage.

尽管StorageV2选项可能具有更多功能,但它不支持部分内容请求,这意味着Chrome将不允许视频寻求。

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


2
在Azure门户 > 存储帐户 > 属性中,我没有看到任何关于“帐户类型”的字段或标题。此外,您链接的有关Storage vs StorageV2的页面根本没有提到“部分”请求。 - Dai

0

您可以通过 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

0

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

你的视频内容大小是多少?此外,您可以使用Fiddler检查HTTP标头以验证它们是否符合预期或是否与从S3存储桶使用相同的blob时完全相同。

如果您可以分享您的blob链接,我可以快速尝试并查看可能出现的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接