QTKit QTMovie::insertSegmentOfTrack无法在OS X 10.7或10.8上工作



我有一个使用QTKit编写的类,它读取并创建QuickTime电影文件。我为电影添加音轨的功能,在《雪豹》中效果很好,但在《狮子》或《山狮》中不起作用。音频信息确实出现在QuickTime播放器的"显示影片检查器"中,并且影片的持续时间正确。但是,播放电影时听不到音频。以下是我的代码,它在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;
}

我知道苹果鼓励从QTKit过渡到AV Foundation,但旧的QTKit代码应该仍然有效。我不知道我在这里应该做些什么。有什么想法吗?

不知道这是否有帮助,但我们遇到了类似的问题,结果是添加音频后需要将电影压平。

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

希望这能有所帮助,这样我就可以开始回报我在这里得到的一些很棒的提示/答案了。

相关内容

  • 没有找到相关文章