react-native-video-trim 3.0.10 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +46 -57
  3. package/VideoTrim.podspec +24 -0
  4. package/android/CMakeLists.txt +24 -0
  5. package/android/build.gradle +76 -51
  6. package/android/gradle.properties +5 -5
  7. package/android/src/main/AndroidManifest.xml +4 -2
  8. package/android/src/main/cpp/cpp-adapter.cpp +6 -0
  9. package/android/src/main/java/com/margelo/nitro/videotrim/VideoTrim.kt +629 -0
  10. package/android/src/main/java/com/margelo/nitro/videotrim/VideoTrimPackage.kt +22 -0
  11. package/android/src/main/java/com/{videotrim → margelo/nitro/videotrim}/enums/ErrorCode.java +1 -1
  12. package/android/src/main/java/com/{videotrim → margelo/nitro/videotrim}/interfaces/IVideoTrimmerView.java +1 -1
  13. package/android/src/main/java/com/{videotrim → margelo/nitro/videotrim}/interfaces/VideoTrimListener.java +6 -5
  14. package/android/src/main/java/com/{videotrim → margelo/nitro/videotrim}/utils/MediaMetadataUtil.java +1 -1
  15. package/android/src/main/java/com/{videotrim → margelo/nitro/videotrim}/utils/StorageUtil.java +3 -1
  16. package/android/src/main/java/com/{videotrim → margelo/nitro/videotrim}/utils/VideoTrimmerUtil.java +22 -20
  17. package/android/src/main/java/com/{videotrim → margelo/nitro/videotrim}/widgets/VideoTrimmerView.java +38 -66
  18. package/ios/AssetLoader.swift +2 -2
  19. package/ios/ErrorCode.swift +2 -2
  20. package/ios/ProgressAlertController.swift +2 -2
  21. package/ios/VideoTrim.swift +48 -838
  22. package/ios/VideoTrimImpl.swift +860 -0
  23. package/ios/VideoTrimmer.swift +2 -3
  24. package/ios/VideoTrimmerThumb.swift +33 -26
  25. package/ios/VideoTrimmerViewController.swift +47 -28
  26. package/lib/module/VideoTrim.nitro.js +4 -0
  27. package/lib/module/VideoTrim.nitro.js.map +1 -0
  28. package/lib/module/index.js +71 -22
  29. package/lib/module/index.js.map +1 -1
  30. package/lib/module/package.json +1 -0
  31. package/lib/typescript/package.json +1 -0
  32. package/lib/typescript/{index.d.ts → src/VideoTrim.nitro.d.ts} +63 -89
  33. package/lib/typescript/src/VideoTrim.nitro.d.ts.map +1 -0
  34. package/lib/typescript/src/index.d.ts +41 -0
  35. package/lib/typescript/src/index.d.ts.map +1 -0
  36. package/nitrogen/generated/android/c++/JEditorConfig.hpp +229 -0
  37. package/nitrogen/generated/android/c++/JFileValidationResult.hpp +61 -0
  38. package/nitrogen/generated/android/c++/JFunc_void.hpp +74 -0
  39. package/nitrogen/generated/android/c++/JFunc_void_std__string_std__unordered_map_std__string__std__string_.hpp +89 -0
  40. package/nitrogen/generated/android/c++/JHybridVideoTrimSpec.cpp +131 -0
  41. package/nitrogen/generated/android/c++/JHybridVideoTrimSpec.hpp +67 -0
  42. package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/EditorConfig.kt +70 -0
  43. package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/FileValidationResult.kt +28 -0
  44. package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/Func_void.kt +80 -0
  45. package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/Func_void_std__string_std__unordered_map_std__string__std__string_.kt +80 -0
  46. package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/HybridVideoTrimSpec.kt +82 -0
  47. package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/videotrimOnLoad.kt +35 -0
  48. package/nitrogen/generated/android/videotrim+autolinking.cmake +78 -0
  49. package/nitrogen/generated/android/videotrim+autolinking.gradle +27 -0
  50. package/nitrogen/generated/android/videotrimOnLoad.cpp +50 -0
  51. package/nitrogen/generated/android/videotrimOnLoad.hpp +25 -0
  52. package/nitrogen/generated/ios/VideoTrim+autolinking.rb +60 -0
  53. package/nitrogen/generated/ios/VideoTrim-Swift-Cxx-Bridge.cpp +88 -0
  54. package/nitrogen/generated/ios/VideoTrim-Swift-Cxx-Bridge.hpp +331 -0
  55. package/nitrogen/generated/ios/VideoTrim-Swift-Cxx-Umbrella.hpp +53 -0
  56. package/nitrogen/generated/ios/VideoTrimAutolinking.mm +33 -0
  57. package/nitrogen/generated/ios/VideoTrimAutolinking.swift +25 -0
  58. package/nitrogen/generated/ios/c++/HybridVideoTrimSpecSwift.cpp +11 -0
  59. package/nitrogen/generated/ios/c++/HybridVideoTrimSpecSwift.hpp +116 -0
  60. package/nitrogen/generated/ios/swift/EditorConfig.swift +519 -0
  61. package/nitrogen/generated/ios/swift/FileValidationResult.swift +57 -0
  62. package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
  63. package/nitrogen/generated/ios/swift/Func_void_FileValidationResult.swift +46 -0
  64. package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
  65. package/nitrogen/generated/ios/swift/Func_void_double.swift +46 -0
  66. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
  67. package/nitrogen/generated/ios/swift/Func_void_std__string_std__unordered_map_std__string__std__string_.swift +54 -0
  68. package/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift +46 -0
  69. package/nitrogen/generated/ios/swift/HybridVideoTrimSpec.swift +53 -0
  70. package/nitrogen/generated/ios/swift/HybridVideoTrimSpec_cxx.swift +222 -0
  71. package/nitrogen/generated/shared/c++/EditorConfig.hpp +245 -0
  72. package/nitrogen/generated/shared/c++/FileValidationResult.hpp +77 -0
  73. package/nitrogen/generated/shared/c++/HybridVideoTrimSpec.cpp +26 -0
  74. package/nitrogen/generated/shared/c++/HybridVideoTrimSpec.hpp +76 -0
  75. package/package.json +75 -71
  76. package/src/VideoTrim.nitro.ts +244 -0
  77. package/src/index.tsx +87 -258
  78. package/android/src/main/AndroidManifestDeprecated.xml +0 -3
  79. package/android/src/main/java/com/videotrim/VideoTrimModule.java +0 -603
  80. package/android/src/main/java/com/videotrim/VideoTrimPackage.java +0 -28
  81. package/ios/VideoTrim-Bridging-Header.h +0 -2
  82. package/ios/VideoTrim.mm +0 -17
  83. package/ios/VideoTrim.xcodeproj/project.pbxproj +0 -283
  84. package/lib/commonjs/index.js +0 -87
  85. package/lib/commonjs/index.js.map +0 -1
  86. package/lib/typescript/index.d.ts.map +0 -1
  87. package/react-native-video-trim.podspec +0 -43
