// Create TXVideoJoiner (nil for preview param indicates no preview needed)TXVideoJoiner* _videoJoin = [[TXVideoJoiner alloc] initWithPreview:nil];// Set video files to concatenate (_composeArray)[_videoJoin setVideoPathList:_composeArray];// Set delegate for progress/completion callbacks_videoJoin.joinerDelegate = self;// Start merging (540p compressed output)[_videoJoin joinVideo:VIDEO_COMPRESSED_540P videoOutputPath:_outFilePath];
// Configure preview viewTXPreviewParam *param = [[TXPreviewParam alloc] init];param.videoView = _videoPreview.renderView;param.renderMode = PREVIEW_RENDER_MODE_FILL_EDGE;// Create TXVideoJoiner with previewTXVideoJoiner* _videoJoin = [[TXVideoJoiner alloc] initWithPreview:param];_videoJoin.previewDelegate = _videoPreview;// Set video files[_videoJoin setVideoPathList:_composeArray];// Start preview playback[_videoJoin startPlay];
TXVideoJoiner* _videoJoin = [[TXVideoJoiner alloc] initWithPreview:nil];[_videoJoin setVideoPathList:_composeArray];_videoJoin.joinerDelegate = self;// Configure split-screen layoutTXSplitScreenParams* splitScreenParams = [[TXSplitScreenParams alloc] init];splitScreenParams.canvasWidth = 720 * 2; // Total output widthsplitScreenParams.canvasHeight = 1280; // Total output height// Define positions for each videosplitScreenParams.rects = @[[NSValue valueWithCGRect:CGRectMake(0, 0, splitScreenParams.canvasWidth/2, splitScreenParams.canvasHeight)],[NSValue valueWithCGRect:CGRectMake(splitScreenParams.canvasWidth/2, 0, splitScreenParams.canvasWidth/2, splitScreenParams.canvasHeight)]];splitScreenParams.durationMode = ALIGNS_TO_LONGEST; // Duration matches longest input[_videoJoiner setSplitScreenList:splitScreenParams];// Set audio mix ratios (0: muted, 1: full volume)[_videoJoiner setVideoVolumes:@[@0, @1]];// Start merging[_videoJoin joinVideo:VIDEO_COMPRESSED_540P videoOutputPath:_outFilePath];
Feedback