Guest User

Untitled

a guest
Apr 26th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.84 KB | None | 0 0
  1. - (void) createWatermark:(UIImage*)image video:(NSURL*)videoURL
  2. {
  3. if (videoURL == nil)
  4. return;
  5.  
  6. AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:videoURL options:nil];
  7. AVMutableComposition* mixComposition = [AVMutableComposition composition];
  8.  
  9. AVMutableCompositionTrack* compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
  10.  
  11. AVAssetTrack* clipVideoTrack = [[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
  12. [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration)
  13. ofTrack:clipVideoTrack
  14. atTime:kCMTimeZero error:nil];
  15.  
  16. [compositionVideoTrack setPreferredTransform:[[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] preferredTransform]];
  17.  
  18. // create the layer with the watermark image
  19. CALayer* aLayer = [CALayer layer];
  20. aLayer.contents = (id)image.CGImage;
  21. aLayer.frame = CGRectMake(50, 100, image.size.width, image.size.height);
  22. aLayer.opacity = 0.9;
  23.  
  24. //sorts the layer in proper order
  25.  
  26. AVAssetTrack* videoTrack = [[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
  27. CGSize videoSize = [videoTrack naturalSize];
  28. CALayer *parentLayer = [CALayer layer];
  29. CALayer *videoLayer = [CALayer layer];
  30. parentLayer.frame = CGRectMake(0, 0, videoSize.width, videoSize.height);
  31. videoLayer.frame = CGRectMake(0, 0, videoSize.width, videoSize.height);
  32. [parentLayer addSublayer:videoLayer];
  33. [parentLayer addSublayer:aLayer];
  34.  
  35.  
  36. // create text Layer
  37. CATextLayer* titleLayer = [CATextLayer layer];
  38. titleLayer.backgroundColor = [UIColor clearColor].CGColor;
  39. titleLayer.string = @"Dummy text";
  40. titleLayer.font = CFBridgingRetain(@"Helvetica");
  41. titleLayer.fontSize = 28;
  42. titleLayer.shadowOpacity = 0.5;
  43. titleLayer.alignmentMode = kCAAlignmentCenter;
  44. titleLayer.frame = CGRectMake(0, 50, videoSize.width, videoSize.height / 6);
  45.  
  46. [parentLayer addSublayer:titleLayer];
  47.  
  48. //create the composition and add the instructions to insert the layer:
  49.  
  50. AVMutableVideoComposition* videoComp = [AVMutableVideoComposition videoComposition];
  51. videoComp.renderSize = videoSize;
  52. videoComp.frameDuration = CMTimeMake(1, 30);
  53. videoComp.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];
  54.  
  55. /// instruction
  56. AVMutableVideoCompositionInstruction* instruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
  57.  
  58. instruction.timeRange = CMTimeRangeMake(kCMTimeZero, [mixComposition duration]);
  59. AVAssetTrack* mixVideoTrack = [[mixComposition tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
  60. AVMutableVideoCompositionLayerInstruction* layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:mixVideoTrack];
  61. instruction.layerInstructions = [NSArray arrayWithObject:layerInstruction];
  62. videoComp.instructions = [NSArray arrayWithObject: instruction];
  63.  
  64. // export video
  65.  
  66. _assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetMediumQuality];
  67. _assetExport.videoComposition = videoComp;
  68.  
  69. NSLog (@"created exporter. supportedFileTypes: %@", _assetExport.supportedFileTypes);
  70.  
  71. NSString* videoName = @"NewWatermarkedVideo.mov";
  72.  
  73. NSString* exportPath = [NSTemporaryDirectory() stringByAppendingPathComponent:videoName];
  74. NSURL* exportUrl = [NSURL fileURLWithPath:exportPath];
  75.  
  76. if ([[NSFileManager defaultManager] fileExistsAtPath:exportPath])
  77. [[NSFileManager defaultManager] removeItemAtPath:exportPath error:nil];
  78.  
  79. _assetExport.outputFileType = AVFileTypeQuickTimeMovie;
  80. _assetExport.outputURL = exportUrl;
  81. _assetExport.shouldOptimizeForNetworkUse = YES;
  82.  
  83. [_assetExport exportAsynchronouslyWithCompletionHandler:
  84. ^(void ) {
  85.  
  86. //Final code here
  87.  
  88. switch (_assetExport.status)
  89. {
  90. case AVAssetExportSessionStatusUnknown:
  91. NSLog(@"Unknown");
  92. break;
  93. case AVAssetExportSessionStatusWaiting:
  94. NSLog(@"Waiting");
  95. break;
  96. case AVAssetExportSessionStatusExporting:
  97. NSLog(@"Exporting");
  98. break;
  99. case AVAssetExportSessionStatusCompleted:
  100. NSLog(@"Created new water mark image");
  101. _playButton.hidden = NO;
  102. break;
  103. case AVAssetExportSessionStatusFailed:
  104. NSLog(@"Failed- %@", _assetExport.error);
  105. break;
  106. case AVAssetExportSessionStatusCancelled:
  107. NSLog(@"Cancelled");
  108. break;
  109. }
  110. }
  111. ];
  112. }
Add Comment
Please, Sign In to add comment