我开发了YouTube UWP客户端,我需要结合视频和音频轨道(混合文件只有480p及以下)。但由于StorageFile
(URL长度约为800个字符),我无法得到PathTooLongException
我在x64机器上使用Visual Studio 2019预览版。最低目标版本是Fall Creators Update,目标是2018年10月更新。
我尝试了什么:
将最低版本升级到2018年10月更新
使用StorageFile.GetFileFromApplicationUriAsync(Uri)
代替StorageFile.GetFileFromPathAsync(string)
。
然后升起
System.ArgumentException:'值不在预期范围内。'
根据Microsoft文档(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());
我需要以某种方式绕过此异常,或找到另一种组合流的方法。
答案 0 :(得分:0)
不能。
StorageFile
。*用于直接访问UWP应用的沙盒文件系统中的文件;访问已声明其功能的已知文件夹中的文件;或不复制所选择的文件以从Internet下载/流式传输内容。
我引用:
获取一个StorageFile对象,以表示指定路径下的文件。
ArgumentException`
路径不能是相对路径或 Uri 。检查路径的值。
...和
StorageFile.GetFileFromPathAsync
获取一个StorageFile对象,以表示指定的统一资源标识符(URI)应用程序资源。有关示例URI的示例,请参见StorageFile.GetFileFromApplicationUriAsync
var uri = new Windows.Foundation.Uri("ms-appx:///datafile.xml") // <----- SEE
Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).done( /* Your success and error handlers */ );
您可以使用“ ms-appx://”或“ ms-appdata://”统一资源标识符(URI)使用此方法访问应用程序的资源。
OP:
但是由于PathTooLongException(URL长度约为800个字符),我无法获取StorageFile
这有点暗示,因为Windows文件系统的最大路径约为255个字符,因此为什么也会出现此错误。完全拒绝它,甚至还没有意识到这不是一条路。
答案 1 :(得分:-1)
我找到了另一种解决方案。
很遗憾,无法从网络上获取StorageFile
。但是我可以使用与一个时间轴控制器链接的两个不同的播放器。这是更详细的解决方案:How to play video and audio from separate URLs in UWP app?