Giter Club home page Giter Club logo

silicompressor's Issues

Video compress fail in android 8.0

I compress video using SiliCompressor, which works fine in android except for android 8.0.
when I use android 8.0 to compress a video, the compressed video can be play by VideoView in android 7.0 and 8.0, but not work in android 5.0 or iPhone, Mac QuickTime player.

sometime the video is all green at the beginning of a few seconds, sometime it just all black.
I test on many phone, result in all android8.0 phone meet this issue.

can somebody help?

GNU license should be added as well

This library is based on VideoCompressor by lalongooo which in turn is based on Telegram. So this library should include the GNU license as well.

Video is not compressed

Here is my code:
`public class MainActivity extends AppCompatActivity {

private static final String TAG = "Video Compressor";
Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            File sourcePath = new File("/storage/emulated/0/Video/sample.MP4");
            Log.d(TAG, "onClick: sourcepath==== " +sourcePath);
            Uri sourceURI = Uri.fromFile(sourcePath);
            File desPath = new File("/storage/emulated/0/","");
            Uri desURI = Uri.fromFile(desPath);

            try {
                String path = SiliCompressor.with(getApplicationContext()).compressVideo(sourceURI.toString(), desURI.toString());
                Log.d(TAG, "onClick: gfsdgfsg=== "+ Uri.parse(path.substring(5)));
                File file = new File(path.substring(5));
                FileOutputStream fos = new FileOutputStream(file);
                fos.flush();
                fos.close();

                float length = file.length() / 1024f; // Size in KB
                String value;
                if(length >= 1024)
                    value = length/1024f+" MB";
                else
                    value = length+" KB";
                Log.i("Silicompressor", "Path: "+value);
            } catch (URISyntaxException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
}

}`

Here is the log:
08-03 15:19:21.575 5653-5653/com.solo.vinay.videocompression D/Video Compressor: onClick: sourcepath==== /storage/emulated/0/Video/sample.MP4 08-03 15:19:21.615 5653-5653/com.solo.vinay.videocompression W/HTCLOG: use specified tag [MediaMetadataRetriever], func [0]. 08-03 15:19:21.615 5653-5653/com.solo.vinay.videocompression W/HTCLOG: mask=0x18 08-03 15:19:21.685 5653-5653/com.solo.vinay.videocompression E/tmessages: file:/storage/emulated/0/VIDEO_20170803_151921.mp4: open failed: ENOENT (No such file or directory) 08-03 15:19:21.685 5653-5653/com.solo.vinay.videocompression E/tmessages: time = 29 08-03 15:19:21.685 5653-5653/com.solo.vinay.videocompression E/ViratPath: /storage/emulated/0/Video/sample.MP4 08-03 15:19:21.685 5653-5653/com.solo.vinay.videocompression E/ViratPath: file:/storage/emulated/0/VIDEO_20170803_151921.mp4 08-03 15:19:21.685 5653-5653/com.solo.vinay.videocompression E/ViratPath: /storage/emulated/0/Video/sample.MP4 08-03 15:19:21.685 5653-5653/com.solo.vinay.videocompression V/SiliCompressor: Video Conversion Complete 08-03 15:19:21.685 5653-5653/com.solo.vinay.videocompression D/Video Compressor: onClick: gfsdgfsg=== /storage/emulated/0/VIDEO_20170803_151921.mp4 08-03 15:19:21.685 5653-5653/com.solo.vinay.videocompression I/Silicompressor: Path: 0.0 KB

Do the work on a thread

create a thread and return with the result in the callback so you do not have to do this at hand

IllegalArgumentException at android.media.MediaMetadataRetriever.setDataSource

I am passing correct Source and Destination URI String in Compressing video function, still I am getting IllegalArgumentException. Please Help.

filePath = SiliCompressor.with((ActCreateVideo.this)).compressVideo(recordedVideoURI.getPath(), compressedVideoURI.getPath());

