我正在尝试使用AVMutableComposition在精确的时间播放一系列声音文件.
当视图加载时,我创建合成,目的是在1秒内均匀地播放4个声音.声音的长短不应该无关紧要,我只想在0,0.25,0.5和0.75秒时将它们发射:
AVMutableComposition *composition = [[AVMutableComposition alloc] init];
NSDictionary *options = @{AVURLAssetPreferPreciseDurationAndTimingKey : @YES};
for (NSInteger i = 0; i < 4; i++)
{
AVMutableCompositionTrack* track = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
NSURL *url = [[NSBundle mainBundle] URLForResource:[NSString stringWithFormat:@"sound_file_%i", i] withExtension:@"caf"];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:options];
AVAssetTrack *assetTrack = [asset tracksWithMediaType:AVMediaTypeAudio].firstObject;
CMTimeRange timeRange = [assetTrack timeRange];
Float64 t = i * 0.25;
NSError *error;
BOOL success = [track insertTimeRange:timeRange ofTrack:assetTrack atTime:CMTimeMakeWithSeconds(t, 1) error:&error];
if (!success)
{
NSLog(@"unsuccesful creation of composition");
} …
Run Code Online (Sandbox Code Playgroud) core-audio avfoundation ios avcomposition avmutablecomposition
更新 - 我已经为回答这个问题增加了50个声望奖励!
我有一个应用程序,需要将一些视频和照片放在一起,以创建一个电影.我正在使用AVMutableComposition.为了能够指导视频如何组合,我必须使用AVMutableVideoComposition.这个东西有一个名为的属性backgroundColor
,Apple Documentation说:
仅支持纯色BGRA颜色; 模式和其他支持的颜色将被忽略.如果渲染的像素缓冲区没有alpha,则忽略背景颜色的alpha值.
我从中理解的是,有一种方法可以将alpha通道添加到backgroundColor,但我只是不明白如何.什么If the rendered pixel buffer does not have alpha, the alpha value of the background color is ignored.
意思?我怎么能添加这样的东西?
如果我这样做myVideoCompositionInstruction.backgroundColor = [[UIColor colorWithWhite:1 alpha:0] CGColor];
只是不起作用 - 背景保持白色并且不透明.
任何帮助将不胜感激,谢谢!
iphone transparent background-color avfoundation avcomposition
AVFoundation允许您将2个资源(2个视频)"组合"为2个"轨道",就像在Final Cut Pro中一样.
该理论说,我可以将两个视频叠加在一起,使用alpha,并查看两者.
我要么做错了,或者某处有错误,因为下面的测试代码虽然有点乱,但清楚地说明我应该看到2个视频,我只看到一个,如下所示:http://lockerz.com/s/172403384 - "蓝色"方块是IMG_1388.m4v
无论出于何种原因,IMG_1383.MOV永远不会显示.
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], AVURLAssetPreferPreciseDurationAndTimingKey, nil];
AVMutableComposition *composition = [AVMutableComposition composition];
CMTimeRange timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(4, 1));
AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoComposition];
// Track B
NSURL *urlVideo2 = [NSURL URLWithString:@"file://localhost/Users/me/Movies/Temp/IMG_1388.m4v"];
AVAsset *video2 = [AVURLAsset URLAssetWithURL:urlVideo2 options:options];
AVMutableCompositionTrack *videoTrack2 = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:0];
NSArray *videoAssetTracks2 = [video2 tracksWithMediaType:AVMediaTypeVideo];
AVAssetTrack *videoAssetTrack2 = ([videoAssetTracks2 count] > 0 ? [videoAssetTracks2 objectAtIndex:0] : nil);
[videoTrack2 insertTimeRange:timeRange ofTrack:videoAssetTrack2 atTime:kCMTimeZero error:&error];
AVMutableVideoCompositionLayerInstruction *to = …
Run Code Online (Sandbox Code Playgroud) cocoa objective-c avfoundation avcomposition avvideocomposition
我有一个AVMutableComposition,我已经与AVPlayer相关联.似乎如果我为这个合成添加曲目,除非我再次在播放器上设置合成,否则AVPlayer不会播放添加的曲目.现在我只是用已经设置的相同成分替换当前项目来做到这一点.之后它会拿起新的曲目.
我无法弄清楚这是不是这样做的正确方法,不知何故,这样做有点奇怪.
有任何想法吗?
谢谢
我有一个视频合成,我想在Airplay上播放(没有镜像).当使用普通的Airplay镜像时,该应用程序可以正常工作,但我希望通过使用Airplay视频获得速度,可靠性和分辨率.
问题是,当我设置
player.usesAirPlayVideoWhileAirPlayScreenIsActive = YES;
Run Code Online (Sandbox Code Playgroud)
......玩家空白.
笔记:
两个问题:
我有一个AVComposition和一个AVVideoComposition,我每半秒左右就生成一个拇指视频.我使用动画工具进行一些叠加.我在操作队列上执行调用,并在某些类型的编辑后触发.操作队列是串行而不是异步,因此进程永远不会运行并且我已经验证了这一点.下面的代码在串行队列中的另一个NSOperation中的主线程上执行.
现在我的问题是,拇指随机失败,没有模式.我可以运行一次并让它全部成功.我可以用完全相同的参数再次运行它,并且有一些拇指失败.我可以再次运行它并且有不同的拇指失败.
它似乎与其他线程中正在进行的其他活动有关,例如从ALAssetLibrary或MediaFramework查询大量项目.
我还要提到这在iOS6中没有这个问题.
在生成拇指之前,我会创建AVComposition和AVVideoComposition的副本.
有人对我有任何指示?
我很感激.
//this must be called on the main thread to correctly generate overlays
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
AVAsset *asset = avComposition;
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
generator.appliesPreferredTrackTransform = TRUE;
AVMutableVideoComposition *mutableVideoComposition = (AVMutableVideoComposition *) avVideoComposition.mutableCopy;
CALayer *baseSyncLayer = [CALayer layer];
baseSyncLayer.frame = CGRectMake(0, 0, resolution.width, resolution.height);
CALayer *videoLayer = [CALayer layer];
videoLayer.frame = CGRectMake(0, 0, resolution.width, resolution.height);
[baseSyncLayer addSublayer:videoLayer];
__unused NSArray *imageLayers = [MovieCompositionService applyImageAnimations:avComposition andLayer:baseSyncLayer andProject:project fileRender:YES addTextOverlays:addTextOverlays andResolution:resolution];
mutableVideoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer …
Run Code Online (Sandbox Code Playgroud) 我想在AVMutableComposition中添加AVMediaTypeSubtitle类型的轨道,添加本身很容易,但如何填充此轨道?以及如何阅读?!!
我找不到任何与如何读/写AVMediaTypeSubtitle类型的轨道相关的东西!
我AVFoundation
只使用音频-即不使用视频-并试图将几个AVComposition
s接一个接一个地结尾AVComposition
。
示例案例:仅两个AVComposition
秒。通过创建一个AVPlayer,它们每个都可以正常运行,因此:
_player = [AVPlayer playerWithPlayerItem:[AVPlayerItem playerItemWithAsset:comp]]
Run Code Online (Sandbox Code Playgroud)
comp
的实例在哪里AVMutableComposition
?(顺便说一句,值得注意的是_player
必须是一个ivar,否则ARC在播放之前会过早释放它-花了一段时间才能找到它。)
很好-执行
[_player play]
Run Code Online (Sandbox Code Playgroud)
导致comp
成功播放。
但是,这失败了:
(self.segments
是的NSMutableArray
自定义子类的包含元素AVMutableComposition
)
AVMutableComposition *comp = [AVMutableComposition composition];
NSError *err;
for (AVMutableComposition* c in self.segments) {
[comp insertTimeRange:CMTimeRangeMake(kCMTimeZero, segment.duration)
ofAsset:segment atTime:comp.duration error:&err];
DLog(@"Error was %@", segment, err);
}
Run Code Online (Sandbox Code Playgroud)
对于self.segments
执行此代码时的每个元素,调用该insertTimeRange::::
方法时都会收到此错误:
Error was Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not
be completed" UserInfo=0x14e8e7f0 {NSLocalizedDescription=The operation could …
Run Code Online (Sandbox Code Playgroud) 我正在开发一款使用AVFoundation课程录制和播放视频的iPad应用.我有基本记录/播放的所有代码,现在我想添加一个功能,允许用户在视频上绘制和注释 - 我认为这不会太困难.更难的部分,以及我无法找到任何示例的东西,将绘图和注释组合到视频文件本身.我怀疑这部分是用AVComposition完成的,但不确切知道如何.非常感谢您的帮助.
标记
avfoundation ×9
ios ×6
iphone ×3
objective-c ×3
cocoa ×2
airplay ×1
audio ×1
core-audio ×1
drawing ×1
ios7 ×1
subtitle ×1
transparent ×1
video ×1