的解決方案是不是很簡單的,因爲有一些事情會在這裏:
-[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