Here URIs are defined as:

recordedVideoURI = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider",recordedFileWithinMyDir);
compressedVideoURI = Uri.parse("content://xyz/external_files/" + folder_main +File.separator+ "VID_COMPRESSED_" + timeStamp + ".mp4");

Error Log:

                  Caused by: java.lang.IllegalArgumentException
                                                         at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:64)
                                                         at com.iceteck.silicompressorr.videocompression.MediaController.convertVideo(MediaController.java:252)
                                                         at com.iceteck.silicompressorr.SiliCompressor.compressVideo(SiliCompressor.java:300)
                                                         at com.igb.ActCreateVideo.onActivityResult(ActCreateVideo.java:128)
                                                         at android.app.Activity.dispatchActivityResult(Activity.java:6931)
                                                         at android.app.ActivityThread.deliverResults(ActivityThread.java:4090)
                                                         at android.app.ActivityThread.handleSendResult(ActivityThread.java:4137) 
                                                         at android.app.ActivityThread.-wrap20(ActivityThread.java) 
                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1529) 
                                                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                         at android.os.Looper.loop(Looper.java:154) 
                                                         at android.app.ActivityThread.main(ActivityThread.java:6123) 
                                                         at java.lang.reflect.Method.invoke(Native Method) 
                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757) 

Rates, resolution and compression settings

Hi,
Thanks for your lib. It works fine.
However, I'd like to understand how we can change defaults compression settings...
The result quality is not very good, and I'd like to change it.

Thanks !

EDIT :
It seems these settings are hard-coded in MediaController.java file. Do you confirm ?

app opening error

when i open the app and give it permission of storage.
after that when i click on image or video, the APP close itself and error comes up

open app again

and after reopening, same error
sketch3

Rotation issue in MediaController

Hi Nate,
in MediaController line 305 : rotationValue = 0;
should be rotationValue = 90;
otherwise the compressed file is on it's side.

  • same thing on the 270deg

Failed to compress video in android

I write this code but getting error :

class VideoCompressAsyncTask extends AsyncTask<String, String, String> {

    Context mContext;

    public VideoCompressAsyncTask(Context context){
        mContext = context;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... paths) {
        String filePath = null;
        try {
            sourceUriString = "/storage/emulated/0/DCIM/Camera/A.mp4";
            String destinationUriString = "/storage/emulated/0/videokit";
            filePath = SiliCompressor.with(mContext).compressVideo(sourceUriString, destinationUriString);
            Log.d(MainActivity.class.getName() , "filePath : "+filePath);
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
        return  filePath;

    }


    @Override
    protected void onPostExecute(String compressedFilePath) {
        super.onPostExecute(compressedFilePath);
        File imageFile = new File(compressedFilePath);
        float length = imageFile.length() / 1024f; // Size in KB
        String value;
        if(length >= 1024)
            value = length/1024f+" MB";
        else
            value = length+" KB";
        Log.i("Silicompressor", "Path: "+value);
    }
}

calling from onCreate()
{
String sourceUriString = "/storage/emulated/0/DCIM/Camera/A.mp4";
String destinationUriString = "/sdcard/videokit/new_compress.mp4";
File f = new File(Environment.getExternalStorageDirectory() + "/videokit/C.mp4");
Log.d(MainActivity.class.getName() , "getName:"+f.getName());
Log.d(MainActivity.class.getName() , "path:"+f.getPath());

    File f1 = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/videokit");
    new VideoCompressAsyncTask(this).execute(f.getPath().toString(), f1.getPath().toString());

}

FATAL EXCEPTION: AsyncTask #1
Process: com.silicompressorapplication, PID: 3103
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.IllegalArgumentException
at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:63)
at com.iceteck.silicompressorr.videocompression.MediaController.convertVideo(MediaController.java:252)
at com.iceteck.silicompressorr.SiliCompressor.compressVideo(SiliCompressor.java:300)
at com.silicompressorapplication.MainActivity$VideoCompressAsyncTask.doInBackground(MainActivity.java:51)
at com.silicompressorapplication.MainActivity$VideoCompressAsyncTask.doInBackground(MainActivity.java:32)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
at java.lang.Thread.run(Thread.java:841) 