@@ -1,4 +1,4 @@
1
- package com.videotrim.utils;
1
+ package com.margelo.nitro.videotrim.utils;
2
2
 
3
3
  import android.content.ContentValues;
4
4
  import android.content.Context;
@@ -8,7 +8,9 @@ import android.os.Build;
8
8
  import android.os.Environment;
9
9
  import android.provider.MediaStore;
10
10
  import android.text.TextUtils;
11
+
11
12
  import com.facebook.react.bridge.ReactApplicationContext;
13
+
12
14
  import java.io.File;
13
15
  import java.io.FileInputStream;
14
16
  import java.io.FileOutputStream;
@@ -1,4 +1,4 @@
1
- package com.videotrim.utils;
1
+ package com.margelo.nitro.videotrim.utils;
2
2
 
3
3
  import android.annotation.SuppressLint;
4
4
  import android.graphics.Bitmap;
@@ -9,13 +9,13 @@ import com.arthenica.ffmpegkit.FFmpegKit;
9
9
  import com.arthenica.ffmpegkit.FFmpegSession;
10
10
  import com.arthenica.ffmpegkit.ReturnCode;
11
11
  import com.arthenica.ffmpegkit.SessionState;
12
- import com.facebook.react.bridge.Arguments;
13
- import com.facebook.react.bridge.WritableMap;
14
- import com.videotrim.enums.ErrorCode;
15
- import com.videotrim.interfaces.VideoTrimListener;
12
+ import com.margelo.nitro.videotrim.enums.ErrorCode;
13
+ import com.margelo.nitro.videotrim.interfaces.VideoTrimListener;
16
14
 
17
15
  import java.text.SimpleDateFormat;
