Как получить доступ к потоку содержимого Microsoft Graph DriveItem (Video) для использования с MediaPlayerElement (с помощью Graph .NET SDK)

#c# #uwp #microsoft-graph-api #onedrive

#c# #uwp #microsoft-graph-api #onedrive

Вопрос:

Используя Microsoft Graph .NET SDK, я пытаюсь получить доступ к потоку содержимого элемента DriveItem, который является видео, чтобы его можно было воспроизводить в UWP MediaPlayerElement. Однако при развертывании MediaPlayerElement отображается:

«Ошибка: неподдерживаемый тип видео или неверный путь к файлу».

Я могу получить доступ к Microsoft Graph с помощью Windows Community Toolkit и получить Files.ReadWrite.All разрешение. Я также получил DriveItem id необходимое.

 private async void LoadVideo(DriveItem driveItem) {
    var graphClient = MicrosoftGraphService.Instance.GraphProvider;

    using(Stream responseStream = await graphClient
        .Me
        .Drive
        .Items[driveItem.Id]
        .Content
        .Request().GetAsync()) {
        var memoryStream = responseStream as MemoryStream;
        if (responseStream != null) {
            // Breakpoint on this line is reached after 
            // a substantial delay on the using statement 
            // line. At this line, the memoryStream has a value of 89400353.
            MyMPE.Source = MediaSource
                .CreateFromStream(memoryStream
                    .AsRandomAccessStream(), "video/mp4");
        } else {
            ...
        }
    }
}
 

Всегда выполняется оператор if. Когда я ставлю точку останова в начале строки MyMPE.Source… , в инструкции возникает существенная задержка using до достижения точки останова. Затем MediaPlayerElement отображает сообщение об ошибке «Ошибка: неподдерживаемый тип видео или неверный путь к файлу» в нижней части проигрывателя.

Комментарии:

1. Я не верю, что API поддерживает потоковую передачу напрямую, как это, также я не верю, что медиаплеер будет следовать перенаправлению 302. Вероятно, вам потребуется загрузить файл и передать его с диска.

2. @MarcLaFleur спасибо за ваш комментарий, я подумал, что это могло быть в случае с API, но жаль, может быть, это будет поддерживаться в какой-то момент в будущем.