Seekbar无法在Chrome中运行

时间:2014-01-09 22:46:34

标签: azure html5-video azure-storage

我已将视频上传到我的Windows Storage,并注意到,搜索栏(默认Chrome的html5播放器)无效。该视频的网址是:

http://portalvhdsrwglplr5bdc2k.blob.core.windows.net/vdepot/uploads/video/file/167/surfer-girl-35094486.mp4

请注意:视频下载正在进行时,Seekbar无效,或者第一次是100%。如果Chrome播放器已下载视频并刷新页面,则搜索栏工作正常。

我是一个视频编码新手因此我不确定这是视频的问题,浏览器还是以某种方式使用windows azure?我也无法在谷歌中找到关于该主题的任何内容。

3 个答案:

答案 0 :(得分:3)

正确提供的HTML视频文件需要使用HTTP Byte Serving,这样浏览器就可以只请求文件中允许您观看视频的部分内容。如果你没有这个,你会遇到像这样的问题。

当您在视频中向前跳过缓冲的部分时,浏览器可以从该点向前询问服务器的视频文件,跳过开头。您可能已经注意到,在大多数网络视频播放器使用Flash时,特别是在Vimeo上,您必须等到大部分视频文件都被缓冲后才可以提前寻找,因为那些Flash播放器不支持此功能。

浏览器使用“范围”标题以此格式请求文件。服务器应响应“206 Partial Content”状态代码,一些关于范围数据的HTTP标头,以及仅实际文件的子集。您的服务器正在响应标准的200状态响应。如果您有兴趣,这里有一篇关于这个过程的更详细的文章。

http://benramsey.com/blog/2008/05/206-partial-content-and-range-requests/

我对Windows Storage知之甚少,但似乎确实支持此功能。您可能需要检查您的版本和配置。这些文章可能会指出正确的方向:

http://msdn.microsoft.com/en-us/library/windowsazure/ee691967.aspx 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

祝你好运。

答案 1 :(得分:3)

这里的问题是全新的AZURE存储帐户默认实现不支持在HTTP 206 Partial Content

的HTTP响应中提供正确的标头“接受范围:字节”

要解决此问题,您需要将存储帐户的DefaultServiceVersion设置为版本2013-08-15later。在他们的文档中,他们说2011-08-18版已正式支持此功能,但是在我的测试中,直到将其设置为2013-08-15版时,我才看到它。最后,我将其更新为最新版本2019-02-02。一会儿,我将向您展示如何做到这一点。

话虽如此,您可以采取一些步骤进行测试和验证,然后修复它。

创建一个新的AZURE存储帐户,添加一个新容器,然后将MP4上载到该容器。要查看MP4的默认标题,请运行以下curl命令

curl -I https://<StorageAccount>.blob.core.windows.net/<YourContainer>/<Your>.mp4

这是您应该看到响应的标题

HTTP/1.1 200 OK
Content-Length: 8655515
Content-Type: video/mp4
Last-Modified: Fri, 29 Nov 2019 21:45:12 GMT
ETag: 0x8D7751569DECA07
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: cc44ae3e-b01e-00b5-2337-e4372d000000
x-ms-version: 2009-09-19
x-ms-lease-status: unlocked
x-ms-blob-type: BlockBlob
Access-Control-Expose-Headers: x-ms-request-id,Server,x-ms-version,Content-Type,Last-Modified,ETag,x-ms-lease-status,x-ms-blob-type,Content-Length,Date,Transfer-Encoding
Access-Control-Allow-Origin: *
Date: Sat, 15 Feb 2020 19:36:37 GMT

您将看到缺少以下标头

Accept-Ranges: bytes

然后您可以验证在运行以下curl命令时此标头是否会返回

curl -I -H x-ms-version:2013-08-15 https://<StorageAccount>.blob.core.windows.net/<YourContainer>/<Your>.mp4

要永久设置存储帐户版本,我使用了LinqPad和以下代码,并引用了Windows.Azure.Storage Nuget Pacakge

var connectionString = "DefaultEndpointsProtocol=https;AccountName=<YourAcountName>;AccountKey=<YourAccountKey>;";
var storageAccount = CloudStorageAccount.Parse(connectionString);
var blobClient = storageAccount.CreateCloudBlobClient();
var props = await blobClient.GetServicePropertiesAsync();
props.Dump(); /* Here you will see that the DefaultServiceVersion is null*/
props.DefaultServiceVersion = "2019-02-02";
await blobClient.SetServicePropertiesAsync(props);

首次运行此命令时,您会看到DefaultServiceVersion为null。如果第二次运行此命令,则将看到DefaultServiceVersion将是您设置的版本。

如果您再次运行curl命令。

curl -I https://<StorageAccount>.blob.core.windows.net/<YourContainer>/<Your>.mp4

您将看到以下标头,现在包含“ Accept-Ranges:bytes”标头,您的查找将起作用。

HTTP/1.1 200 OK
Content-Length: 8655515
Content-Type: video/mp4
Last-Modified: Fri, 29 Nov 2019 21:45:12 GMT
Accept-Ranges: bytes
ETag: "0x8D7751569DECA07"
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: b95228de-f01e-0135-4596-e5d2d2000000
x-ms-version: 2019-02-02
x-ms-creation-time: Fri, 29 Nov 2019 21:45:12 GMT
x-ms-lease-status: unlocked
x-ms-lease-state: available
x-ms-blob-type: BlockBlob
x-ms-server-encrypted: true
x-ms-access-tier: Hot
x-ms-access-tier-inferred: true
Date: Mon, 17 Feb 2020 13:33:00 GMT

答案 2 :(得分:0)

正如@Craig Selbert所说,新的Azure存储帐户不支持“接受范围:字节”标头。您可以通过在Azure Cloud Shell中设置DefaultServiceVersion来解决此问题,例如:

$ctx = New-AzStorageContext -ConnectionString "[connectionstring]"
Update-AzStorageServiceProperty -ServiceType Blob -DefaultServiceVersion 2019-02-02 -Context $ctx

[连接字符串]来自存储帐户中“访问密钥”选项卡的地方。