的解决方案是不是很简单的,因为有一些事情会在这里:
-[QTMovie insertSegmentOf(Movie|Track):timeRange:atTime:]
不曲目添加到一部电影,如果轨道的编码(一个或多个)匹配那些已经存在的轨道。相反,它插入段放到现有的电影,如QuickTime播放器专业版中的“添加选择”不(即,如果您的电影是AAAAA和插入BBB那么你得到AAbbbAAA)。 (诚然,这里的类参考文件不是很简洁...)
- 不幸的是
-[QTMovie insertSegmentOfTrack:fromRange:scaledToRange:]
不会添加跟踪。相反,它的行为就像insertSegmentOfTrack:timeRange:atTime:
与改变插入段的持续时间的附加的能力。
解决方法是使用-[QTMovie insertSegmentOfMovie:fromRange:scaledToRange:]
。
为了您的例子,这会成为
-(QTMovie *) composedMovie
{
NSDictionary *editableAttribute = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:QTMovieEditableAttribute];
// load and prepare the base movie:
QTMovie *composition = [QTMovie movieWithFile:fileName error:nil];
[composition setMovieAttributes:editableAttribute];
// load and prepare the insertion
QTMovie *insertion = [QTMovie movieWithFile:insertionFileName error:nil]:
[insertion setMovieAttributes:editableAttribute];
// as you'll probably want to avoid adding the video tracks...
NSArray *videoTracks = [insertion tracksOfType:QTMediaTypeVideo];
for (QTTrack *track in videoTracks) {
[insertion removeTrack:track];
}
// figure out the time-range
QTTimeRange sourceRange = QTMakeTimeRange(QTZeroTime, [insertion duration]);
QTTimeRange destinationRange = sourceRange;
destinationRange.time = QTMakeTime(1ll, 1l); // use an offset of 1 second
[composition insertSegmentOfMovie:insertion fromRange:sourceRange scaledToRange:destinationRange];
return composition;
}
我知道,这是相当的东西,实际上是非常直截了当的代码,引导加载......但这是它的工作原理:-(
你的方式。一个救星下一次你在旧金山是给我发电子邮件,午餐和晚餐是我([email protected]) – richcollins 2011-03-20 22:47:34
由于我住在德国,很可能将无法参加WWDC可能需要一段时间!; - ) – danyowdee 2011-03-21 08:22:27