Почему SetSource не может изменить значение Source? - PullRequest
0 голосов
/ 12 апреля 2020

Я установил исходное значение Source из MediaElement равным abc.mp3, и я пытаюсь воспроизвести другой локальный mp3, например D://xxx.mp3.

Когда я использую SetSource, я обнаружил, что значение Source по-прежнему abc.mp3, но musi c фактически изменилось на xxx.mp3.

Могу ли я использовать player.Source = "D://xxx.mp3";?

Вот мой код:

//player is a MediaElement.

private async void Button_Click(object sender, RoutedEventArgs e)
{
    await SetLocalMedia();
}

async private System.Threading.Tasks.Task SetLocalMedia()
{
    var openPicker = new Windows.Storage.Pickers.FileOpenPicker();

    openPicker.FileTypeFilter.Add(".wmv");
    openPicker.FileTypeFilter.Add(".mp4");
    openPicker.FileTypeFilter.Add(".wma");
    openPicker.FileTypeFilter.Add(".mp3");

    var file = await openPicker.PickSingleFileAsync();
    if (file != null)
    {
        var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
        Debug.WriteLine(player.Source);
        player.SetSource(stream, file.ContentType);
        Debug.WriteLine(player.Source);//The output of these tow Debug are same
    }
}

1 Ответ

1 голос
/ 13 апреля 2020

Почему SetSource не может изменить значение Source?

Спасибо за ваше время сообщить об этом, проблема в том, что если вы вызываете метод SetSource для установки источника мультимедиа с Локальный файл открытый поток, поэтому свойство Source не будет содержать значения, и оно задуманно.

Могу ли я использовать player.Source = "D: //xxx.mp3"; ?

Source имеет тип Uri, поддерживает http и UWP локальную схему Uri , если файл хранится на диске D, вы не можете установить player.Source = "D://xxx.mp3 ( схема файла). Если вы хотите установить источник со значением URI, я предлагаю скопировать файл в локальную папку приложения, а затем использовать схему URI локального файла UWP. Но это приведет к увеличению локального хранилища приложения.

private async void Button_Tapped(object sender, TappedRoutedEventArgs e)
{
    var openPicker = new Windows.Storage.Pickers.FileOpenPicker();

    openPicker.FileTypeFilter.Add(".wmv");
    openPicker.FileTypeFilter.Add(".mp4");
    openPicker.FileTypeFilter.Add(".wma");
    openPicker.FileTypeFilter.Add(".mp3");

    var file = await openPicker.PickSingleFileAsync();
    if (file != null)
    {
        await file.CopyAsync(ApplicationData.Current.LocalFolder, file.Name, NameCollisionOption.ReplaceExisting);
        var path = ApplicationData.Current.LocalFolder.Path;
        var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
        Debug.WriteLine(player.Source);
        player.Source = new Uri($"ms-appdata:///local/{file.Name}");
        Debug.WriteLine(player.Source);//The output of these tow Debug are same
    }

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