Code Monkey home page Code Monkey logo

android-video-trimmer-litr's Introduction

MIT licensed

Android-video-trimmer

Light weight version of Android-Video-Trimmer. It uses LiTr library as transcoder

How to use

For a working implementation, please have a look at the Sample Project

  1. Include the library as local library project.
  • Add the dependency to your app build.gradle file
dependencies {
   implementation 'com.github.a914-gowtham:android-video-trimmer-litr:1.5.11'
}
  • Add to project's root build.gradle file:
allprojects {
	repositories {
		maven { url 'https://jitpack.io' }
	}
}
  1. Add the code for opening Trim Activity.
TrimVideo.activity(String.valueOf(videoUri))
//        .setCompressOption(new CompressOption()) //empty constructor for default compress option
          .setHideSeekBar(true)
          .setDestination("/storage/emulated/0/DCIM/TESTFOLDER")  //default output path /storage/emulated/0/DOWNLOADS
          .start(this);
  1. Override onActivityResult method in your activity to get trim result
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (requestCode == TrimVideo.VIDEO_TRIMMER_REQ_CODE && data != null) {
            Uri uri = Uri.parse(TrimVideo.getTrimmedVideoPath(data));
            Log.d(TAG,"Trimmed path:: "+uri);
        }
}

Customization

Video Compress:

.setCompressOption(new CompressOption(bitRate))  //pass empty constructor for default compressoption
  • BitRate Bitrate Can be between 1 to 10.Lower bitrate can reduce the quality and size of the video.

Hide Player Seekbar:

.setHideSeekBar(true) //default value is false 

Custom TrimTypes

TrimType Default:

TrimVideo.activity(videoUri)
          .start(this);

TrimType Fixed Duration:

TrimVideo.activity(videoUri)
          .setTrimType(TrimType.FIXED_DURATION)
          .setFixedDuration(30) //seconds
          .start(this);

TrimType Minimum Duration:

TrimVideo.activity(videoUri)
          .setTrimType(TrimType.MIN_DURATION)
          .setMinDuration(30) //seconds
          .start(this);

TrimType Min-Max Duration:

TrimVideo.activity(videoUri)
          .setTrimType(TrimType.MIN_MAX_DURATION)
          .setMinToMax(10, 30)  //seconds
          .start(this);

Proguard Rules

-dontwarn com.videotrimmer.library**
-keep class com.videotrimmer.library** { *; }
-keep interface com.videotrimmer.library** { *; }

Compatibility

  • Library - Android Kitkat 4.4+ (API 19)
  • Sample - Android Kitkat 4.4+ (API 19)

ChangeLog

Version 1.5.11

  • Write permission removed

Version 1.5.3

  • First version

Acknowledgement

LiTr

Support

Show your support by giving a star to this repository.so this can keep me motivated to make improvements

Collaboration

There are many ways of improving and adding more features, so feel free to collaborate with ideas, issues and/or pull requests.

android-video-trimmer-litr's People

Contributors

a914-gowtham avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

android-video-trimmer-litr's Issues

Failed to create media source due to a data source error

The player doesn't load the video file from the content uri (Uri: content://media/external/video/media/454398).

