在Windows Phone 8中以编程方式下载媒体文件

时间:2013-04-08 13:51:07

标签: audio video windows-phone-8 webclient-download

我们的应用是基于视频/音频的应用,我们已经在Windows Azure上传了所有媒体。

然而,需要方便用户按需下载音频/视频文件,以便他们可以在本地播放。

所以我需要以编程方式下载音频/视频文件并将其保存在IsolatedStorage中。

我们为每个音频/视频提供Windows Azure媒体文件访问网址。但我陷入了下载媒体文件的第一步。

我用Google搜索并遇到了this article,但是对于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 个答案:

答案 0 :(得分:1)

要下载二进制数据,请使用[WebClient.OpenReadAsync][1]。您可以使用它来下载字符串数据以外的数据。

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

private void OnOpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{

}

答案 1 :(得分:1)

将其保存在工具箱中:)

    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;
    }