检索位于WP8.1中应用程序的本地文件夹中的StorageFile(视频)的缩略图

时间:2014-06-12 06:39:40

标签: c# windows-phone-8 windows-phone winrt-xaml windows-phone-8.1

我正在尝试将ApplicationFile的缩略图放在应用程序的应用程序包(LocalFolder)中。存储文件是媒体文件,可以是图像(jpg或png)或视频(mp4或wmv)。现在,当我尝试使用StorageFile类的GetThumbnailAsync(ThumbnailMode)方法获取缩略图时,我得到了

  

System.Exception:找不到组件。

错误,如果文件是图片或视频不在应用包内,同样的工作正常。这是我正在使用的代码隐藏

    StorageFile file;
    private async void BtnGetVideo_Click(object sender, RoutedEventArgs e)
    {
        StorageFolder folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Assets\\TestImgs");
        file = await folder.GetFileAsync("SMTest.mp4");
    }

    private async void BtnGetThumb_Click(object sender, RoutedEventArgs e)
    {
        if (file != null)
        {
            BitmapImage image = new BitmapImage();
            image.SetSource(await file.GetThumbnailAsync(ThumbnailMode.VideosView));
            ImagePreview.Source = image;
        }
    }

这是xaml for it

        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
            <Button x:Name="BtnGetVideo" Content="Get a Local Video" Click="BtnGetVideo_Click"/>
            <Button x:Name="BtnGetThumb" Content="Get Thumbnails" Click="BtnGetThumb_Click"/>
            <Image x:Name="ImagePreview" Height="200"/>
        </StackPanel>

2 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但它会帮助任何仍在寻找解决方案的人。

以下是我在经过3个小时的奋斗及其工作后能够成功运行的代码。

using (VideoFrameReader videoFrameReader = new VideoFrameReader(newCreatedVideo))
        {
            await videoFrameReader.OpenMF();
            var image = videoFrameReader.GetFrameAsBitmap(TimeSpan.FromSeconds(0));

            videoFrameReader.Finalize();
        }

答案 1 :(得分:0)

这是该平台的已知问题。对于公共目录中的文件,媒体服务提取缩略图作为跟踪视频应用程序的文件的一部分。

当文件位于app数据容器中时,存储代码会尝试使用不存在的系统缩略图提供程序提取缩略图。

除了将文件移动到公共位置,获取缩略图,保存文件以及移回文件之外,没有其他好的解决方法。