forked from taltultc/react-native-mov-to-mp4
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmovToMp4.m
74 lines (65 loc) · 2.74 KB
/
movToMp4.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#import "movToMp4.h"
#import <AVFoundation/AVAsset.h>
#import <AVFoundation/AVAssetExportSession.h>
#import <AVFoundation/AVMediaFormat.h>
#import <MediaPlayer/MediaPlayer.h>
#import <MobileCoreServices/MobileCoreServices.h>
#import <AssetsLibrary/AssetsLibrary.h>
@implementation movToMp4
RCT_EXPORT_MODULE()
RCT_EXPORT_METHOD(convertMovToMp4: (NSString*)filename
toPath:(NSString*)outputPath
quality:(NSString*)quality
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
{
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSURL *ouputURL2 = [NSURL fileURLWithPath:[docDir stringByAppendingPathComponent:outputPath]];
//NSLog(@"fsdf %@", ouputURL2);
NSString *newFile = [ouputURL2 absoluteString];
NSURL *urlFile = [NSURL fileURLWithPath:filename];
AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:urlFile options:nil];
// Video quality list
NSDictionary* qualities = @{
@"low": AVAssetExportPresetLowQuality,
@"medium": AVAssetExportPresetMediumQuality,
@"high": AVAssetExportPresetHighestQuality
};
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:avAsset presetName:qualities[quality]];
//AVAssetExportPresetMediumQuality
NSString* domain = @"MovToMp4";
exportSession.outputURL = ouputURL2;
//set the output file format if you want to make it in other file format (ex .3gp)
exportSession.outputFileType = AVFileTypeMPEG4;
exportSession.shouldOptimizeForNetworkUse = YES;
[exportSession exportAsynchronouslyWithCompletionHandler:^{
switch ([exportSession status])
{
case AVAssetExportSessionStatusFailed:
{
NSError* error = exportSession.error;
NSString *codeWithDomain = [NSString stringWithFormat:@"E%@%zd", error.domain.uppercaseString, error.code];
reject(codeWithDomain, error.localizedDescription, error);
break;
}
case AVAssetExportSessionStatusCancelled:
{
NSError *error = [NSError errorWithDomain:domain code: -91 userInfo:nil];
reject(@"Cancelled", @"Export canceled", error);
break;
}
case AVAssetExportSessionStatusCompleted:
{
resolve(@[newFile]);
break;
}
default:
{
NSError *error = [NSError errorWithDomain:domain code: -91 userInfo:nil];
reject(@"Unknown", @"Unknown status", error);
break;
}
}
}];
}
@end