如何从MonoTouch获取现有的视频缩略图?

时间:2011-12-31 00:55:02

标签: xamarin.ios

我正在尝试通过UIImagePickerController获取我刚刚选择(或录制)的视频的缩略图。在我的选择器的FinishedPickingMedia方法中,我得到了我认为是视频文件的路径并使用它将录制保存到相册。新录制的视频确实出现在我的专辑中。现在来获取缩略图......

我尝试过几种方式使用ALAssetsLibrary。首先,我列举了所有视频,并尝试从资产的UtiToUrlDictionary.Values [0]值中找到匹配项,该值显示其文件路径。没有条目与我从FinishedPickingMedia方法的mediaUrlKey获得的路径匹配。

我的第二次尝试是使用ALAssetsLibrary的AssetForUrl()方法。我再次尝试了FinishedPickingMedia方法的mediaUrlKey,但没有匹配。

UIImagePickerController - > FinishedPickingMedia - > mediaUrlKey返回路径:

file://localhost/private/var/mobile/Applications/73037738-C060-4DE6-A1CA-698E6BE083F2/tmp//trim.iRBwWw.MOV

经过痛苦的挖掘和检查我的图书馆中的每个视频后,来自ALAssetsLibrary的同一视频路径是:

assets-library://asset/asset.MOV?id=B073FCF6-83ED-436B-AFD8-42D0A6C70FC6&ext=MOV

为什么UIIMagePickerController和ALAssetsLibrary之间的视频路径不同?如何让ALAssetsLibrary返回从UIImagePickerController中挑选的相同视频?

[选择器的代码]

public override void FinishedPickingMedia (UIImagePickerController picker, NSDictionary info)
{
    var mediaUrlKey = new NSString("UIImagePickerControllerMediaURL");
    var mediaPath = (NSUrl) info.ObjectForKey(mediaUrlKey);


    if( recordView.RecordVideo )
    {
        if(mediaPath != null)
        {
            if(UIVideo.IsCompatibleWithSavedPhotosAlbum(mediaPath.Path))
            {
                UIVideo.SaveToPhotosAlbum(mediaPath.Path, SaveToPhotosAlbumResults);
            }
            else
            {
                using (var alert = new UIAlertView("Problem Encountered", 
                "Unable to save this recording.", null, "Ok!", null))
                {
                    alert.Show();
                }
            }
        }
    }
    else
    {
        recordView.VideoFileLocation = mediaPath;
        //ALAssetsLibrary library = new ALAssetsLibrary();
        //library.AssetForUrl( mediaPath, GetAssetResult, GetAssetError );
    }

    recordView.VideoFileLocation = mediaPath;

    Console.WriteLine("***" + recordView.VideoFileLocation.ToString()+ "***");

    recordView.ShowUploadButton();
    recordView.SetThumbnailImage();

    picker.DismissModalViewControllerAnimated(true);
}

谢谢

3 个答案:

答案 0 :(得分:1)

我认为可能为时已晚,但以下代码现在正常工作

LIMIT 9, 9

答案 1 :(得分:0)

我认为Can I Get To The Original File Representing This Image on the Disk in this question部分可以为您提供帮助。

答案 2 :(得分:0)

这是您在选择器委托中获取缩略图的方法:

NSUrl data = new NSUrl(info.ObjectForKey(new NSString("UIImagePickerControllerMediaURL")).ToString());

                //get the video thumbnail

                MPMoviePlayerController movie = new MPMoviePlayerController(data);
                movie.Stop();
                UIImage videoThumbnail = movie.ThumbnailImageAt(0.0,MPMovieTimeOption.NearestKeyFrame);
                movie.Stop();