#pragma mark =====下面是合成视频的方法===========
- (void)vision:(PBJVision *)vision capturedVideo:(NSDictionary *)videoDict error:(NSError *)error
{
_recording = NO; //这句可能是控制完成存储之后就不能再录的。。。
if (error) {
NSLog(@"encounted an error in video capture (%@)", error);
return;
}
_currentVideo = videoDict;
NSString *videoPath = [_currentVideo objectForKey:PBJVisionVideoPathKey];
NSLog(@"_currentVideo==%@",_currentVideo);
NSLog(@"voideoPath==%@",videoPath);
//合成视频文件url的时候,必须在前面拼接一个file://因为刚才录制视频后存到沙盒里面的是以/private开头的。
NSString *videoUrlPath = [NSString stringWithFormat:@"file://%@",videoPath];
NSString *path = [[NSBundlemainBundle] pathForResource:@"angry"ofType:@"wav"];
NSURL *audioUrl = [NSURL fileURLWithPath:path];
//下面两句是分别取得视频和声音文件的url,以供合成用。
AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:audioUrl options:nil];
NSLog(@"audioAsset===%@==",audioAsset);
AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:[NSURL URLWithString:videoUrlPath] options:nil];
NSLog(@"videoAsset===%@==",videoAsset);
//下面就是合成的过程了。
AVMutableComposition* mixComposition = [AVMutableCompositioncomposition];
AVMutableCompositionTrack *compositionCommentaryTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio
preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionCommentaryTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAsset.duration)
ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]
atTime:kCMTimeZero error:nil];
AVMutableCompositionTrack *compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo
preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration)
ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]
atTime:kCMTimeZero error:nil];
AVAssetExportSession* _assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition
presetName:AVAssetExportPresetPassthrough];
NSString* videoName = @"export.mov"; //这里换成wmv格式的就不行了。
NSString *exportPath = [NSTemporaryDirectory() stringByAppendingPathComponent:videoName];
long long temp = [self fileSizeAtPath:exportPath];
NSLog(@"temp===%lld",temp);
// temp===381266
NSLog(@"exportPaht === %@",exportPath);
NSURL *exportUrl = [NSURL fileURLWithPath:exportPath];
if ([[NSFileManagerdefaultManager] fileExistsAtPath:exportPath])
{
[[NSFileManagerdefaultManager] removeItemAtPath:exportPath error:nil];
}
_assetExport.outputFileType = @"com.apple.quicktime-movie";
NSLog(@"file type %@",_assetExport.outputFileType);
_assetExport.outputURL = exportUrl;
_assetExport.shouldOptimizeForNetworkUse = YES;
//下面是按照上面的要求合成视频的过程。
[_assetExport exportAsynchronouslyWithCompletionHandler:
^(void ) {
// 下面是把视频存到本地相册里面,存储完后弹出对话框。
[_assetLibrarywriteVideoAtPathToSavedPhotosAlbum:[NSURLURLWithString:exportPath] completionBlock:^(NSURL *assetURL, NSError *error1) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"好的!" message: @"整合并保存成功!"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}];
}
];
}
//单个文件的大小
- (long long) fileSizeAtPath:(NSString*) filePath{
//
// NSData* data = [NSData dataWithContentsOfFile:[VoiceRecorderBaseVC getPathByFileName:_convertAmr ofType:@"amr"]];
// NSLog(@"amrlength = %d",data.length);
// NSString * amr = [NSString stringWithFormat:@"amrlength = %d",data.length];
NSFileManager* manager = [NSFileManagerdefaultManager];
if ([manager fileExistsAtPath:filePath]){
return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];
}
return 0;
}
相关推荐
AVFoundation是苹果提供的核心多媒体处理框架,它为iOS和macOS提供了丰富的功能,包括视频播放、录制、编辑和合成。在视频合成中,我们主要用到的是AVAsset、AVMutableComposition、AVAssetTrack和...
iOS swift + 视频音频合成
它是iOS和OS X系统中用于多媒体处理的核心框架,提供了广泛的音频和视频功能,包括录制、编辑、播放和合成。在视频合成场景下,我们主要会用到AVAsset、AVMutableComposition、AVAssetTrack和AVVideoComposition等类...
1. **AVFoundation框架**:这是iOS开发中的核心多媒体框架,提供了广泛的音频和视频处理能力,包括播放、录制、编辑和合成等。 2. **AVAsset**:表示多媒体内容的源,可以是视频、音频或者其他复合媒体。你可以通过...
为了合成音视频,我们需要分别读取音频和视频的原始数据,然后通过AVAssetWriterInput将它们同步写入到同一个输出文件中。同时,我们需要注意保持音频和视频的时间戳同步,确保播放时的准确无误。 在实现这些功能时...
综上所述,iOS上的视频编辑涉及了多个高级技术,包括AVFoundation框架的深入使用、音视频的处理和合成、图形渲染等。通过掌握这些技术,开发者可以构建功能丰富的视频编辑应用,满足用户多样化的创作需求。
- `AVComposition`:用于组合多个音视频轨道,可以理解为一个复合资产,它可以包含多个音轨和视频轨。 3. **AVMutableCompositionTrack**: 在`AVComposition`中,`AVMutableCompositionTrack`用于表示每个单独的...
1. **多媒体框架AVFoundation**:iOS中处理音频和视频的主要框架是AVFoundation。它提供了一整套API,用于录制、播放、编辑和处理音视频内容。在视频合成录像中,我们主要用到的是AVAsset、AVMutableComposition、...
AVFoundation是苹果提供的一套强大的多媒体处理框架,它包含了处理音频和视频的各类工具。在语音合成方面,我们需要使用AVSpeechSynthesizer类。这个类提供了将文本转换为语音的能力,支持多种语言和发音风格。 要...
这个"iOS音频播放测试包"提供了一个完整的解决方案,涵盖了从网络音频流的获取到本地音频的播放,以及集成讯飞语音合成技术。以下是这些知识点的详细说明: 1. **iOS音频播放**:iOS平台提供了多种音频播放技术,如...
VideoAudioCompositionDemoiOS 音频视频图像合成那点事人而无信不知其可前言很久很久没有写点什么了,只因为最近事情太多了,这几天终于闲下来了,趁此机会,记录下几个月前写的一个关于视频音频图片合成方面的一个...
AVFoundation的编辑API允许开发者执行创建时间点图像、导出或裁剪电影、剪辑多个片段、进行音频混合、添加视频过渡效果、将Core Animation集成到视频中以及读写具有自定义音频和视频数据的视频等一系列任务。...
对于音频合成,AudioKit 提供了各种合成器引擎,如波表合成、物理模型合成和FM合成,让开发者能够创建出丰富多彩的声音。此外,它还支持MIDI,可以接收和发送MIDI消息,从而与硬件控制器或虚拟乐器进行交互。 在...
AVFoundation是Apple提供的一套强大的多媒体处理框架,它为开发者提供了录制、编辑、处理音频和视频的强大工具。 首先,我们需要理解什么是视频水印。水印通常是指在视频画面上添加的一种半透明或不显眼的标识,它...
本文将深入探讨如何在iOS中实现这两个功能,主要基于Apple的AVFoundation框架,该框架提供了处理音频和视频的强大工具。 一、AVFoundation框架简介 AVFoundation是Apple开发的一个核心框架,用于处理多媒体内容,...
AVFoundation是苹果提供的一套强大的多媒体处理框架,它允许开发者进行音频和视频的捕获、编辑、播放以及合成等操作。在这个"ios-高仿微信小视频截取功能.zip"项目中,我们将深入探讨如何利用AVFoundation来实现这一...
在iOS开发中,音频和视频播放是常见的功能需求,尤其对于构建媒体应用或者有互动娱乐元素的应用来说至关重要。本资源“IOS应用源码——音频视频播放代码.rar”提供了一套完整的源码,可以帮助开发者深入理解iOS平台...
如果需要在原始视频流上进行旋转,可以使用Core Image框架,它提供了强大的图像和视频处理能力,包括实时滤镜和几何变换。 AVSimpleEditoriOS可能是一个示例项目或库,它简化了上述视频处理流程。这个库可能提供了...
首先,AVFoundation框架是苹果iOS SDK中的一个核心组件,它为音频和视频的处理提供了一个强大的工具集。通过AVFoundation,开发者可以实现多媒体数据的录制、播放、编辑和合成等多种功能。该框架包含了多个类和协议...