├── app
├── .gitignore
├── src
│ └── main
│ │ ├── res
│ │ ├── values
│ │ │ ├── strings.xml
│ │ │ ├── colors.xml
│ │ │ └── themes.xml
│ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ └── layout
│ │ │ └── activity_main.xml
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── xiaoguang
│ │ └── widget
│ │ └── videocompress
│ │ └── demo
│ │ └── MainActivity.java
├── proguard-rules.pro
└── build.gradle
├── videocompress
├── .gitignore
├── consumer-rules.pro
├── libs
│ ├── aspectjrt-1.7.3.jar
│ └── isoparser-1.0.6.jar
├── src
│ └── main
│ │ ├── res
│ │ ├── drawable-xxhdpi
│ │ │ ├── ic_file_img.png
│ │ │ ├── ic_file_pdf.png
│ │ │ ├── ic_file_ppt.png
│ │ │ ├── ic_file_txt.png
│ │ │ ├── ic_file_zip.png
│ │ │ ├── ic_file_excel.png
│ │ │ ├── ic_file_music.png
│ │ │ ├── ic_file_video.png
│ │ │ ├── ic_file_word.png
│ │ │ └── ic_file_not_found.png
│ │ ├── values
│ │ │ ├── strings.xml
│ │ │ ├── colors.xml
│ │ │ └── themes.xml
│ │ ├── drawable
│ │ │ ├── shape_color_4d000000_radius_16.xml
│ │ │ └── shape_color_white_radius_16.xml
│ │ └── layout
│ │ │ └── dialog_media_loading.xml
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── xiaoguang
│ │ └── widget
│ │ └── videocompress
│ │ ├── core
│ │ ├── Sample.java
│ │ ├── Mp4Movie.java
│ │ ├── VideoCompress.java
│ │ ├── InputSurface.java
│ │ ├── OutputSurface.java
│ │ ├── TextureRenderer.java
│ │ ├── Track.java
│ │ ├── MP4Builder.java
│ │ └── VideoController.java
│ │ └── dialog
│ │ └── VideoCompressDialog.java
├── build.gradle
└── proguard-rules.pro
├── settings.gradle
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .gitignore
├── gradle.properties
├── gradlew.bat
├── gradlew
└── README.md
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/videocompress/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/videocompress/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app', ':videocompress'
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | VideoCompression
3 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ITxiaoguang/VideoCompress/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | .idea/
5 | .DS_Store
6 | /build
7 | /captures
8 | .externalNativeBuild
9 |
--------------------------------------------------------------------------------
/videocompress/libs/aspectjrt-1.7.3.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ITxiaoguang/VideoCompress/HEAD/videocompress/libs/aspectjrt-1.7.3.jar
--------------------------------------------------------------------------------
/videocompress/libs/isoparser-1.0.6.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ITxiaoguang/VideoCompress/HEAD/videocompress/libs/isoparser-1.0.6.jar
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ITxiaoguang/VideoCompress/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ITxiaoguang/VideoCompress/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/videocompress/src/main/res/drawable-xxhdpi/ic_file_img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ITxiaoguang/VideoCompress/HEAD/videocompress/src/main/res/drawable-xxhdpi/ic_file_img.png
--------------------------------------------------------------------------------
/videocompress/src/main/res/drawable-xxhdpi/ic_file_pdf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ITxiaoguang/VideoCompress/HEAD/videocompress/src/main/res/drawable-xxhdpi/ic_file_pdf.png
--------------------------------------------------------------------------------
/videocompress/src/main/res/drawable-xxhdpi/ic_file_ppt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ITxiaoguang/VideoCompress/HEAD/videocompress/src/main/res/drawable-xxhdpi/ic_file_ppt.png
--------------------------------------------------------------------------------
/videocompress/src/main/res/drawable-xxhdpi/ic_file_txt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ITxiaoguang/VideoCompress/HEAD/videocompress/src/main/res/drawable-xxhdpi/ic_file_txt.png
--------------------------------------------------------------------------------
/videocompress/src/main/res/drawable-xxhdpi/ic_file_zip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ITxiaoguang/VideoCompress/HEAD/videocompress/src/main/res/drawable-xxhdpi/ic_file_zip.png
--------------------------------------------------------------------------------
/videocompress/src/main/res/drawable-xxhdpi/ic_file_excel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ITxiaoguang/VideoCompress/HEAD/videocompress/src/main/res/drawable-xxhdpi/ic_file_excel.png
--------------------------------------------------------------------------------
/videocompress/src/main/res/drawable-xxhdpi/ic_file_music.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ITxiaoguang/VideoCompress/HEAD/videocompress/src/main/res/drawable-xxhdpi/ic_file_music.png
--------------------------------------------------------------------------------
/videocompress/src/main/res/drawable-xxhdpi/ic_file_video.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ITxiaoguang/VideoCompress/HEAD/videocompress/src/main/res/drawable-xxhdpi/ic_file_video.png
--------------------------------------------------------------------------------
/videocompress/src/main/res/drawable-xxhdpi/ic_file_word.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ITxiaoguang/VideoCompress/HEAD/videocompress/src/main/res/drawable-xxhdpi/ic_file_word.png
--------------------------------------------------------------------------------
/videocompress/src/main/res/drawable-xxhdpi/ic_file_not_found.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ITxiaoguang/VideoCompress/HEAD/videocompress/src/main/res/drawable-xxhdpi/ic_file_not_found.png
--------------------------------------------------------------------------------
/videocompress/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
--------------------------------------------------------------------------------
/videocompress/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 压缩中...
4 | 取消
5 | 取消转码。
6 | 压缩失败。
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FF8048
4 | @android:color/white
5 | @android:color/transparent
6 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sat Oct 23 09:58:22 CST 2021
2 | distributionBase=GRADLE_USER_HOME
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
4 | distributionPath=wrapper/dists
5 | zipStorePath=wrapper/dists
6 | zipStoreBase=GRADLE_USER_HOME
7 |
--------------------------------------------------------------------------------
/videocompress/src/main/res/drawable/shape_color_4d000000_radius_16.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/videocompress/src/main/res/drawable/shape_color_white_radius_16.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/videocompress/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FF8048
4 | @android:color/white
5 | @android:color/transparent
6 |
7 | #111111
8 |
9 |
--------------------------------------------------------------------------------
/videocompress/src/main/java/com/xiaoguang/widget/videocompress/core/Sample.java:
--------------------------------------------------------------------------------
1 | package com.xiaoguang.widget.videocompress.core;
2 |
3 | public class Sample {
4 | private long offset = 0;
5 | private long size = 0;
6 |
7 | public Sample(long offset, long size) {
8 | this.offset = offset;
9 | this.size = size;
10 | }
11 |
12 | public long getOffset() {
13 | return offset;
14 | }
15 |
16 | public long getSize() {
17 | return size;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
13 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/videocompress/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id 'com.android.library'
3 | }
4 |
5 | android {
6 | compileSdk 30
7 |
8 | defaultConfig {
9 | minSdk 14
10 | targetSdk 30
11 | versionCode 1
12 | versionName "1.0.0"
13 | }
14 |
15 | buildTypes {
16 | release {
17 | minifyEnabled false
18 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
19 | }
20 | }
21 | compileOptions {
22 | sourceCompatibility JavaVersion.VERSION_1_8
23 | targetCompatibility JavaVersion.VERSION_1_8
24 | }
25 | }
26 |
27 | dependencies {
28 | api fileTree(dir: 'libs', include: ['*.jar'])
29 |
30 | implementation 'androidx.appcompat:appcompat:1.2.0'
31 | implementation 'com.google.android.material:material:1.4.0'
32 | }
--------------------------------------------------------------------------------
/videocompress/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 |
3 |
4 | id 'com.android.application'
5 | }
6 |
7 | android {
8 | compileSdk 30
9 |
10 | defaultConfig {
11 | applicationId "com.xiaoguang.widget.videocompress"
12 | minSdk 21
13 | targetSdk 30
14 | versionCode 1
15 | versionName "1.0.0"
16 | }
17 |
18 | buildTypes {
19 | release {
20 | minifyEnabled false
21 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
22 | }
23 | }
24 | compileOptions {
25 | sourceCompatibility JavaVersion.VERSION_1_8
26 | targetCompatibility JavaVersion.VERSION_1_8
27 | }
28 | }
29 |
30 | dependencies {
31 |
32 | implementation 'androidx.appcompat:appcompat:1.2.0'
33 | implementation 'com.google.android.material:material:1.4.0'
34 | implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
35 |
36 | implementation 'com.github.ITxiaoguang:FilePicker:1.0.2'
37 | implementation project(path: ':videocompress')
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
10 | # When configured, Gradle will run in incubating parallel mode.
11 | # This option should only be used with decoupled projects. More details, visit
12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13 | # org.gradle.parallel=true
14 | # AndroidX package structure to make it clearer which packages are bundled with the
15 | # Android operating system, and which are packaged with your app"s APK
16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
17 | android.useAndroidX=true
18 | # Automatically convert third-party libraries to use AndroidX
19 | android.enableJetifier=true
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
18 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/videocompress/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
13 |
22 |
23 |
31 |
32 |
--------------------------------------------------------------------------------
/videocompress/src/main/java/com/xiaoguang/widget/videocompress/core/Mp4Movie.java:
--------------------------------------------------------------------------------
1 | package com.xiaoguang.widget.videocompress.core;
2 |
3 | import android.annotation.TargetApi;
4 | import android.media.MediaCodec;
5 | import android.media.MediaFormat;
6 |
7 | import com.googlecode.mp4parser.util.Matrix;
8 |
9 | import java.io.File;
10 | import java.util.ArrayList;
11 |
12 | @TargetApi(16)
13 | public class Mp4Movie {
14 | private Matrix matrix = Matrix.ROTATE_0;
15 | private ArrayList