18
16
  import java.util.Date;
17
+ import java.util.HashMap;
18
+ import java.util.Map;
19
19
  import java.util.TimeZone;
20
20
 
21
21
  import iknow.android.utils.DeviceUtil;
@@ -23,6 +23,7 @@ import iknow.android.utils.UnitConverter;
23
23
  import iknow.android.utils.callback.SingleCallback;
24
24
  import iknow.android.utils.thread.BackgroundExecutor;
25
25
 
26
+
26
27
  public class VideoTrimmerUtil {
27
28
 
28
29
  private static final String TAG = VideoTrimmerUtil.class.getSimpleName();
@@ -90,11 +91,12 @@ public class VideoTrimmerUtil {
90
91
  }, log -> {
91
92
  Log.d(TAG, "FFmpeg process started with log " + log.getMessage());
92
93
 
93
- WritableMap map = Arguments.createMap();
94
- map.putInt("level", log.getLevel().getValue());
95
- map.putString("message", log.getMessage());
96
- map.putDouble("sessionId", log.getSessionId());
97
- map.putString("logStr", log.toString());
94
+ Map<String, String> map = new HashMap<>();
95
+ map.put("level", String.valueOf(log.getLevel().getValue()));
96
+ map.put("message", log.getMessage());
97
+ map.put("sessionId", String.valueOf(log.getSessionId()));
98
+ map.put("logStr", log.toString());
99
+
98
100
  callback.onLog(map);
99
101
  }, statistics -> {
100
102
  int timeInMilliseconds = (int) statistics.getTime();
@@ -104,16 +106,16 @@ public class VideoTrimmerUtil {
104
106
  callback.onTrimmingProgress(Math.min(Math.max(completePercentage, 0), 100));
105
107
  }
106
108
 
107
- WritableMap map = Arguments.createMap();
108
- map.putDouble("sessionId", statistics.getSessionId());
109
- map.putInt("videoFrameNumber", statistics.getVideoFrameNumber());
110
- map.putDouble("videoFps", statistics.getVideoFps());
111
- map.putDouble("videoQuality", statistics.getVideoQuality());
112
- map.putDouble("size", statistics.getSize());
113
- map.putDouble("time", statistics.getTime());
114
- map.putDouble("bitrate", statistics.getBitrate());
115
- map.putDouble("speed", statistics.getSpeed());
116
- map.putString("statisticsStr", statistics.toString());
109
+ Map<String, String> map = new HashMap<>();
110
+ map.put("sessionId", String.valueOf(statistics.getSessionId()));
111
+ map.put("videoFrameNumber", String.valueOf(statistics.getVideoFrameNumber()));
112
+ map.put("videoFps", String.valueOf(statistics.getVideoFps()));
113
+ map.put("videoQuality", String.valueOf(statistics.getVideoQuality()));
114
+ map.put("size", String.valueOf(statistics.getSize()));
115
+ map.put("time", String.valueOf(statistics.getTime()));
116
+ map.put("bitrate", String.valueOf(statistics.getBitrate()));
117
+ map.put("speed", String.valueOf(statistics.getSpeed()));
118
+ map.put("statisticsStr", statistics.toString());
117
119
  callback.onStatistics(map);
118
120
  });
119
121
  }
@@ -1,8 +1,8 @@
1
- package com.videotrim.widgets;
1
+ package com.margelo.nitro.videotrim.widgets;
2
2
 
3
3
  import static com.facebook.react.bridge.UiThreadUtil.runOnUiThread;
4
- import static com.videotrim.utils.VideoTrimmerUtil.RECYCLER_VIEW_PADDING;
5
- import static com.videotrim.utils.VideoTrimmerUtil.VIDEO_FRAMES_WIDTH;
4
+ import static com.margelo.nitro.videotrim.utils.VideoTrimmerUtil.RECYCLER_VIEW_PADDING;
5
+ import static com.margelo.nitro.videotrim.utils.VideoTrimmerUtil.VIDEO_FRAMES_WIDTH;
6
6
 
7
7
  import android.content.Context;
8
8
  import android.content.pm.ActivityInfo;
@@ -32,15 +32,16 @@ import android.widget.VideoView;
32
32
 
33
33
  import androidx.appcompat.app.AlertDialog;
34
34
 
35
+ import com.arthenica.ffmpegkit.FFmpegSession;
35
36
  import com.facebook.react.bridge.ReactApplicationContext;
