2011-03-21 76 views
0

我写了一个应用程序,它可以同时从多个设备捕获音频和视频,前一段时间使用QTKit capture API。QuickTime Capture中未使用音频通道的问题

但是,我了解到,从DV摄像机捕获的媒体不时会出现,因此没有任何关联的音频。实际上,音轨已经存在于文件中,但QuickTime Player Pro中的通道被设置为“未使用” - 因此无声。

由于我不习惯将这些用户暴露给这样的恶作剧,所以我希望在飞行后录制并自动修复频道布局(如果需要的话)。

不幸的是,我很难搞清楚如何!

我的问题是双重的:

  1. 是它在所有可能的检测,如果轨道的音频通道被标记为从QTKit“未使用”?
  2. 因为我认为答案上面是“没有”,我一直在四处的是与“原子督察”正常工作,一些电影文件的结构 - 迄今为止没有任何成功:
    什么/在哪里是存储此信息的QuickTime Atom?
    我可以在stsd Atom中看到正确的通道数(包含在stbl Atom中),但我没有看到任何映射发生在哪里。

回答

1

第一个问题:看起来不像。

您必须使用QTGetTrackPropertyInfo API与kQTPropertyClass_Audio, kQTAudioPropertyID_ChannelLayout才能获得通道布局。如果返回的AudioChannelLayout结构包含标记!= 0,则可以通过AudioFormatGetPropertyInfokAudioFormatProperty_ChannelLayoutForTag解决该问题;否则,AudioChannelDescription字段将有效,其中mChannelLabel设置为kAudioChannelLabel_Unused(0)。当然,所有这些只能在32位下工作。不要忘了#include <AudioToolbox/AudioToolbox.h>

第二个问题:
音轨的STSD原子应该包含一个“陈”延伸。此扩展名似乎是UInt32设置为零,然后是AudioChannelLayout结构。它似乎没有记录在QT文件规范或MP4规范中。

祝你好运!