LOGS:
2021-06-14 19:28:18.251 1805-1974/? I/Timeline: Timeline: Activity_windows_visible id: ActivityRecord{3c634b4 u0 com.raghav.videomerger/com.videotrimmer.library.ui.ActVideoTrimmer t5762} time:217283237
2021-06-14 19:28:18.259 1805-1974/? I/WindowManager: Screen frozen for +703ms due to Window{c0e499b u0 com.raghav.videomerger/com.videotrimmer.library.ui.ActVideoTrimmer}
2021-06-14 19:28:21.135 13506-13506/com.raghav.videomerger V/VIDEO_TRIMMER ::: onPlayerStateChanged: STATE_IDLE.
2021-06-14 19:28:22.973 13506-13506/com.raghav.videomerger V/VIDEO_TRIMMER ::: outputPath::/storage/emulated/0/Android/data/com.raghav.videomerger/files/Download/trimmed_video_2021_5_14_19_28_22.mp4
2021-06-14 19:28:22.973 13506-13506/com.raghav.videomerger V/VIDEO_TRIMMER ::: sourcePath::/data/user/0/com.raghav.videomerger/files/userfiles/VID-1623588541564.mp4
2021-06-14 19:28:22.979 13506-13506/com.raghav.videomerger V/VIDEO_TRIMMER ::: No compression option used
2021-06-14 19:28:23.043 13506-13506/com.raghav.videomerger V/VIDEO_TRIMMER ::: onError com.linkedin.android.litr.exception.MediaSourceException: Failed to create media source due to a data source errorMedia transformation failed for job id: null
Failed to create media source due to a data source error
Uri: content://media/external/video/media/454398
2021-06-14 19:28:23.052 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@e08f105
2021-06-14 19:28:23.062 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@e08f105
2021-06-14 19:28:29.394 13506-13506/com.raghav.videomerger W/ActivityThread: SCHED: com.raghav.videomerger/com.videotrimmer.library.ui.ActVideoTrimmer [71, r=421ms, a=168ms, w=11272ms]
2021-06-14 19:28:29.525 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@3f8fbb7
2021-06-14 19:28:29.541 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@3f8fbb7
2021-06-14 19:28:29.542 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@3f8fbb7
2021-06-14 19:28:29.547 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@3f8fbb7
2021-06-14 19:28:29.550 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@3f8fbb7
2021-06-14 19:28:29.587 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@3f8fbb7
2021-06-14 19:28:29.635 13506-13506/com.raghav.videomerger V/VIDEO_TRIMMER ::: VideoUri:: /data/user/0/com.raghav.videomerger/files/userfiles/VID-1623588541564.mp4
2021-06-14 19:28:29.636 13506-13506/com.raghav.videomerger W/System.err: at com.videotrimmer.library.utils.TrimmerUtils.getDuration(TrimmerUtils.java:46)
2021-06-14 19:28:29.636 13506-13506/com.raghav.videomerger W/System.err: at com.videotrimmer.library.ui.ActVideoTrimmer.setDataInView(ActVideoTrimmer.java:199)
2021-06-14 19:28:29.636 13506-13506/com.raghav.videomerger W/System.err: at com.videotrimmer.library.ui.ActVideoTrimmer.onPostCreate(ActVideoTrimmer.java:160)
2021-06-14 19:28:29.673 2449-2449/? D/RecentsImpl: mActivityStateObserver com.videotrimmer.library.ui.ActVideoTrimmer
2021-06-14 19:28:29.767 1805-1974/? I/Timeline: Timeline: Activity_windows_visible id: ActivityRecord{3c634b4 u0 com.raghav.videomerger/com.videotrimmer.library.ui.ActVideoTrimmer t5762} time:217294753
2021-06-14 19:28:29.776 1805-1974/? I/WindowManager: Screen frozen for +509ms due to Window{282a890 u0 com.raghav.videomerger/com.videotrimmer.library.ui.ActVideoTrimmer}
2021-06-14 19:28:32.671 13506-13506/com.raghav.videomerger V/VIDEO_TRIMMER ::: onPlayerStateChanged: STATE_IDLE.
2021-06-14 19:28:33.184 13506-13506/com.raghav.videomerger W/ActivityThread: SCHED: com.raghav.videomerger/com.videotrimmer.library.ui.ActVideoTrimmer [79, r=161ms, a=42ms, w=3523ms]
2021-06-14 19:28:35.791 1805-3047/? I/ActivityTaskManager: START u0 {cmp=com.raghav.videomerger/com.videotrimmer.library.ui.ActVideoTrimmer (has extras)} from uid 10579
2021-06-14 19:28:35.914 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@745761e
2021-06-14 19:28:35.915 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@745761e
2021-06-14 19:28:35.918 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@745761e
2021-06-14 19:28:35.920 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@745761e
2021-06-14 19:28:35.921 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@745761e
2021-06-14 19:28:35.942 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@745761e
2021-06-14 19:28:35.943 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@745761e
2021-06-14 19:28:35.971 13506-13506/com.raghav.videomerger D/ForceDarkHelper: updateByCheckExcludeList: pkg: com.raghav.videomerger activity: com.videotrimmer.library.ui.ActVideoTrimmer@745761e
2021-06-14 19:28:36.005 13506-13506/com.raghav.videomerger V/VIDEO_TRIMMER ::: VideoUri:: /data/user/0/com.raghav.videomerger/files/userfiles/VID-1623511630231.mp4
2021-06-14 19:28:36.006 13506-13506/com.raghav.videomerger W/System.err: at com.videotrimmer.library.utils.TrimmerUtils.getDuration(TrimmerUtils.java:46)
2021-06-14 19:28:36.006 13506-13506/com.raghav.videomerger W/System.err: at com.videotrimmer.library.ui.ActVideoTrimmer.setDataInView(ActVideoTrimmer.java:199)
2021-06-14 19:28:36.006 13506-13506/com.raghav.videomerger W/System.err: at com.videotrimmer.library.ui.ActVideoTrimmer.onPostCreate(ActVideoTrimmer.java:160)
2021-06-14 19:28:36.026 2449-2449/? D/RecentsImpl: mActivityStateObserver com.videotrimmer.library.ui.ActVideoTrimmer
2021-06-14 19:28:36.102 1805-1993/? I/ActivityTaskManager: Displayed com.raghav.videomerger/com.videotrimmer.library.ui.ActVideoTrimmer: +303ms
2021-06-14 19:28:36.578 1805-1974/? I/Timeline: Timeline: Activity_windows_visible id: ActivityRecord{2596667 u0 com.raghav.videomerger/com.videotrimmer.library.ui.ActVideoTrimmer t5762} time:217301563
2021-06-14 19:28:39.050 13506-13506/com.raghav.videomerger V/VIDEO_TRIMMER ::: onPlayerStateChanged: STATE_IDLE.
2021-06-14 19:30:07.932 13506-13506/com.raghav.videomerger W/ActivityThread: SCHED: com.raghav.videomerger/com.videotrimmer.library.ui.ActVideoTrimmer [76, r=133ms, a=41ms, w=91919ms]
2021-06-14 19:31:08.174 14647-14696/? I/cr_BindingManager: onTrimMemory: level=20, size=0