36
- import com.facebook.react.bridge.ReadableMap;
37
- import com.videotrim.R;
38
- import com.videotrim.enums.ErrorCode;
39
- import com.videotrim.interfaces.IVideoTrimmerView;
40
- import com.videotrim.interfaces.VideoTrimListener;
41
- import com.videotrim.utils.MediaMetadataUtil;
42
- import com.videotrim.utils.StorageUtil;
43
- import com.videotrim.utils.VideoTrimmerUtil;
37
+ import com.margelo.nitro.videotrim.EditorConfig;
38
+ import com.margelo.nitro.videotrim.R;
39
+ import com.margelo.nitro.videotrim.enums.ErrorCode;
40
+ import com.margelo.nitro.videotrim.interfaces.IVideoTrimmerView;
41
+ import com.margelo.nitro.videotrim.interfaces.VideoTrimListener;
42
+ import com.margelo.nitro.videotrim.utils.MediaMetadataUtil;
43
+ import com.margelo.nitro.videotrim.utils.StorageUtil;
44
+ import com.margelo.nitro.videotrim.utils.VideoTrimmerUtil;
44
45
 
45
46
  import java.io.IOException;
46
47
  import java.util.Locale;
@@ -48,7 +49,6 @@ import java.util.Locale;
48
49
  import iknow.android.utils.DeviceUtil;
49
50
  import iknow.android.utils.thread.BackgroundExecutor;
50
51
  import iknow.android.utils.thread.UiThreadExecutor;
51
- import com.arthenica.ffmpegkit.FFmpegSession;
52
52
 
