Advertisement
Guest User

Untitled

a guest
Sep 24th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.95 KB | None | 0 0
  1.  
  2. public class TrimVideo : ITrim
  3. {
  4. AVAsset avAsset;
  5.  
  6. public void Trim(int start, int end, string path)
  7. {
  8. avAsset = AVAsset.FromUrl(NSUrl.FromFilename(path));
  9.  
  10. if (avAsset.Duration.Seconds < 60)
  11. {
  12. return;
  13. }
  14.  
  15. string preset = getPreset(avAsset);
  16.  
  17. var exportSession = new AVAssetExportSession(avAsset, preset);
  18.  
  19. // куда сохранится видео
  20. exportSession.OutputUrl = NSUrl.FromFilename(outputTrim());
  21. // формат видео
  22. exportSession.OutputFileType = AVFileType.Mpeg4;
  23.  
  24. var range = new CMTimeRange();
  25. range.Start = CMTime.FromSeconds(start, avAsset.Duration.TimeScale);
  26. range.Duration = CMTime.FromSeconds(end, avAsset.Duration.TimeScale);
  27. exportSession.TimeRange = range;
  28.  
  29. exportSession.ExportAsynchronously(delegate {
  30. switch (exportSession.Status)
  31. {
  32. case AVAssetExportSessionStatus.Completed:
  33. Console.WriteLine($"exported at {exportSession.OutputUrl}");
  34. Device.BeginInvokeOnMainThread(() =>
  35. UIVideo.SaveToPhotosAlbum(exportSession.OutputUrl.Path, delegate (string _path, NSError error)
  36. {
  37. Console.WriteLine($"path {_path}");
  38. if (error != null)
  39. Console.WriteLine($"error {error.Description}");
  40.  
  41. }));
  42. break;
  43. case AVAssetExportSessionStatus.Failed:
  44. Console.WriteLine($"failed {exportSession.Error}");
  45. break;
  46. case AVAssetExportSessionStatus.Cancelled:
  47. Console.WriteLine($"cancelled {exportSession.Error}");
  48. break;
  49. default:
  50. Console.WriteLine($"def {exportSession.Error}");
  51. break;
  52. }
  53. });
  54. }
  55.  
  56. string outputTrim()
  57. {
  58. var documents = NSFileManager.DefaultManager.GetUrls(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomain.User)[0].Path;
  59. return Path.Combine(documents, $"trimmed{Guid.NewGuid()}.mp4");
  60. }
  61.  
  62. string getPreset(AVAsset asset)
  63. {
  64. var compatiblePresets = AVAssetExportSession.ExportPresetsCompatibleWithAsset(avAsset).ToList();
  65. string preset;
  66.  
  67. if (compatiblePresets.Contains("AVAssetExportPresetLowQuality"))
  68. {
  69. preset = "AVAssetExportPresetLowQuality";
  70. }
  71. else
  72. {
  73. preset = compatiblePresets.FirstOrDefault();
  74. }
  75.  
  76. return preset;
  77. }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement