【问题标题】:Downloading Media File programmatically in Windows Phone 8在 Windows Phone 8 中以编程方式下载媒体文件
【发布时间】:2013-03-30 15:22:27
【问题描述】:

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

但需要方便用户按需下载音视频文件,以便在本地播放。

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

我们为每个音频/视频提供 Windows Azure 媒体文件访问 URL。但我被困在下载媒体文件的第一步。

我用谷歌搜索并遇到了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();
    }

【问题讨论】:

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


    【解决方案1】:

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

    var webClient = new WebClient();
    webClient.OpenReadCompleted += OnOpenReadCompleted;
    webClient.OpenReadAsync(new Uri("...", UriKind.Absolute));
    
    private void OnOpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
    
    }
    

    【讨论】:

      【解决方案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;
          }
      

      【讨论】:

      • 你能提供一个完整的例子吗?调用 DownloadFile 后如何将文件保存到 isolatedStorage
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      相关资源
      最近更新 更多