如何以 xamarin 形式压缩(Zip)视频 [英] How to compress(Zip) a video in xamarin forms

查看:38
本文介绍了如何以 xamarin 形式压缩(Zip)视频的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想压缩一个大尺寸的视频并上传到服务器.我该怎么做,我不知道这个.

I want to compress a large sized video and upload it into the server.How can I do this, I have no idea about this.

请帮帮我....

推荐答案

在 DS file for Android 中使用以下代码

公共任务压缩视频(字符串路径){

public Task CompressVideo(string path) {

        var task = new TaskCompletionSource<string>();

        var _workingDirectory = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
        var sourceMp4 = path;
        var destinationPath1 = IntentHelper.CreateNewVideoPath();
        FFMpeg ffmpeg = new FFMpeg(Android.App.Application.Context, _workingDirectory);
        TransposeVideoFilter vfTranspose = new TransposeVideoFilter(TransposeVideoFilter.NINETY_CLOCKWISE);
        var filters = new List<VideoFilter>();
        filters.Add(vfTranspose);

        Task.Run(() =>
        {
            var sourceClip = new Clip(System.IO.Path.Combine(_workingDirectory, sourceMp4)) { videoFilter = VideoFilter.Build(filters) };
            var onComplete = new MyCommand((_) =>
            {
                CurrentActivity.RunOnUiThread(() =>
                {
                    task.SetResult(destinationPath1);
                    //progress.Dismiss();
                });
            });

            var onMessage = new MyCommand((message) =>
            {
                System.Console.WriteLine(message);
            });

            var callbacks = new FFMpegCallbacks(onComplete, onMessage);
            string[] cmds = new string[] {
                    "-y",
                    "-i",
                    sourceClip.path,
                    "-strict", "experimental",
                    "-vcodec", "libx264",
                    "-preset", "ultrafast",
                    "-crf","38", "-acodec","aac", "-ar", "44100" ,
                    "-q:v", "12",
                      "-vf",sourceClip.videoFilter,
                    destinationPath1 ,
                      };
            ffmpeg.Execute(cmds, callbacks);
            return task.Task;
        });
        return task.Task;
    }

    public class MyCommand : ICommand
    {
        public delegate void ICommandOnExecute(object parameter = null);
        public delegate bool ICommandOnCanExecute(object parameter);

        private ICommandOnExecute _execute;
        private ICommandOnCanExecute _canExecute;

        public MyCommand(ICommandOnExecute onExecuteMethod)
        {
            _execute = onExecuteMethod;
        }

        public MyCommand(ICommandOnExecute onExecuteMethod, ICommandOnCanExecute onCanExecuteMethod)
        {
            _execute = onExecuteMethod;
            _canExecute = onCanExecuteMethod;
        }

        #region ICommand Members

        public event EventHandler CanExecuteChanged
        {
            add { throw new NotImplementedException(); }
            remove { throw new NotImplementedException(); }
        }

        public bool CanExecute(object parameter)
        {
            if (_canExecute == null && _execute != null)
                return true;

            return _canExecute.Invoke(parameter);
        }

        public void Execute(object parameter)
        {
            if (_execute == null)
                return;

            _execute.Invoke(parameter);
        }

        #endregion
    }

现在在 iOS 的依赖文件中使用此代码

公共任务 CompressVideo(string inputPath){

public Task CompressVideo(string inputPath) {

        var task = new TaskCompletionSource<string>();
        var export = new AVAssetExportSession(AVAsset.FromUrl(new NSUrl(inputPath)), AVAssetExportSession.PresetMediumQuality);
        string videoFilename = System.IO.Path.Combine(GetVideoDirectoryPath(), GetUniqueFileName(".mp4"));
        export.OutputUrl = NSUrl.FromFilename(videoFilename);
        export.OutputFileType = AVFileType.Mpeg4;
        export.ShouldOptimizeForNetworkUse = true;
        export.ExportAsynchronously(() =>
        {
            if (export.Status == AVAssetExportSessionStatus.Completed)
            {
                var videoData = NSData.FromUrl(NSUrl.FromString(export.OutputUrl.ToString()));
                NSError err = null;
                if (videoData.Save(videoFilename, false, out err))
                    task.SetResult(videoFilename);
                else
                    task.SetResult(null);
            }
            else
                task.SetResult(null);
        });

        return task.Task;

这篇关于如何以 xamarin 形式压缩(Zip)视频的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