有人知道将.mp4视频从安全的azure blob(通过https)流式传输到WPF应用程序的方法吗。
我生成的uri如下。。。
public Uri GetSecureUriForBlob(CloudBlobContainer container, string blobName)
{
var blockBlob = container.GetBlockBlobReference(blobName);
var beforeOffset = new DateTimeOffset(DateTime.UtcNow.AddMinutes(-5));
var afterOffset = new DateTimeOffset(DateTime.UtcNow.AddHours(1));
var builder = new UriBuilder(blockBlob.Uri)
{
Query = blockBlob.GetSharedAccessSignature(
new SharedAccessBlobPolicy
{
Permissions = SharedAccessBlobPermissions.Read,
SharedAccessStartTime = beforeOffset,
SharedAccessExpiryTime = afterOffset
}).TrimStart('?')
};
return builder.Uri;
}
我已经检查了服务版本是否至少设置为"2013-08-15",并且blob项目是否设置了正确的内容类型。
我知道uri的格式是正确的,因为我可以在浏览器中粘贴它,也可以在Windows 8商店应用程序中使用它,并且视频流是正确的。
然而,当我为WPF MediaElement分配相同的uri作为源时,我会在MediaPlayer.Open()的内部工作中得到一个NullReferenceException。
从HTTPS端点播放时,WPF MediaElement似乎存在已知问题。在纯HTTP(没有"S")上播放时没有问题。
这与Microsoft Azure或Blob无关。这是纯粹的WPF问题,但似乎不会很快解决,如果解决的话。
对于HTTPS流,您可以使用Silverlight或Windows 8 Modern应用程序,两者都支持HTTPS流而不会出现任何问题。
您可能会找到支持通过HTTPS播放媒体的WPF的第三方控件。
更新
使用VideoLan.NET WPF控件,我可以播放HTTPS媒体。到目前为止,WPF唯一成功播放HTTPS媒体的控件。这需要有效安装适用于Windows的VideoLAN VLC播放器。我使用了便携式的(ZIP包),它运行得很好。VideoLan.NET的文档有点混乱,但结果是您可以在WPF中安全地播放HTTPS流/渐进式下载。