Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class TrimVideo : ITrim
- {
- AVAsset avAsset;
- public void Trim(int start, int end, string path)
- {
- avAsset = AVAsset.FromUrl(NSUrl.FromFilename(path));
- if (avAsset.Duration.Seconds < 60)
- {
- return;
- }
- string preset = getPreset(avAsset);
- var exportSession = new AVAssetExportSession(avAsset, preset);
- // куда сохранится видео
- exportSession.OutputUrl = NSUrl.FromFilename(outputTrim());
- // формат видео
- exportSession.OutputFileType = AVFileType.Mpeg4;
- var range = new CMTimeRange();
- range.Start = CMTime.FromSeconds(start, avAsset.Duration.TimeScale);
- range.Duration = CMTime.FromSeconds(end, avAsset.Duration.TimeScale);
- exportSession.TimeRange = range;
- exportSession.ExportAsynchronously(delegate {
- switch (exportSession.Status)
- {
- case AVAssetExportSessionStatus.Completed:
- Console.WriteLine($"exported at {exportSession.OutputUrl}");
- Device.BeginInvokeOnMainThread(() =>
- UIVideo.SaveToPhotosAlbum(exportSession.OutputUrl.Path, delegate (string _path, NSError error)
- {
- Console.WriteLine($"path {_path}");
- if (error != null)
- Console.WriteLine($"error {error.Description}");
- }));
- break;
- case AVAssetExportSessionStatus.Failed:
- Console.WriteLine($"failed {exportSession.Error}");
- break;
- case AVAssetExportSessionStatus.Cancelled:
- Console.WriteLine($"cancelled {exportSession.Error}");
- break;
- default:
- Console.WriteLine($"def {exportSession.Error}");
- break;
- }
- });
- }
- string outputTrim()
- {
- var documents = NSFileManager.DefaultManager.GetUrls(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomain.User)[0].Path;
- return Path.Combine(documents, $"trimmed{Guid.NewGuid()}.mp4");
- }
- string getPreset(AVAsset asset)
- {
- var compatiblePresets = AVAssetExportSession.ExportPresetsCompatibleWithAsset(avAsset).ToList();
- string preset;
- if (compatiblePresets.Contains("AVAssetExportPresetLowQuality"))
- {
- preset = "AVAssetExportPresetLowQuality";
- }
- else
- {
- preset = compatiblePresets.FirstOrDefault();
- }
- return preset;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement