我编写了一个应用程序,可以使用QTKit捕获API同时从多个设备同时捕获音频和视频。
但是,我了解到,从DV摄像机捕获的媒体有时会出现而没有任何相关的音频。实际上,音频轨道很好地存在于文件中,但是在QuickTime Player Pro中通道被设置为“未使用” - 因此沉默。
由于我不习惯将我的用户暴露给这样的恶作剧,我想在我的录音后飞行,并在需要时自动修复频道布局。
不幸的是,我很难搞清楚如何!
我的问题是双重的:
stsd
Atom中找到正确的通道数(包含在stbl
Atom中),但我看不到发生任何映射的位置。答案 0 :(得分:1)
第一个问题:看起来不像。
您必须使用QTGetTrackPropertyInfo
API和kQTPropertyClass_Audio, kQTAudioPropertyID_ChannelLayout
来获取频道布局。如果返回的AudioChannelLayout
结构包含标记!= 0,则可以AudioFormatGetPropertyInfo
通过kAudioFormatProperty_ChannelLayoutForTag
解析该标记!否则,AudioChannelDescription
字段有效,mChannelLabel
设置为kAudioChannelLabel_Unused
(0)。当然,所有这些仅适用于32位。不要忘记#include <AudioToolbox/AudioToolbox.h>
第二个问题:
音轨的stsd原子应包含'chan'扩展名。此扩展名似乎是UInt32设置为零,后跟AudioChannelLayout
结构。它似乎没有记录在QT文件规范和MP4规范中。