gpt4 book ai didi

objective-c - QTKit QTMovie::insertSegmentOfTrack在OS X 10.7或10.8上不起作用

转载 作者:行者123 更新时间:2023-12-03 02:18:21 24 4
gpt4 key购买 nike

我有一个使用QTKit编写的类,该类读取并创建QuickTime电影文件。我在电影中添加音轨的功能在Snow Leopard上效果很好,而在Lion或Mountain Lion上则不起作用。音频信息确实出现在QuickTime Player的“显示电影检查器”中,并且电影的时长正确。但是,在播放电影时听不到音频。这是我的代码,在10.6中效果很好,但在10.7或10.8中效果不佳:

// here's the code that creates the exported movie
NSString *filePath = [NSString stringWithUTF8String:"Foo.mov"];
NSError *errorPtr;
qtMovie = [[QTMovie alloc] initToWritableFile:filePath error:&errorPtr];

// and now here is my function to add an audio track
bool PLQTMovie::addSoundTrack(const std::string &fileName, const long long srcStartTime, const long long srcEndTime, const long long dstStartTime)
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

NSString *file = [NSString stringWithUTF8String:fileName.c_str()];
NSError *errorPtr = nil;
QTMovie *audioMovie = [QTMovie movieWithFile:file error:&errorPtr];

NSArray *tracks = [audioMovie tracksOfMediaType:QTMediaTypeSound];
if([tracks count] == 0)
return false;

QTTrack *soundTrack = [tracks objectAtIndex:0];
QTMedia *media = [soundTrack media];
NSValue *durationValue = [media attributeForKey:QTMediaDurationAttribute];
QTTime soundTrackTime;
[durationValue getValue:&soundTrackTime];
long audioScale = soundTrackTime.timeScale;

long long srcDuration = 0;
if(srcEndTime < 0) // use entire source track duration
{
srcDuration = soundTrackTime.timeValue;
}
else
{
srcDuration = srcEndTime - srcStartTime;
}

QTTime startTime = QTMakeTime(srcStartTime, audioScale);
QTTime srcDurationTime = QTMakeTime(srcDuration, audioScale);
QTTimeRange srcTimeRange = QTMakeTimeRange(startTime, srcDurationTime);
QTTime dstTime = QTMakeTime(dstStartTime, audioScale);

QTTrack *audioTrack = [(QTMovie*)qtMovie insertSegmentOfTrack:soundTrack timeRange:srcTimeRange atTime:dstTime];

[pool drain];

return true;
}

我知道Apple鼓励从 QTKit过渡到 AV Foundation,但是旧的 QTKit代码仍然可以使用。我不知道该怎么做。有任何想法吗?

最佳答案

不知道这是否会有所帮助,但是我们遇到了类似的问题,答案是您需要在添加音频后将电影弄平。

基本上,我们必须将影片写入tmp文件,然后使用[QTMovie writeToFile:withAttributes:error]将QTMovieFlatten的属性设置为YES导出。

希望这会有所帮助,这样我就可以开始偿还我在这里获得的一些很棒的提示/答案。

关于objective-c - QTKit QTMovie::insertSegmentOfTrack在OS X 10.7或10.8上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17373796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com