可视化第四课 - 实现简易播放器 Part 2

    本次新添的功能有:

  • 在线播放,直接播放网络上的音频。
  • 缓存网络上的音频文件并播放。
  • 做了一些必要的优化。



    总览:


   


    在线播放:

    这里模仿之前的代码写成:

//C# --位于OpenFile()
mediaPlayerElement.Source = MediaSource.CreateFromStorageFile(file);
mediaPlayer = mediaPlayerElement.MediaPlayer;
mediaPlayer.Play();

    仿写:

//C# --我的代码
mediaPlayerElement.Source = MediaSource.CreateFromUri(new Uri(URL.Text));
mediaPlayer = mediaPlayerElement.MediaPlayer;
mediaPlayer.Play();

    运行后可用。



    缓存视频:

    首先要解决的问题是获取用户音乐库的路径,查阅文档 创建、写入和读取文件 及 KnownFolders Class 得知:

//C#
Windows.Storage.StorageFolder storageFolder =
    Windows.Storage.ApplicationData.Current.LocalFolder;
Windows.Storage.StorageFile sampleFile =
    await storageFolder.CreateFileAsync("sample.txt",
        Windows.Storage.CreationCollisionOption.ReplaceExisting)
//C#
StorageFolder storageFolder = KnownFolders.PicturesLibrary;
StorageFile file = await storageFolder.CreateFileAsync("sample.png", CreationCollisionOption.ReplaceExisting);

    这样便解决了获取文件路径及创建文件的问题:

//C# --我的代码
var filePath = KnownFolders.MusicLibrary; 
string fileName = "temp_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss");
//···
fileName += ".mp3";
filePath = KnownFolders.MusicLibrary;
//···
StorageFile fileFullPath = await filePath.CreateFileAsync(fileName);

   

    又通过阅读文档 音乐、图片和视频库中的文件和文件夹 学习如何使用流方法向媒体库添加文件,有代码:

StorageFolder testFolder = await StorageFolder.GetFolderFromPathAsync(@"C:\test");
StorageFile sourceFile = await testFolder.GetFileAsync("TestImage.jpg");
StorageFile destinationFile = await KnownFolders.CameraRoll.CreateFileAsync("MyTestImage.jpg");

using (var sourceStream = (await sourceFile.OpenReadAsync()).GetInputStreamAt(0))
{
    using (var destinationStream = (await destinationFile.OpenAsync(FileAccessMode.ReadWrite)).GetOutputStreamAt(0))
    {
        await RandomAccessStream.CopyAndCloseAsync(sourceStream, destinationStream);
    }
}

    我的代码如下:

//C# --我的代码
StorageFile fileFullPath = await filePath.CreateFileAsync(fileName);

using (var fileStream = await fileFullPath.OpenAsync(FileAccessMode.ReadWrite))
{
    await fileStream.WriteAsync(buffer);
    await fileStream.FlushAsync();    //关闭流
}

  

    其中有个小问题一直没发现,耽误不少时间,如果将

string fileName = "temp_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss");

    改为

string fileName = "temp_" + DateTime.Now.ToString("yyyy/MM/dd");

    会抛异常System.IO.FileNotFoundException,原因是不能出现“/”符号。



    除了这两个核心功能的实现外,还进行了一些优化。不过是一些布局与排版,具体在 我的GitHub 中查阅。


阅读更多
个人分类: uvp
上一篇可视化第三课 - 实现简易播放器 Part 1
想对作者说点什么? 我来说一句

简易安卓版视频播放器开发

2016年03月14日 2.28MB 下载

没有更多推荐了,返回首页

关闭
关闭