2011-03-21 61 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規範中。

祝你好運!