0

不久前,我使用 QTKit 捕获 API 编写了一个从多个设备同时捕获音频和视频的应用程序。

但是,我不时了解到,从 DV 摄像机捕获的媒体似乎没有任何相关的音频。事实上,音轨在文件中很好地呈现,但在 QuickTime Player Pro 中通道被设置为“未使用”——因此是静音。

由于我不愿意让我的用户接触到这样的恶作剧,我想在飞行后自动修复我的录音并在需要时自动修复频道布局。

不幸的是,我很难弄清楚怎么做!

我的问题有两个:

  1. 是否有可能检测到轨道的音频通道是否被 QTKit 标记为“未使用”?
  2. 由于我认为上述问题的答案是“否”,我一直在研究一些与“Atom Inspector”正常工作的电影文件的结构——到目前为止没有任何成功:
    QuickTime Atom 在哪里/在哪里这个信息被存储了?
    我可以在 Atom 中看到正确数量的通道stsd(包含在stblAtom 中),但我看不到任何映射发生的位置。
4

1 回答 1

1

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

您必须使用QTGetTrackPropertyInfoAPIkQTPropertyClass_Audio, kQTAudioPropertyID_ChannelLayout来获得频道布局。如果返回的AudioChannelLayout结构包含标签!= 0,您可以通过AudioFormatGetPropertyInfowith解决该问题kAudioFormatProperty_ChannelLayoutForTag;否则,该AudioChannelDescription字段将有效,mChannelLabel设置为kAudioChannelLabel_Unused(0)。当然,这一切都只适用于 32 位。不要忘记#include <AudioToolbox/AudioToolbox.h>

第二个问题:
音轨的 stsd atom 应该包含一个 'chan' 扩展名。这个扩展似乎是一个 UInt32 设置为零,后跟一个AudioChannelLayout结构。它似乎没有记录在 QT 文件规范和 MP4 规范中。

祝你好运!

于 2011-03-22T17:53:30.637 回答