Как объединить аудио и видео дорожки для воспроизведения или получить StorageFile из Интернета? - PullRequest
0 голосов
/ 01 января 2019

Я разрабатываю клиент YouTube UWP, и мне нужно объединить видео и аудио дорожки (мультиплексированные файлы только с разрешением 480p и ниже).Но я не могу получить StorageFile из-за PathTooLongException (длина URL-адреса около 800 символов)

Я использую Visual Studio 2019 Preview на компьютере x64.Минимальная целевая версия - обновление Fall Creators, а цель - обновление октября 2018 года.

Что я пробовал:

  • Обновление минимальной версии до октября 2018 года Обновление

  • Используйте 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());

Мне нужно как-то обойти это исключение или найти другой способ объединения потоков.

Пример URL: https://r9 --- sn-n8v7znsz.googlevideo.com/ videoplayback? мим = видео% 2Fmp4 & истекают = 1546167117 & LMT = 1543098677581810 & aitags = 133% 2C134% 2C135% 2C136% 2C137% 2C160% 2C242% 2C243% 2C244% 2C247% 2C248% 2C278% 2C298% 2C299% 2C302% 2C303 & sparams = aitags, Clen, Dur, е, истекают, гир, идентификатор, внутрибрюшинно, ipbits, ipbypass, ITAG, KeepAlive, LMT, мим, MIP, мм, млн, мс, мв, п, пл, RequireSSL, источник и ключ = CMS1 & пл = 24 & ipbits = 0 & TXP = 5532432 & KeepAlive = да и ITAG= 137 & RequireSSL = да & е = 7U4oXNOULs-fyAWHl74I & ф = 95.47.116.128 & с = WEB & гир = да & Dur = 274,999 & ID = о-ACk7-_Fgu_caJbjuRbtlayK-dgmNtLEqypLyLfwWbA2j & подпись = 8173BAF30157D47064F9BE1DB85CB5A910AA5008.28DA3ACEEE47AD89D56E1F162602C99D73751E02 & источник = YouTube & Clen = 102247371 & fvip = 15 & video_id = xO_XyOsHK6A & название = Wolfenstein + 2 + ПЕСНЯ +% 28COLOSSAL + CARNAGE% 29 + ЛИРИЧЕСКИЕ + ВИДЕО + - + DAGames & тт = СН-uixgxjvh-ig3e7e, SN-3c2ed7y & Fexp = 23763603 & REQ_ID = 69d1c8f74394a3ee & redirect_counter = 2 & cms_redirect= да & ipbypass = да & MIP = 5.187.79.66 & мм = 29 & Mn = СНО-n8v7znsz & мс = РД & т = 1546157635 & мв = м & пНа = IgpwcjA0LnN2bzA2KgkxMjcuMC4wLjE & л = 1 & RR = 12 (976 символов) * тысяча сорок-дв *

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Я нашел другое решение.

К сожалению, StorageFile не может быть получено из Интернета.Но я могу использовать двух разных игроков, связанных с одним контроллером временной шкалы.Вот более подробное решение: Как воспроизводить видео и аудио с отдельных URL-адресов в приложении UWP?

0 голосов
/ 01 января 2019

Вы не можете.

StorageFile. * - для прямого доступа к файлам в изолированной файловой системе приложения UWP;доступ к файлам в известных папках, для которых он объявил «Возможности»;или для создания копии выбранных файлов , а не для загрузки / потоковой передачи материалов из Интернета.

Я цитирую:

StorageFile.GetFileFromPathAsync

Получает объект StorageFile для представления файла по указанному пути.

ArgumentException`

путь не может быть относительным путем или Uri .Проверьте значение пути.

... и

StorageFile.GetFileFromApplicationUriAsync

Получаетобъект StorageFile для представления указанного ресурса приложения универсального идентификатора ресурса (URI).Примеры примеров URI см. Загрузка изображений и ресурсов с учетом масштаба, темы, высокой контрастности и др.

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

Youможно использовать этот метод для доступа к ресурсам вашего приложения с помощью «ms-appx: //» или «ms-appdata: //» универсального идентификатора ресурса (URI).

OP:

Но я не могу получить StorageFile из-за PathTooLongException (длина URL-адреса около 800 символов)

Это подсказка, поскольку максимальный путь к файловой системе Windows составляет около 255символы, следовательно, почему вы получаете ошибку тоже.Он прямо отвергает его, даже не осознавая, что это не путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...