Small Bug:Delete Photo in Silicompressor

Hello,
the compressor is great i must admit it's one of the best i used so far, i have a small issue, when i use the getcompressbitmap it returns the bitmap but it doesn't delete the picture inside the silicomfolder on SD how to do that without having the get the image path then transform it to bitmap then delete programmatically as it takes more useless steps (just for performance tuning)

miniSdkVersion and native method

Hi, thanks for you open source, It help me a lot; but I have a little confuse:
1 : this library minSdkVersion should be 16 ? I see you set 15.
2: in MediaController.java file,there have a native method:
public native static int convertVideoFrame(ByteBuffer src, ByteBuffer dest, int destFormat, int width, int height, int padding, int swap);
where is it implements ?

video flipped

first of all thanks for your library you saved me a lot .

I'm using samsung grand prime+

recorded video through device camera in portrait with resolution as 1280x720

the video actually is 1280x720 with rotation 90

after the conversion the video flipped horizontally

i passed the real width and height of the video and just lowered the bitrate to 1600k

any help to just compress the video without flipping it?
i tested on some devices and seems to be ok just on some other devices like i listed above i have this issue

thanks in advance

How to cancel/stop compression?

Can I stop/cancel the compression process? Suppose that I have a large file to be processed, and the user don't want to wait for it, so he click the Cancel button.

How to control compression quality

With default option, the compression result is poor that it doesn't fulfill my need. Kindly assist if there is any parameter to tweak to achieve some better quality of compression.

Image compress issue on Android M

I am doing simple compression via this library but it gives me error of java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.

Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetString(Native Method)
at android.database.CursorWindow.getString(CursorWindow.java:438)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
at android.database.CursorWrapper.getString(CursorWrapper.java:137)
at com.iceteck.silicompressorr.SiliCompressor.getRealPathFromURI(SiliCompressor.java:411)
at com.iceteck.silicompressorr.SiliCompressor.compressImage(SiliCompressor.java:174)
at com.iceteck.silicompressorr.SiliCompressor.compress(SiliCompressor.java:65)
at com.boysjoys.com.pro_working1.User_Chat_Functionality.ImageCompression.doInBackground(ImageCompression.java:50)
at com.boysjoys.com.pro_working1.User_Chat_Functionality.ImageCompression.doInBackground(ImageCompression.java:30)

Path URI content://com.android.providers.media.documents/document/image%3A2304

My Code
Log.d(TAG,"Path URI "+pathUri); String PathToStore=Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+"myApp"+"/media/images"; String storedFile= SiliCompressor.with(context).compress(pathUri.toString(),new File(PathToStore));

I Need video Quality high for compressed video

Hi
I am using this library for video compression. the output quality is low of compressed video. I am getting some fadded lines over video which shows video is compressed. I want to overcome this. I saw some hardcorde stuff in media controller.Tried by changing bitrate and frame rate but nothing seems to have impact. Can you please let me know which parameters i have to change to get high quality video?.

pack error

Warning:com.googlecode.mp4parser.authoring.tracks.mjpeg.OneJpegPerIframe: can't find referenced class javax.imageio.ImageIO
Warning:com.googlecode.mp4parser.authoring.tracks.mjpeg.OneJpegPerIframe: can't find referenced class java.awt.image.BufferedImage
Warning:there were 6 unresolved references to classes or interfaces.
Warning:Exception while processing task java.io.IOException: Please correct the above warnings first.
Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.

Job failed, see logs for details

Getting error in 4.2.2

 Caused by: java.lang.UnsatisfiedLinkError: Native method not found: com.iceteck.silicompressorr.videocompression.MediaController.convertVideoFrame:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;IIIII)I 