53
53
  public class VideoTrimmerView extends FrameLayout implements IVideoTrimmerView {
54
54
 
@@ -116,16 +116,16 @@ public class VideoTrimmerView extends FrameLayout implements IVideoTrimmerView {
116
116
  private String alertOnFailCloseText = "Close";
117
117
  private View currentSelectedhandle;
118
118
 
119
- public VideoTrimmerView(ReactApplicationContext context, ReadableMap config, AttributeSet attrs) {
119
+ public VideoTrimmerView(ReactApplicationContext context, EditorConfig config, AttributeSet attrs) {
120
120
  this(context, attrs, 0, config);
121
121
  }
122
122
 
123
- public VideoTrimmerView(ReactApplicationContext context, AttributeSet attrs, int defStyleAttr, ReadableMap config) {
123
+ public VideoTrimmerView(ReactApplicationContext context, AttributeSet attrs, int defStyleAttr, EditorConfig config) {
124
124
  super(context, attrs, defStyleAttr);
125
125
  init(context, config);
126
126
  }
127
127
 
128
- private void init(ReactApplicationContext context, ReadableMap config) {
128
+ private void init(ReactApplicationContext context, EditorConfig config) {
129
129
  this.mContext = context;
130
130
 
131
131
  context.getCurrentActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
@@ -445,79 +445,51 @@ public class VideoTrimmerView extends FrameLayout implements IVideoTrimmerView {
445
445
  return screenWidth;
446
446
  }
447
447
 
448
- private void configure(ReadableMap config) {
449
- if (config.hasKey("maxDuration")) {
450
- mMaxDuration = Math.max(0, config.getInt("maxDuration") * 1000L);
451
- }
452
- if (config.hasKey("minDuration")) {
453
- mMinDuration = Math.max(1000L, config.getInt("minDuration") * 1000L);
448
+ private void configure(EditorConfig config) {
449
+ if (config.getMaxDuration() > 0) {
450
+ mMaxDuration = (long) Math.max(0, config.getMaxDuration() * 1000L);
454
451
  }
455
- if (config.hasKey("cancelButtonText")) {
456
- cancelBtn.setText(config.getString("cancelButtonText"));
457
- }
458
- if (config.hasKey("saveButtonText")) {
459
- saveBtn.setText(config.getString("saveButtonText"));
452
+
453
+ if (config.getMinDuration() > 0) {
454
+ mMinDuration = (long) Math.max(1000L, config.getMinDuration() * 1000L);
460
455
  }
461
456
 
462
- if (config.hasKey("type")) {
463
- isVideoType = !config.getString("type").equals("audio");
457
+ cancelBtn.setText(config.getCancelButtonText());
464
458
 
465
- // if (!isVideoType) {
466
- // mThumbnailContainer.setAlpha(0f);
467
- // mThumbnailContainer.setBackground(ContextCompat.getDrawable(mContext, R.drawable.thumb_container_bg));
468
- // }
469
- }
459
+ saveBtn.setText(config.getSaveButtonText());
460
+
461
+ isVideoType = config.getType().equals("video");
470
462
 
471
- if (config.hasKey("outputExt")) {
472
- mOutputExt = config.getString("outputExt");
473
- } else if (!isVideoType) {
463
+ mOutputExt = config.getOutputExt();
464
+ if (!isVideoType) {
474
465
  mOutputExt = "wav";
475
466
  }
476
467
 
477
- if (config.hasKey("enableHapticFeedback")) {
478
- enableHapticFeedback = config.getBoolean("enableHapticFeedback");
479
- }
468
+ enableHapticFeedback = config.getEnableHapticFeedback();
469
+ autoplay = config.getAutoplay();
480
470
 
481
- if (config.hasKey("autoplay")) {
482
- autoplay = config.getBoolean("autoplay");
471
+ if (config.getJumpToPositionOnLoad() > 0) {
472
+ jumpToPositionOnLoad = (long) config.getJumpToPositionOnLoad();
483
473
  }
484
474
 
485
- if (config.hasKey("jumpToPositionOnLoad")) {
486
- jumpToPositionOnLoad = config.getInt("jumpToPositionOnLoad");
487
- }
488
- // check if config.getString("headerText") is not empty
475
+ headerText.setText(config.getHeaderText());
489
476
 
490
- if (config.hasKey("headerText") && !config.getString("headerText").isEmpty()){
491
- headerText.setText(config.getString("headerText"));
492
-
493
- if (config.hasKey("headerTextSize")) {
494
- int textSize = config.getInt("headerTextSize");
477
+ int textSize = (int) config.getHeaderTextSize();
495
478
  if (textSize < 0) {
496
479
  textSize = 16;
497
480
  }
498
481
  headerText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSize);
499
- }
500
-
501
- if (config.hasKey("headerTextColor")) {
502
- headerText.setTextColor(config.getInt("headerTextColor"));
503
- }
482
+ headerText.setTextColor((int) config.getHeaderTextColor());
504
483
 
505
484
  headerView.setVisibility(View.VISIBLE);
506
- }
507
485
 
508
- alertOnFailToLoad = !config.hasKey("alertOnFailToLoad") || config.getBoolean("alertOnFailToLoad");
486
+ alertOnFailToLoad = config.getAlertOnFailToLoad();
509
487
 
510
- if (config.hasKey("alertOnFailTitle")) {
511
- alertOnFailTitle = config.getString("alertOnFailTitle");
512
- }
488
+ alertOnFailTitle = config.getAlertOnFailTitle();
513
489
 
514
- if (config.hasKey("alertOnFailMessage")) {
515
- alertOnFailMessage = config.getString("alertOnFailMessage");
516
- }
490
+ alertOnFailMessage = config.getAlertOnFailMessage();
517
491
 
518
- if (config.hasKey("alertOnFailCloseText")) {
519
- alertOnFailCloseText = config.getString("alertOnFailCloseText");
520
- }
492
+ alertOnFailCloseText = config.getAlertOnFailCloseText();
521
493
  }
522
494
 
523
495
  private void startTimingRunnable() {
@@ -1,8 +1,8 @@
1
1
  //
2
2
  // AssetLoader.swift
3
- // react-native-video-trim
3
+ // VideoTrim
4
4
  //
5
- // Created by Duc Trung Mai on 7/27/24.
5
+ // Created by Duc Trung Mai on 20/5/25.
6
6
  //
7
7
 
8
8
  import AVFoundation
@@ -1,8 +1,8 @@
1
1
  //
2
2
  // ErrorCode.swift
3
- // react-native-video-trim
3
+ // VideoTrim
4
4
  //
5
- // Created by ByteDance on 7/27/24.
5
+ // Created by Duc Trung Mai on 20/5/25.
6
6
  //
7
7
 
8
8
  import Foundation
@@ -1,8 +1,8 @@
1
1
  //
2
2
  // ProgressAlertController.swift
3
- // react-native-video-trim
3
+ // VideoTrim
4
4
  //
5
- // Created by Duc Trung Mai on 8/18/24.
5
+ // Created by Duc Trung Mai on 20/5/25.
6
6
  //
7
7
 
8
8
  import UIKit