5

私たちのアプリはビデオ/オーディオ ベースのアプリで、すべてのメディアを Windows Azure にアップロードしています。

ただし、ローカルで再生できるように、ユーザーがオーディオ/ビデオ ファイルをオンデマンドでダウンロードできるようにする必要があります。

したがって、オーディオ/ビデオ ファイルをプログラムでダウンロードし、IsolatedStorage に保存する必要があります。

オーディオ/ビデオごとに Windows Azure メディア ファイル アクセス URL があります。しかし、メディアファイルをダウンロードする最初のステップで行き詰まっています。

私はグーグルでこの記事に出くわしましたが、 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();
    }
4

2 に答える 2

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;
    }
于 2013-04-08T15:44:49.663 に答える