and one more thing, what is the minimum sdk version to use this library.

IllegalStateException at "dequeueOutputBuffer()"

I tried to pick video from gallery and compressing it using this in 2 devices yet so far ( LG Nexus 5 & Samsung Galaxy Grand - GT-I9082 ).

It worked fine in LG Nexus 5, but failed in "Samsung Galaxy Grand", without even mentioning the error.

For that, I debugged and placed logs in MediaController class (com.iceteck.silicompressorr.videocompression.MediaController)

Thus able to track the error
Please suggest any fix or workaround for that, in order to make it work on all devices

The error I got is as follows -

> java.lang.IllegalStateException
> at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)
> at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:1033)
> at com.iceteck.silicompressorr.videocompression.MediaController.convertVideo(MediaController.java:491)
> at com.iceteck.silicompressorr.SiliCompressor.compressVideo(SiliCompressor.java:300)
> at com.iceteck.silicompressor.SelectPictureActivity$VideoCompressAsyncTask.doInBackground(SelectPictureActivity.java:379)
> at com.iceteck.silicompressor.SelectPictureActivity$VideoCompressAsyncTask.doInBackground(SelectPictureActivity.java:358)
> at android.os.AsyncTask$2.call(AsyncTask.java:288)
> at java.util.concurrent.FutureTask.run(FutureTask.java:237)
> at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
> at java.lang.Thread.run(Thread.java:818)
> 

please solve my error

10-06 00:33:57.306 21238-21384/? E/CursorWindow: Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 6 columns.
10-06 00:33:57.309 21238-21384/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.example.pawan.compressor, PID: 21238
Theme: themes:{default=overlay:com.cyngn.hexo, iconPack:com.cyngn.hexo, fontPkg:com.cyngn.hexo, com.android.systemui=overlay:com.cyngn.hexo, com.android.systemui.navbar=overlay:com.cyngn.hexo}
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetString(Native Method)
at android.database.CursorWindow.getString(CursorWindow.java:438)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
at android.database.CursorWrapper.getString(CursorWrapper.java:137)
at com.iceteck.silicompressorr.SiliCompressor.getRealPathFromURI(SiliCompressor.java:322)
at com.iceteck.silicompressorr.SiliCompressor.compressImage(SiliCompressor.java:163)
at com.iceteck.silicompressorr.SiliCompressor.compress(SiliCompressor.java:59)
at com.example.pawan.compressor.MainActivity$ImageCompressionAsyncTask.doInBackground(MainActivity.java:101)
at com.example.pawan.compressor.MainActivity$ImageCompressionAsyncTask.doInBackground(MainActivity.java:90)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
at java.lang.Thread.run(Thread.java:818) 

SiliCompressor not able to run on service

Thx for this awesome library, was used together with asynctask and it work great.
But now i want to it to compress on background even when user kill the app.
Do you have any idea?
when i use it in service, my app become not responding.

unable to compress gallery video

I tried this code for compressing gallery video ---


    private void galleryIntent() {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.setType("video/mp4");
        try {
            capturedUri = Uri.fromFile(createMediaFile(TYPE_VIDEO));
        } catch (IOException e) {
            e.printStackTrace();
        }
        intent.putExtra(MediaStore.EXTRA_OUTPUT, capturedUri);
        Log.d(LOG_TAG, "VideoUri: "  + capturedUri.toString());
        startActivityForResult(intent, RESQUEST_TAKE_VIDEO);


    }

   // Method which will process the captured image
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    //verify if the image was gotten successfully
     if (requestCode == RESQUEST_TAKE_VIDEO && resultCode == RESULT_OK){
        if (data.getData() != null) {
            //create destination directory
            File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + getPackageName() + "/media/videos");
            if (f.mkdirs() || f.isDirectory())
                //compress and output new video specs
                new VideoCompressAsyncTask(this).execute(data.getData().toString(), f.getPath());
        }
    }

}

