Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

iPhone 16 Pro and Pro Max compression issues #313

Open
1 task done
paulsizer opened this issue Oct 11, 2024 · 5 comments
Open
1 task done

iPhone 16 Pro and Pro Max compression issues #313

paulsizer opened this issue Oct 11, 2024 · 5 comments

Comments

@paulsizer
Copy link

Current behavior

I seem to be having issues compressing videos recorded on iPhone 16 Pro and 16 Pro Max devices that are in the high efficiency setting for capturing video. This videos are in a .mov video file.

If I record a video on my iPhone 14 Pro the video compresses as normal but when testing with a video recorded on the 16 Pro models and trying to compress it results in the exact same file being returned.

Screenshot 2024-10-11 at 13 36 12
 LOG  video_uri file:///Users/paul/Library/Developer/CoreSimulator/Devices/E1C94F32-6F84-4F57-81F3-A319169E3518/data/Containers/Data/Application/ECA070E0-4A5D-4BFA-8417-E22FBBEFFBBE/Library/Caches/ImagePicker/D3444CB1-7380-424B-ACBB-B55682266498.mov
 LOG  size 73619152
 LOG  compressedVideo file:///Users/paul/Library/Developer/CoreSimulator/Devices/E1C94F32-6F84-4F57-81F3-A319169E3518/data/Containers/Data/Application/ECA070E0-4A5D-4BFA-8417-E22FBBEFFBBE/Documents/D3444CB1-7380-424B-ACBB-B55682266498.mov
 LOG  compressedSize 73619152

Expected behavior

The file compresses to a MP4 file

Platform

  • iOS

React Native Version

0.74.1

React Native Compressor Version

1.9.0

Reproducible Steps And Demo

import { Video } from 'react-native-compressor';
import * as FileSystem from 'expo-file-system';

export const compressVideo = async (video_uri, onProgress) => {
  const uriParts = video_uri.split('/');
  const filename = uriParts[uriParts.length - 1];

  const newUri = `${FileSystem.documentDirectory}${filename}`;
  await FileSystem.copyAsync({
    from: video_uri,
    to: newUri,
  });
  const { size } = await FileSystem.getInfoAsync(video_uri);
  console.log('video_uri', video_uri);
  console.log('size', size);

  const compressedVideo = await Video.compress(
    newUri,
    { compressionMethod: 'manual',
      progressDivider: 10,
      minimumFileSizeForCompress: 1,
      maxFileSizeForCompress: 100,
      bitrateMultiplier: 0.8,
      compressQuality: 'medium', },
    (progress) => {
      const progressPercentage = parseInt(progress * 100);
      onProgress(progressPercentage);
    }
  );

  const { size: compressedSize } = await FileSystem.getInfoAsync(compressedVideo);
  console.log('compressedVideo', compressedVideo);
  console.log('compressedSize', compressedSize);


  return compressedVideo;
};
Copy link

👋 @paulsizer
Thanks for opening your issue here! If you find this package useful hit the star🌟!

@mbiang
Copy link

mbiang commented Oct 15, 2024

I too am seeing this bug on iOS devices. The compressor (version 1.9.0) is returning the original uncompressed URL.

Here is the code I am using:

compressorResult = await VideoCompressor.compress(
  uri,
  { compressionMethod: 'auto' },
  progress => {
    if (!isExpoGo && SHOW_PROGRESS) {
      this.setState({ currentProgress: progress });
    }
  },
);

@paulsizer
Copy link
Author

Any help with this and how to go about fixing this? Seems to be mostly happening with iPhone 16 users on my end.

@paulsizer
Copy link
Author

@numandev1 Any info on this?

@cmlad
Copy link

cmlad commented Nov 18, 2024

Same issue here, I get a few progress updates, up to like 0.008, and then it returns the original URI no matter what params I use. It doesn't matter if I use HEVC or H264. Using 16 Pro Max.

With an XS Pro Max things work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants