将视频从安全的azure blob流式传输到WPF

Per*_*ine 7 wpf azure azure-storage-blobs

有没有人知道从安全的azure blob(通过https)将.mp4视频流式传输到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;
}
Run Code Online (Sandbox Code Playgroud)

我已检查服务版本是否至少设置为"2013-08-15",并且blob项目具有正确的内容类型集.

我知道uri的格式是正确的,因为我可以将其粘贴到浏览器中,并在Windows 8商店应用程序中使用它,并且视频流正确.

但是,当我为WPF MediaElement分配相同的uri时,我在MediaPlayer.Open()的内部工作中得到了一个N​​ullReferenceException.

ast*_*kov 2

从 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 流/渐进式下载。