【发布时间】:2019-01-02 03:11:14
【问题描述】:
我开发 YouTube UWP 客户端,我需要合并视频和音频轨道(混合文件只有 480p 和更低)。但是因为PathTooLongException,我无法获取StorageFile(网址长度约为800个字符)
我在 x64 机器上使用 Visual Studio 2019 Preview。最低目标版本是 Fall Creators Update,目标是 2018 年 10 月更新。
我做了什么:
将最低版本升级到 2018 年 10 月更新
使用
StorageFile.GetFileFromApplicationUriAsync(Uri)而不是StorageFile.GetFileFromPathAsync(string)。
然后它上升
System.ArgumentException: '值不在预期范围内。'
根据微软文档 (https://docs.microsoft.com/ru-ru/dotnet/api/system.io.pathtoolongexception?view=netframework-4.7.2):
此异常可能是由于框架不兼容造成的,但在 UWP 应用中没有明显的方法可以直接更改目标框架。
这是我的代码:
MediaComposition muxedStream = new MediaComposition();
BackgroundAudioTrack audioTrack = await BackgroundAudioTrack.CreateFromFileAsync(await StorageFile.GetFileFromPathAsync(audioInfo.Url)); //Trying to get file throws an exception
MediaClip videoTrack = await MediaClip.CreateFromFileAsync(await StorageFile.GetFileFromPathAsync(videoInfo.Url));
muxedStream.BackgroundAudioTracks.Add(audioTrack);
muxedStream.Clips.Add(videoTrack);
videoSource.SetMediaStreamSource(muxedStream.GenerateMediaStreamSource());
我需要以某种方式绕过此异常或找到另一种组合流的方法。
【问题讨论】:
-
您能否改用
HttpClient,并将StorageFile与来自httpResponse.Content.ReadAsStreamAsync()的流一起使用? -
不要使用 StorageFile 下载网络资源。 stackoverflow.com/a/37806443/17034
-
@HansPassant,我不需要下载文件。我需要流式传输它们。至少因为下载将比流式传输和在运行中组合它们花费更多的时间
-
@Matthew,你能提供更多细节吗?
-
这非常模糊,谷歌搜索“uwp 流音频”之类的内容来查找相关匹配。