1. 程式人生 > >【作業】暴走可視化_簡單多媒體2.0

【作業】暴走可視化_簡單多媒體2.0

方法 cfile XA 本地緩存 -m mem string ref 是否

預覽

   GitHub多媒體播放器2.0

  最終效果:

    初始界面:

    技術分享圖片

    PlayOnline:(網頁錯誤時提示url無效)

    技術分享圖片

    Download:(有下載完成,下載失敗,文件已存在,url無效提示)

    技術分享圖片

    技術分享圖片

技術問題

  在線播放:

    首先應該找到在線播放文件的方法,找了使用MediaPlayer播放音頻和視頻,找到如下代碼:   

    mediaPlayer = new MediaPlayer();
    mediaPlayer.Source = MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/example_video.mkv
"));     mediaPlayer.Play();

    因為我用了一個Text Box來輸入url,所以可以將MediaSource.CreateFromUri方法的參數稍作修改就可以了,於是我寫出了如下代碼:

       mediaPlayer.Source = MediaSource.CreateFromUri(new Uri(source.Text));
       Tips.Text = "正在播放:";

    想在上面加一個判斷輸入網址是否為有效網址的判斷,本來用的是:

    if(source.Text != null)

    卻發現行不通,於是參考了Uri Class和uri.IsWellFormedUriString,寫出了如下判斷語句:

    if (Uri.IsWellFormedUriString(source.Text,UriKind.Absolute))           
            {
                mediaPlayer.Source = MediaSource.CreateFromUri(new Uri(source.Text));
                Tips.Text = "正在播放:";
            }
       else
            {
                Tips.Text = "Invalid url!";
            }

  下載緩存:

    毫不猶豫的打開Google,搜索,找到了Win10 uwp 存放網絡圖片到本地,找到如下代碼:

     Windows.Web.Http.HttpClient http = new Windows.Web.Http.HttpClient();

        IBuffer buffer = await http.GetBufferAsync(uri);

        BitmapImage img = new BitmapImage();

        using (IRandomAccessStream stream = new InMemoryRandomAccessStream())

        {

            await stream.WriteAsync(buffer);

            stream.Seek(0);

            await img.SetSourceAsync(stream);

            await StorageImageFolder(stream, uri);

            return img;

        }

     需要將得到的音頻文件以二進制流寫入,通過buffer解決。

    StorageFile musicFile = await myMusic.CreateFileAsync(fileName, Windows.Storage.CreationCollisionOption.FailIfExists);
           if (musicFile != null)
            {
               Windows.Web.Http.HttpClient httpClient = new Windows.Web.Http.HttpClient();
                IBuffer buffer;
                        try
                        {
                            buffer = await httpClient.GetBufferAsync(uri);
                        }
                        catch (Exception ex)
                        {
                            Tips.Text = "download fail!";
                            return;
                        }
                        await FileIO.WriteBufferAsync(musicFile, buffer);
                        Tips.Text = "download complete!";
                        mediaPlayer.Source = MediaSource.CreateFromUri(new Uri(source.Text));
                    }

     又參考Files and folders in the Music, Pictures, and Videos libraries中找到如何找到本地緩存文件夾:

    var myPictures = await Windows.Storage.StorageLibrary.GetLibraryAsync(Windows.Storage.KnownLibraryId.Pictures);
    Windows.Storage.StorageFolder savePicturesFolder = myPictures.SaveFolder;

     寫出了如下代碼:

       var myMusics = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Music);
       var myMusic = myMusics.SaveFolder;

感悟

   這次操作,明顯比上次嫻熟很多,bug少很多,但是還是有很多參數啊,方法啊不知道怎麽用,一邊搜索一邊做作業一邊進步可能才是菜雞程序員的日常。

  

【作業】暴走可視化_簡單多媒體2.0