Xamarin iOS,如何保存视频并从文件中播放

时间:2017-06-20 15:18:08

标签: ios video xamarin.ios

我可以录制视频并将其保存为:

var doc = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments); string filename = Path.GetRandomFileName () + ".mov"; var videopath = Path.Combine (doc, filename);

^这是我保存的视频路径,但我找不到如何播放文件中的视频。

mp = new MPMoviePlayerController(NSUrl.FromFilename("Movies/Showhouzreel2music.m4v"));

^我已经尝试了这个并且可以看到这个视频文件并播放它,但是这个视频是由我放置的,不适用于我拍摄的视频。

我会喜欢任何指示或帮助你们给予。

感谢您,如果您需要更多信息,请随时提出。

1 个答案:

答案 0 :(得分:0)

你说你可以让MPMoviePlayerController使用你放置的文件吗?

如果是这样,那就试试吧。

string newVideoPath = Path.GetFileName(videopath);
mp = new MPMoviePlayerController(NSUrl.FromFilename(newVideoPath));

编辑(更详细的答案):

实施类似的东西。

public void PlayVideo(string videopath)
    {
        string name = Path.GetFileName(videopath);
        Device.BeginInvokeOnMainThread(() =>
        {
            QLPreviewItemFileSystem prevItem = new QLPreviewItemFileSystem(name, videopath);
            QLPreviewController previewController = new QLPreviewController();
            previewController.DataSource = new PreviewControllerDS(prevItem);
            UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(previewController, true, null);
        });
    }

    public class PreviewControllerDS : QLPreviewControllerDataSource
    {
        private QLPreviewItem _item;

        public PreviewControllerDS(QLPreviewItem item)
        {
            _item = item;
        }

        public override IQLPreviewItem GetPreviewItem(QLPreviewController controller, nint index)
        {
            return _item;
        }

        public override nint PreviewItemCount(QLPreviewController controller)
        {
            return 1;
        }
    }

    public class QLPreviewItemFileSystem : QLPreviewItem
    {
        string _fileName, _filePath;

        public QLPreviewItemFileSystem(string fileName, string filePath)
        {
            _fileName = fileName;
            _filePath = filePath;
        }

        public override string ItemTitle
        {
            get
            {
                return _fileName;
            }
        }
        public override NSUrl ItemUrl
        {
            get
            {
                return NSUrl.FromFilename(_filePath);
            }
        }

    }

每当你需要打电话时,请使用:

PlayVideo(videopath);

这也允许您在将来选择时打开其他文件。 (如pdf,图像等)注意:您可能需要修改一些代码才能使其正常工作,因为我尚未对此进行测试。