Загрузка медиа файла программно в Windows Phone 8

Наше приложение основано на видео / аудио, и мы загрузили все мультимедиа в Windows Azure.

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

Поэтому мне нужно загрузить аудио / видео файл программно и сохранить его в IsolatedStorage.

У нас есть URL доступа к файлам мультимедиа Windows Azure для каждого аудио / видео. Но я застрял на первом этапе загрузки медиа-файла.

Я погуглил и наткнулся на эту статью, но для WebClient нет функции DownloadFileAsync, которую я мог бы использовать.

Однако я попробовал другую функцию DownloadStringAsyn, и загрузка медиа-файла в строковом формате, но не знаю, как преобразовать его в аудио (wma)/ видео (mp4) формат. Пожалуйста, предложите мне, как я могу продолжить? Есть ли другой способ загрузить медиафайл?

Вот пример кода, который я использовал

private void ApplicationBarMenuItem_Click_1(object sender, EventArgs e)
    {
        WebClient mediaWC = new WebClient();
        mediaWC.DownloadProgressChanged += new DownloadProgressChangedEventHandler(mediaWC_DownloadProgressChanged);
        mediaWC.DownloadStringAsync(new Uri(link));            
        mediaWC.DownloadStringCompleted += new DownloadStringCompletedEventHandler(mediaWC_DownloadCompleted);           

    }

    private void mediaWC_DownloadCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Cancelled)
            MessageBox.Show("Downloading is cancelled");
        else
        {
            MessageBox.Show("Downloaded");
        }
    }   

    private void mediaWC_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
    {
        statusbar.Text = status= e.ProgressPercentage.ToString();
    }

2 ответа

Сохраните это в вашем наборе инструментов:)

    public static Task<Stream> DownloadFile(Uri url)
    {
        var tcs = new TaskCompletionSource<Stream>();
        var wc = new WebClient();
        wc.OpenReadCompleted += (s, e) =>
        {
            if (e.Error != null) tcs.TrySetException(e.Error);
            else if (e.Cancelled) tcs.TrySetCanceled();
            else tcs.TrySetResult(e.Result);
        };
        wc.OpenReadAsync(url);
        return tcs.Task;
    }

Для загрузки двоичных данных используйте [WebClient.OpenReadAsync][1], Вы можете использовать его для загрузки данных, отличных от строковых данных.

var webClient = new WebClient();
webClient.OpenReadCompleted += OnOpenReadCompleted;
webClient.OpenReadAsync(new Uri("...", UriKind.Absolute));

private void OnOpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{

}
Другие вопросы по тегам