将GZIPped视频直接播放到MediaPlayerElement(UWP)时出错

问题描述 投票:0回答:1

我在Azure上的Blob中有一个MP4视频存储,并使用GZIP格式进行压缩。

如果视频未压缩,我可以使用UWP应用中的此代码直接阅读:

<MediaPlayerElement x:Name="_mediaPlayerElement" />

this._mediaPlayerElement.Source = MediaSource.CreateFromUri(uri);
this._mediaPlayerElement.MediaPlayer.Play();

现在,如果视频被压缩,我有以下错误“错误:不支持的视频类型或无效的文件路径”。

然后我尝试使用HttpClient解压缩它并将流传递给mediaPlayerElement。我已经测试了MediaPlayerElementWithHttpClienthere)或我的自定义类的这个实现。但它也没有用。 (原始视频有效,但不是GZIP)。

当然,我已经激活了AutomationDecompressionHttpClient

var handler = new HttpClientHandler
{    
    AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};

HttpClient client = new HttpClient(handler);

是否可以在UWP中流式传输GZIP视频?

使用这个网站http://v4e.thewikies.com/,一个HTML视频代码生成器,我可以直接从浏览器播放GZIP视频(Firefox,Chrome无法正常工作)。我认为这是可行的,但在UWP中如何?

(不直接相关,但如果我在我的UWP应用程序中显示使用GZIP压缩的图像,则它正在工作。)

谢谢。

uwp gzip dotnet-httpclient
1个回答
0
投票

您可以将.mp4.gz文件下载到本地文件夹,通过测试我可以正确下载到.mp4文件。然后从文件加载MediaSource。例如:

using Windows.Web.Http;

HttpClient httpclient = new HttpClient();
IBuffer buffers = await httpclient.GetBufferAsync(uri); 
StorageFolder localfolder = ApplicationData.Current.LocalFolder;
StorageFile tempfile = await ApplicationData.Current.LocalFolder.CreateFileAsync("temp.mp4", CreationCollisionOption.ReplaceExisting);
await FileIO.WriteBufferAsync(tempfile, buffers);
this._mediaPlayerElement.Source = MediaSource.CreateFromUri(new Uri("ms-appdata:///local/temp.mp4"));
this._mediaPlayerElement.MediaPlayer.Play();
© www.soinside.com 2019 - 2024. All rights reserved.