private File createMediaFile(int type) throws IOException {

    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String fileName = type == 1 ? "JPEG_" + timeStamp + "_" : "VID_" + timeStamp + "_";
    File storageDir = Environment.getExternalStoragePublicDirectory(
            type == 1 ? Environment.DIRECTORY_PICTURES : Environment.DIRECTORY_MOVIES);
    File file = File.createTempFile(
            fileName,  /* prefix */
            type == 1 ? ".jpg" : ".mp4",         /* suffix */
            storageDir      /* directory */
    );

    // Save a file: path for use with ACTION_VIEW intents
    mCurrentPhotoPath = "file:" + file.getAbsolutePath();
    Log.d(LOG_TAG, "mCurrentPhotoPath: " + mCurrentPhotoPath);
    return file;
}

But, its not working, getting failed. What I am doing wrong here?


Saving compressed video to Firebase

Hi, I'm trying to save compressed video to Firebase Storage, but I'm getting error No content provider.
I'm getting sourceUri from data.getData and destinationUri is: mStorageReference = FirebaseStorage.getInstance().getReference().child("VideoFile");

Do you have any suggestion, where I'm making mistake? Thank you for any help.

` @OverRide
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_PICK_VIDEO && resultCode == RESULT_OK && data != null) {
Uri filepath = data.getData();
final String name = "VIDEO" + filepath.getLastPathSegment().toString() + ".mp4";

        StorageReference videoRef = mStorageReference.child(name);
        String compressPath = null;
        
        try {
            compressPath = SiliCompressor.with(getApplicationContext()).compressVideo(filepath.toString(), String.valueOf(mStorageReference));
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

        
        videoRef.putFile(Uri.parse(compressPath)).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                Uri downloadedUrl = taskSnapshot.getDownloadUrl();
                String url = downloadedUrl.toString();
                getDownloadedUrl(downloadedUrl);
                uploadToDatabase(name, url, databaseReferenceString);
            }

`

and here is my logcat:

08-20 18:56:53.148 8388-8551/com.example.admin.databaseproject E/StorageException: StorageException has occurred. An unknown error occurred, please check the HTTP result code and inner exception for server response. Code: -13000 HttpResult: 0
08-20 18:56:53.148 8388-8551/com.example.admin.databaseproject E/StorageException: No content provider: gs:/firechat-99dd1.appspot.com/VideoFile/VIDEOvideo%3A26296.mp4/VIDEO_20170820_185653.mp4 java.io.FileNotFoundException: No content provider: gs:/firechat-99dd1.appspot.com/VideoFile/VIDEOvideo%3A26296.mp4/VIDEO_20170820_185653.mp4 at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1066) at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:921) at android.content.ContentResolver.openInputStream(ContentResolver.java:646) at com.google.firebase.storage.UploadTask.<init>(Unknown Source) at com.google.firebase.storage.StorageReference.putFile(Unknown Source) at com.example.admin.databaseproject.MainActivity.onActivityResult(MainActivity.java:165) at android.app.Activity.dispatchActivityResult(Activity.java:6235) at android.app.ActivityThread.deliverResults(ActivityThread.java:3584) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3631) at android.app.ActivityThread.access$1300(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5268) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)

How to solve duplicate com.googlecode.mp4parser

Why not add this in build.gradle ?

compile 'com.googlecode.mp4parser:isoparser:1.1.20'

instead of using a static .jar library ?
Because this way you can quickly update your library isoparser and if a user want use your SiliCompressor can exlude in his build isoparser if he is using in another library (so solve duplicate problem)

video compression completed but not returning proper video

