- 浏览: 2532516 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
jsntghf:
peio 写道这个怎么运行?Ruby On Rails的环境搭 ...
多文件上传之uploadify -
peio:
这个怎么运行?
多文件上传之uploadify -
往事如烟1:
我的项目是自己init了一个原始的project,之后将ver ...
React Native热部署之CodePush -
jsntghf:
往事如烟1 写道我按照你的说明进行,发现app退出之后,在进入 ...
React Native热部署之CodePush -
往事如烟1:
我按照你的说明进行,发现app退出之后,在进入不正确,请问是什 ...
React Native热部署之CodePush
这里只列出视频合成的核心代码,具体的请参考附件。
- (IBAction)MergeAndSave:(id)sender { if(firstAsset != nil && secondAsset != nil){ [ActivityView startAnimating]; AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init]; AVMutableCompositionTrack *firstTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; [firstTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, firstAsset.duration) ofTrack:[[firstAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:nil]; AVMutableCompositionTrack *secondTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; [secondTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, secondAsset.duration) ofTrack:[[secondAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:firstAsset.duration error:nil]; if(audioAsset != nil){ AVMutableCompositionTrack *AudioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; [AudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, CMTimeAdd(firstAsset.duration, secondAsset.duration)) ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:kCMTimeZero error:nil]; } AVMutableVideoCompositionInstruction *MainInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction]; MainInstruction.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeAdd(firstAsset.duration, secondAsset.duration)); AVMutableVideoCompositionLayerInstruction *FirstlayerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:firstTrack]; AVAssetTrack *FirstAssetTrack = [[firstAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; UIImageOrientation FirstAssetOrientation_ = UIImageOrientationUp; BOOL isFirstAssetPortrait_ = NO; CGAffineTransform firstTransform = FirstAssetTrack.preferredTransform; if(firstTransform.a == 0 && firstTransform.b == 1.0 && firstTransform.c == -1.0 && firstTransform.d == 0) {FirstAssetOrientation_= UIImageOrientationRight; isFirstAssetPortrait_ = YES;} if(firstTransform.a == 0 && firstTransform.b == -1.0 && firstTransform.c == 1.0 && firstTransform.d == 0) {FirstAssetOrientation_ = UIImageOrientationLeft; isFirstAssetPortrait_ = YES;} if(firstTransform.a == 1.0 && firstTransform.b == 0 && firstTransform.c == 0 && firstTransform.d == 1.0) {FirstAssetOrientation_ = UIImageOrientationUp;} if(firstTransform.a == -1.0 && firstTransform.b == 0 && firstTransform.c == 0 && firstTransform.d == -1.0) {FirstAssetOrientation_ = UIImageOrientationDown;} CGFloat FirstAssetScaleToFitRatio = 320.0 / FirstAssetTrack.naturalSize.width; if(isFirstAssetPortrait_) { FirstAssetScaleToFitRatio = 320.0 / FirstAssetTrack.naturalSize.height; CGAffineTransform FirstAssetScaleFactor = CGAffineTransformMakeScale(FirstAssetScaleToFitRatio,FirstAssetScaleToFitRatio); [FirstlayerInstruction setTransform:CGAffineTransformConcat(FirstAssetTrack.preferredTransform, FirstAssetScaleFactor) atTime:kCMTimeZero]; } else { CGAffineTransform FirstAssetScaleFactor = CGAffineTransformMakeScale(FirstAssetScaleToFitRatio,FirstAssetScaleToFitRatio); [FirstlayerInstruction setTransform:CGAffineTransformConcat(CGAffineTransformConcat(FirstAssetTrack.preferredTransform, FirstAssetScaleFactor),CGAffineTransformMakeTranslation(0, 160)) atTime:kCMTimeZero]; } [FirstlayerInstruction setOpacity:0.0 atTime:firstAsset.duration]; AVMutableVideoCompositionLayerInstruction *SecondlayerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:secondTrack]; AVAssetTrack *SecondAssetTrack = [[secondAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; UIImageOrientation SecondAssetOrientation_ = UIImageOrientationUp; BOOL isSecondAssetPortrait_ = NO; CGAffineTransform secondTransform = SecondAssetTrack.preferredTransform; if(secondTransform.a == 0 && secondTransform.b == 1.0 && secondTransform.c == -1.0 && secondTransform.d == 0) {SecondAssetOrientation_= UIImageOrientationRight; isSecondAssetPortrait_ = YES;} if(secondTransform.a == 0 && secondTransform.b == -1.0 && secondTransform.c == 1.0 && secondTransform.d == 0) {SecondAssetOrientation_ = UIImageOrientationLeft; isSecondAssetPortrait_ = YES;} if(secondTransform.a == 1.0 && secondTransform.b == 0 && secondTransform.c == 0 && secondTransform.d == 1.0) {SecondAssetOrientation_ = UIImageOrientationUp;} if(secondTransform.a == -1.0 && secondTransform.b == 0 && secondTransform.c == 0 && secondTransform.d == -1.0) {SecondAssetOrientation_ = UIImageOrientationDown;} CGFloat SecondAssetScaleToFitRatio = 320.0 / SecondAssetTrack.naturalSize.width; if(isSecondAssetPortrait_) { SecondAssetScaleToFitRatio = 320.0 / SecondAssetTrack.naturalSize.height; CGAffineTransform SecondAssetScaleFactor = CGAffineTransformMakeScale(SecondAssetScaleToFitRatio,SecondAssetScaleToFitRatio); [SecondlayerInstruction setTransform:CGAffineTransformConcat(SecondAssetTrack.preferredTransform, SecondAssetScaleFactor) atTime:firstAsset.duration]; } else { ; CGAffineTransform SecondAssetScaleFactor = CGAffineTransformMakeScale(SecondAssetScaleToFitRatio,SecondAssetScaleToFitRatio); [SecondlayerInstruction setTransform:CGAffineTransformConcat(CGAffineTransformConcat(SecondAssetTrack.preferredTransform, SecondAssetScaleFactor),CGAffineTransformMakeTranslation(0, 160)) atTime:firstAsset.duration]; } MainInstruction.layerInstructions = [NSArray arrayWithObjects:FirstlayerInstruction,SecondlayerInstruction, nil];; AVMutableVideoComposition *MainCompositionInst = [AVMutableVideoComposition videoComposition]; MainCompositionInst.instructions = [NSArray arrayWithObject:MainInstruction]; MainCompositionInst.frameDuration = CMTimeMake(1, 30); MainCompositionInst.renderSize = CGSizeMake(320.0, 480.0); NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *myPathDocs = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"mergeVideo-%d.mov",arc4random() % 1000]]; NSURL *url = [NSURL fileURLWithPath:myPathDocs]; AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetHighestQuality]; exporter.outputURL = url; exporter.outputFileType = AVFileTypeQuickTimeMovie; exporter.videoComposition = MainCompositionInst; exporter.shouldOptimizeForNetworkUse = YES; [exporter exportAsynchronouslyWithCompletionHandler:^ { dispatch_async(dispatch_get_main_queue(), ^{ [self exportDidFinish:exporter]; }); }]; } }
- VideoPlayRecord.zip (87.4 KB)
- 下载次数: 50
发表评论
-
Error watching file for changes: EMFILE
2016-12-15 11:57 1302执行npm start后报错: Error watc ... -
CocoaPods升级1.1.1报错
2016-12-15 08:39 795ERROR: While executing gem .. ... -
Visual Studio Code运行React Native报错
2016-06-13 09:43 1614React Native:0.27.2 React:15 ... -
React Native 0.27.2编译报错this._nativeModule.addListener is not a function
2016-06-12 15:21 3857React Native:0.27.2 React:15 ... -
Unable to resolve module ReactDefaultPerf from
2016-06-02 13:04 2785package.json信息如下: "reac ... -
React Native 0.26.2编译报错Undefined symbols for architecture x86_64
2016-05-26 11:15 2019React Native:0.26.2 React:15. ... -
Failed to update auto layout status: Failed to load designables from path (null)
2016-04-05 22:11 1714确保CocoaPods是0.36.1以上版本,然后在podf ... -
集成微信支付出现Undefined symbols for architecture x86_64错误
2016-03-21 13:22 1751Undefined symbols for architec ... -
React Native热部署之CodePush
2016-01-10 22:27 6245本文使用的环境是Mac OS 10.11.1、Xcode ... -
浅谈React Native中的FlexBox布局
2015-11-17 18:38 4305React Native通过一个基于FlexBox的布局引 ... -
React Native之构建一个简单的列表页
2015-10-23 14:45 2165本文中我们将创建一个简单的电影应用,这个应用将从Rotten ... -
React Native之环境搭建
2015-10-20 16:30 1446本文使用的环境是Mac O ... -
获取图片属性的方法
2015-10-18 20:43 3144很多时候我们需要获 ... -
NSCache的下标用法
2015-09-18 00:19 1215NSCache类和NSDictionary类很相似,也提供 ... -
如何给category添加属性
2015-08-16 10:41 692主要是使用了runtime中的associative机制。 ... -
UITableView的两种重用Cell方法的区别
2015-08-10 13:07 16148UITableView中有两种重用Cell的方法: - ... -
SDImageCache.m报错Unused variable 'fileName'
2015-08-04 21:56 1175GCC手册中的相关解释: unused:This att ... -
Swift调用Objective-C
2015-07-13 23:33 1228Swift调用Objective-C需要一个名为<工程 ... -
使用GCD实现倒计时
2015-07-24 21:47 1084__block int timeout = 60; // ... -
导航栏加分割线的实现
2015-07-01 22:00 1763self.view.backgroundColor = [U ...
相关推荐
QT+ffmpeg将多路视频合成一个视频存储并播放是一个常见的多媒体处理任务,涉及到的主要知识点包括QT框架、FFmpeg库以及视频编码与解码原理。QT是一个跨平台的应用程序开发框架,广泛用于创建图形用户界面和其他应用...
在IT领域,Flash是一款曾广泛应用于网页动画制作、交互设计以及视频合成的软件。本话题主要探讨的是如何使用Flash来制作视频合成并实现播放。在 Flash 中,视频合成与播放涉及多个关键步骤和技术,包括导入视频、...
在iOS开发中,视频合成是一项重要的技术,它允许开发者将多个视频片段合并成一个单一的视频文件,同时可能还需要处理如叠加图像、文字等元素。本教程将详细讲解如何在iOS应用中实现视频合成,主要关注苹果的...
视频合成工具是数字媒体制作领域中的重要软件,主要用于将多个视频源、图像、音频以及其他多媒体元素结合在一起,创建出全新的视觉效果。这类工具在视频编码过程中尤其关键,尤其是在处理多视角合成时,能够帮助用户...
在iOS平台上,视频合成是一项常见的任务,特别是在开发多媒体应用程序时。SDK(Software Development Kit)提供了必要的工具和技术,使得开发者能够方便地处理视频内容,包括将两个视频前后整合在一起,并添加音频。...
本项目“音频、视频合成”旨在教你如何在iOS平台上实现这一功能,特别是取消原视频音轨并添加新的音频轨道,从而创建一个新的视听作品。 在iOS中,苹果提供了AVFoundation框架,这是一个强大的多媒体处理库,用于...
Natron是一款免费且开源的视频合成软件,专为那些寻求类似Adobe After Effects和The Foundry的Nuke体验但不希望支付高昂费用的用户设计。它基于Node-graph技术,这意味着用户可以通过构建连接各个处理节点的图形工作...
微信小程序多个视频合成一个播放。一个播放完自动在播放另一个。给用户一种只播放了一个视频的错觉。 我们有多个视频但是后端合成一个视频的成本比较高希望前端合并。所以只能一个video标签通过显示不通的src来一个...
1. **音频分离与视频分离**:在进行音视频合成之前,可能需要先对源文件进行音视频分离,即将一个包含音频和视频的文件分解为单独的音频和视频流。 2. **音频处理**:可能需要对音频进行剪辑、调整音量、混音等...
【QT+FFmpeg多路视频合成】是一种技术,它结合了QT框架和FFmpeg库的能力,使得在QT环境中可以处理和合并多个视频流。QT是一个跨平台的应用程序开发框架,广泛用于创建图形用户界面和各种应用程序。而FFmpeg则是一个...
本程序实现了在QT平台上用ffmpeg将多路视频合成一起播放 合成视频的代码在combine文件中 注意:本代码运行后需将ffmpeg文件夹内bin文件夹里的.dll文件都复制在.exe文件的文件夹中程序才能正确运行 添加了可以将某个...
在这个"GPUimageDemo分段录制,及视频合成"项目中,我们将探讨如何利用GPUImage来实现视频的分段录制以及最终的视频合成。 首先,我们要了解GPUImage的基本概念。GPUImage是由Brad Larson创建的一个开源库,它提供...
这款软件的亮点在于它的语音合成和音视频合成功能,极大地扩展了创作可能性。 语音合成技术在VirtualDJ中扮演着重要角色,它允许用户将文字转化为自然流畅的语音输出。这项技术基于先进的自然语言处理算法,能够将...
3. **视频合成**:视频合成是将多个视频片段或图片帧组合成一个新的视频文件的过程。这需要对时间轴进行管理,确保帧的顺序正确,同时处理可能存在的分辨率、帧率、编码格式不一致等问题。视频合成可以用于创建电影...
在iOS开发中,音视频合成是一项常见的任务,它涉及到多媒体处理和播放技术。这个主题主要集中在如何将一个视频文件和一个音频文件合并成一个新的多媒体文件。以下是对这一知识点的详细阐述: 1. **多媒体框架介绍**...
Swift-XZAVMixObject是一个专为音视频合成设计的小型框架,主要针对Swift开发者,尤其在音频处理领域。这个框架的出现,旨在简化音视频混合的复杂性,提供一个高效且易于使用的工具集,帮助开发者在iOS、macOS或其他...
本主题聚焦于“音视频合成”这一过程,通过一个名为"音视频合成.zip"的压缩包,我们可以探讨其中涉及的关键知识点。 首先,我们要了解什么是音视频合成。音视频合成是指将音频轨道与视频轨道结合,生成一个新的...
音视频合成则是将音频流与视频流合并成一个完整的多媒体文件,常用于制作多媒体内容或者教育视频。在本话题中,我们将深入探讨如何在iOS上实现这些功能,以及如何保持低内存消耗。 首先,我们来讨论iOS的屏幕录制。...
在iOS平台上进行视频合成录像是一项复杂而有趣的技术挑战,它涉及到多媒体处理、帧同步、音频编码等多个领域的知识。本文将深入探讨如何在iOS应用中实现这一功能,主要围绕以下几个核心知识点展开: 1. **多媒体...