【作業】暴走可視化_簡單多媒體2.0
阿新 • • 發佈:2018-04-15
方法 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