CODE
String srcUri= getIntent().getStringExtra("uri");

//the srcUri contains the content uri
//content://media/external/video/media/454398
TrimVideo.activity(srcUri)
.setHideSeekBar(true)
.setDestination(file.getAbsolutePath()) //default output path /storage/emulated/0/DOWNLOADS
.start(this);
and
@OverRide
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == TrimVideo.VIDEO_TRIMMER_REQ_CODE && data != null) {
Uri uri = Uri.parse(TrimVideo.getTrimmedVideoPath(data));
Log.d("TAG", "Trimmed path:: " + uri);
}
}

Destination path is working

I have tried to set the destination path of the trimmed video but it always go to the default path which as been set in to the ActVideoTrimmer.java class.

Screenshot from 2021-11-02 16-34-06

Failed to trim

In some videos , when try to trim (5 seconds only ) ,it's failed and return the message (Failed to trim
Screenshot_20210606-085719
)

NullPointerException when I try to trim a video

Process: com.selfieyo2, PID: 2944
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.app.Dialog.isShowing()' on a null object reference
    at com.videotrimmer.library.ui.ActVideoTrimmer$2.onError(ActVideoTrimmer.java:607)
    at com.linkedin.android.litr.MarshallingTransformationListener$MarshallingHandler.handleMessage(MarshallingTransformationListener.java:160)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:224)
    at android.app.ActivityThread.main(ActivityThread.java:7551)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995)

Missing allprojects from gradle settings

Hello folks, I was trying to add new dependency to my project in order to test this library.
I have added in build.gradle
implementation 'com.github.a914-gowtham:android-video-trimmer-litr:1.5.11'
but this section is missing from my project structure.
allprojects { repositories { maven { url 'https://jitpack.io' } } }
However I have found in settings.gradle this section of code
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() maven { url 'https://jitpack.io' } } }
It seems like maven is already added but in a different way.
By now I am not able to test it because I have these errors in my build.

image
Any idea?
Thank you for helping me!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.