如何以 xamarin 形式压缩(Zip)视频 [英] How to compress(Zip) a video in xamarin forms
本文介绍了如何以 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屋!
查看全文