代码之家  ›  专栏  ›  技术社区  ›  XFox

如何组合音频和视频曲目进行播放或从web获取StorageFile?

  •  -2
  • XFox  · 技术社区  · 7 年前

    我开发了YouTube UWP客户端,我需要结合视频和音频曲目(MUX文件只有480p和更低)。但是我不能得到 StorageFile 是因为 PathTooLongException (url长度约为800个字符)

    我在x64机器上使用Visual Studio 2019预览。最低目标版本为秋季创作者更新,目标版本为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());
    

    Url示例: https://r9---sn-n8v7znsz.googlevideo.com/videoplayback?mime=video%2Fmp4&expire=1546167117&lmt=1543098677581810&aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C298%2C299%2C302%2C303&sparams=aitags,clen,dur,ei,expire,gir,id,ip,ipbits,ipbypass,itag,keepalive,lmt,mime,mip,mm,mn,ms,mv,nh,pl,requiressl,source&key=cms1&pl=24&ipbits=0&txp=5532432&keepalive=yes&itag=137&requiressl=yes&ei=7U4oXNOULs-fyAWHl74I&ip=95.47.116.128&c=WEB&gir=yes&dur=274.999&id=o-ACk7-_Fgu_caJbjuRbtlayK-dgmNtLEqypLyLfwWbA2j&signature=8173BAF30157D47064F9BE1DB85CB5A910AA5008.28DA3ACEEE47AD89D56E1F162602C99D73751E02&source=youtube&clen=102247371&fvip=15&video_id=xO_XyOsHK6A&title=WOLFENSTEIN+2+SONG+%28COLOSSAL+CARNAGE%29+LYRIC+VIDEO+-+DAGames&rm=sn-uixgxjvh-ig3e7e,sn-3c2ed7y&fexp=23763603&req_id=69d1c8f74394a3ee&redirect_counter=2&cms_redirect=yes&ipbypass=yes&mip=5.187.79.66&mm=29&mn=sn-n8v7znsz&ms=rdu&mt=1546157635&mv=m&nh=IgpwcjA0LnN2bzA2KgkxMjcuMC4wLjE&ir=1&rr=12 (976个字符)

    2 回复  |  直到 7 年前
        1
  •  0
  •   Community Mohan Dere    6 年前

    StorageFile *用于直接访问UWP应用程序沙盒文件系统中的文件;访问其已声明功能的已知文件夹中的文件;或用于制作拾取文件的副本 不 用于从Internet下载/流式传输内容。

    我引述:

    StorageFile.GetFileFromPathAsync

    获取一个StorageFile对象,以表示指定路径上的文件。

    论据例外`

    路径 不可能 相对路径 Uri . 检查路径的值。

    StorageFile.GetFileFromApplicationUriAsync

    获取表示指定的统一资源标识符(URI)应用程序资源的StorageFile对象。有关示例URI的示例,请参阅 Load images and assets tailored for scale, theme, high contrast, and others.

    var uri = new Windows.Foundation.Uri("ms-appx:///datafile.xml") // <----- SEE Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).done( /* Your success and error handlers */ );

    您可以使用此方法访问应用程序的资源

    作品:

    但由于PathTooLongException(url长度约为800个字符),我无法获取StorageFile的

    这是一个提示,因为Windows文件系统的最大路径约为255个字符,因此也会出现错误。在它意识到这不是一条道路之前,它就直接拒绝了它。

        2
  •  -1
  •   XFox    7 年前

    我找到了另一个解决办法。

    不幸地 StorageFile How to play video and audio from separate URLs in UWP app?

    推荐文章