D/EGL_emulation: eglMakeCurrent: 0xa48206a0: ver 2 0
E/WVMExtractor: Failed to open libwvm.so: dlopen failed: library "libwvm.so" not found
E/tmessages: colorFormat = 2130708361
I/OMXClient: Using client-side OMX mux.
I/SoftAVCEncoder: Construct SoftAVCEncoder
W/ACodec: do not know color format 0x7f000789 = 2130708361
I/ACodec: setupVideoEncoder succeeded
W/ACodec: do not know color format 0x7f000789 = 2130708361
          
          [ 12-27 17:32:49.192  1831: 2291 D/         ]
          HostConnection::get() New Host Connection established 0xaf68b060, tid 2291
          
          
          [ 12-27 17:32:49.192  1831: 2291 W/         ]
          Unrecognized GLES max version string in extensions: ANDROID_EMU_CHECKSUM_HELPER_v1 
D/EGL_emulation: eglCreateContext: 0xaf5271c0: maj 2 min 0 rcv 2
D/EGL_emulation: eglMakeCurrent: 0xaf5271c0: ver 2 0
E/SoftAVCEncoder: Video frame size 640x360 must be a multiple of 16
E/SoftAVCEncoder: Failed to initialized encoder params
E/ACodec: [OMX.google.h264.encoder] ERROR(0x80001001)
E/ACodec: signalError(omxError 0x80001001, internalError -2147483648)
E/MediaCodec: Codec reported err 0x80001001, actionCode 0, while in state 6
I/OMXClient: Using client-side OMX mux.
W/OMXNodeInstance: [1:google.h264.decoder] component does not support metadata mode; using fallback
E/ACodec: [OMX.google.h264.decoder] storeMetaDataInBuffers failed w/ err -1010
E/tmessages: println needs a message
E/tmessages: time = 114
E/ViratPath: /storage/sdcard/Download/Hichki - Official Trailer (HD 360p).mp4
E/ViratPath: /storage/sdcard/VIDEO_20171227_173249.mp4
E/ViratPath: /storage/sdcard/Download/Hichki - Official Trailer (HD 360p).mp4
V/SiliCompressor: Video Conversion Complete


New video is created but file size of new video is in bytes

Media type not supported after compression

Hi, I am compressing mp4 video in android, it is getting compressed but when I am trying to open it it says "Media type not supported". My purpose is to compress and upload it to server but when I am uploading it to server using multipart no video details are coming although I can play that video using VLC player.

Getting ArithmeticException: divide by zero

Hi I'm getting java.lang.ArithmeticException: divide by zero while compressing image on Android 4.4.2, but works on other Android versions.

Unable to decode stream: java.io.FileNotFoundException: /storage/sdcard0/Pictures/Screenshots/Screenshot_2017-05-28-13-01-55.png: open failed: ENOENT (No such file or directory)
java.lang.ArithmeticException: divide by zero
at com.iceteck.silicompressorr.SiliCompressor.compressImage(SiliCompressor.java:191)
at com.iceteck.silicompressorr.SiliCompressor.getCompressBitmap(SiliCompressor.java:151)
at com.xxxxx.Activities.EditImageActivity.setupImage(EditImageActivity.java:150)
at com.xxxxx.Activities.EditImageActivity.onCreate(EditImageActivity.java:88)
at android.app.Activity.performCreate(Activity.java:5238)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)

Exif interface exception

I am getting

"W/ExifInterface: Invalid image: ExifInterface got an unsupported image format file(ExifInterface supports JPEG and some RAW image formats only) or a corrupted JPEG file to ExifInterface"

on trying to compress png images
Please help

Enhancement : Regarding mp4parser version

Right now we are using version : 1.0.6 and we use below for movie
Movie movie = MovieCreator.build((DataSource) randomAccessFile.getChannel());

I checked below gradle link has higher version.
compile 'com.googlecode.mp4parser:isoparser:1.1.20'
And big difference is this new version. In this we have below:
Movie movie = MovieCreator.build(new FileDataSourceViaHeapImp(src.getAbsolutePath()));
// NOTE: Switched to using FileDataSourceViaHeapImpl since it does not use memory mapping (VM).
// Otherwise we get OOM with large movie files.

