从Azure Blob存储中流式传输视频

5

我在Azure blob存储中存储了一个.mp4视频,但在托管在Azure上的网站中无法显示。视频类型设置为video/mp4,存储帐户不是公共的,但已链接到Web角色,并且我使用以下代码更新了版本:

var credentials = new StorageCredentials("myaccountname", "mysecretkey"); 
var account = new CloudStorageAccount(credentials, true); 
var client = account.CreateCloudBlobClient(); 
var properties = client.GetServiceProperties(); 
properties.DefaultServiceVersion = "2012-02-12"; 
client.SetServiceProperties(properties); 

我没有使用任何视频播放器,只用了HTML5视频标签。我不需要什么花哨的东西,只想让视频播放。
在Chrome开发工具的网络选项卡中查看,有两个条目用于GET请求以获取视频。第一个状态为(pending),下一个状态为(canceled)。
我还提供了一个指向网站内容文件夹中视频的链接。这个也开始是pending状态,但是通过204 Partial Content解决后,视频可以正常播放。
我已经没有其他要查看的东西了,感谢您的帮助和指引。

你的容器包含的视频文件是私有的吗?你能解释一下为什么要执行上面的代码吗?那段代码与视频流没有任何关系。 - Gaurav Mantri
@GauravMantri 这个容器是私有的,但我以为它会工作,因为存储帐户与 Web 角色相关联。将其设置为公共解决了流媒体问题,但我不想让它变成公共的。 这段代码与更新 API 有关,以便允许在视频没有完全加载的情况下跳过它。 - Ivan Pintar
1个回答

9
根据您上面的评论,您需要一个共享访问签名。使用下面的代码在您的mp4文件上创建一个共享访问签名。
        var credentials = new StorageCredentials("myaccountname", "mysecretkey");
        var account = new CloudStorageAccount(credentials, true);
        var container = account.CreateCloudBlobClient().GetContainerReference("yourcontainername");
        var blob = container.GetBlockBlobReference("yourmp4filename");
        var sas = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
        {
            Permissions = SharedAccessBlobPermissions.Read,
            SharedAccessExpiryTime = DateTime.UtcNow.AddHours(1),//Set this date/time according to your requirements
        });
        var urlToBePlayed = string.Format("{0}{1}", blob.Uri, sas);//This is the URI which should be embedded in your video player.

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