java.lang.IllegalArgumentException

I am getting below error when I pass

SiliCompressor.with(this).compressVideo("/storage/emulated/0/DCIM/Camera/VID_20170908_122018.mp4", "/storage/emulated/0/abc.mp4");

java.lang.IllegalArgumentException
at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:64)
at com.iceteck.silicompressorr.videocompression.MediaController.convertVideo(MediaController.java:252)
at com.iceteck.silicompressorr.SiliCompressor.compressVideo(SiliCompressor.java:300)
at com.xxx.farwide.coreview.activity.s3filehandling.S3FileTransactionActivity$1.run(S3FileTransactionActivity.java:74)
at java.lang.Thread.run(Thread.java:764)

crash FileUriExposedException android 7

Hi,
I'm getting a crash when trying to record video or catching photo.
Nexus 5X, Android 7.1.2
Here is the log

FATAL EXCEPTION: main
Process: com.iceteck.silicompressor, PID: 18436
android.os.FileUriExposedException: file:///storage/emulated/0/Movies/VID_20170913_133645_104748790.mp4 exposed beyond app through ClipData.Item.getUri()
at android.os.StrictMode.onFileUriExposed(StrictMode.java:1796)
at android.net.Uri.checkFileUriExposed(Uri.java:2346)
at android.content.ClipData.prepareToLeaveProcess(ClipData.java:845)
at android.content.Intent.prepareToLeaveProcess(Intent.java:8941)
at android.content.Intent.prepareToLeaveProcess(Intent.java:8926)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1517)
at android.app.Activity.startActivityForResult(Activity.java:4228)
at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)
at android.app.Activity.startActivityForResult(Activity.java:4186)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)
at com.iceteck.silicompressor.SelectPictureActivity.dispatchTakeVideoIntent(SelectPictureActivity.java:208)
at com.iceteck.silicompressor.SelectPictureActivity.requestPermissions(SelectPictureActivity.java:105)
at com.iceteck.silicompressor.SelectPictureActivity.access$000(SelectPictureActivity.java:34)
at com.iceteck.silicompressor.SelectPictureActivity$2.onClick(SelectPictureActivity.java:75)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6121)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

compress video .mp4 not working when upload on server

I get successful compress video size 3MB from android. after upload, the video file to server this video is not playing. On my Cpanel file manager file size is 3 MB which is correct. If I open file location from browser URL, it shows blank browser play where total video time is correct on the player. But on click play button there is nothing. if I download the file from player download button than file size is 35KB only. if I download this video file from Cpanel using the download button on file manager then the file of size 3MB.
On the same directory, there is other .mp4 file playing correctly.
Here is file - http://blueappsoftware.in/VIDEO_20171003_113511.mp4
on cpanel file manager - file size is 3.98MB type is video/x-generic

Got compressed video file Null or empty

I am trying to compress video , but got this output, Please get me out of this trouble.
new VideoCompressAsyncTask(this).execute(data.getData().toString(), f.getPath());
sdfsdf

see also my logcat
image

Lint error: Package not included in Android

Hi,

while building app after added silicompressor as a dependency I am getting error like:

...isoparser-1.0.6.jar: Invalid package reference in library; not included in Android: java.awt.image. Referenced from com.googlecode.mp4parser.authoring.tracks.mjpeg.OneJpegPerIframe.
...isoparser-1.0.6.jar: Invalid package reference in library; not included in Android: javax.imageio. Referenced from com.googlecode.mp4parser.authoring.tracks.mjpeg.OneJpegPerIframe.

As a workaround isoparser (which is a dependency for silicompressor) can be added to lint.xml like:

<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <issue id="InvalidPackage">
        <ignore regexp=".*isoparser.*" />
    </issue>
</lint>

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.