2012-07-01 63 views
0

我有一個文件,它是一個帶3個塊的RIFF容器; RIFF塊有'WAVE'標識符。第一塊是'fmt',第二塊是'數據',最後一塊是'eink'(我自己的塊)。因此,該文件由使用directshow的c#代碼生成。音頻以AAC編碼。因此,我不想在iOS 5上播放存儲在「數據」塊中的音頻。*。
我試圖讀取整個'數據'塊並使用[initWithData:error:][1]方法中的那些字節AVAudioPlayer。但它似乎工作方式不同。
比我想的,我可以嘗試使用這些字節制作我自己的m4a文件並播放它,但是還有其他正確的方法嗎?請給我建議一些調查方法?在哪裏閱讀?或者其他方法。從iOS上的RIFF容器讀取AAC音頻

+0

WAV內的AAC可能採用以下格式--ADIF,ADTS和M4A。你知道你的WAV文件中存在哪種格式嗎?有些鏈接可能有助於查找格式(a)http://wiki.multimedia.cx/index.php?title=ADTS(b)http://developer.apple.com/library/ios/#technotes/ tn2236/_index.html –

+0

我不知道它是否可以幫助確定格式,但是當我將文件重命名爲'* .aac'時,VLC可以播放它。我仍在研究它。當創建此文件的其他開發人員說出他的話時,我會更新信息。 – DanSkeel

+0

問題的任何更新? –

回答

2

Few concepts regarding WAV, AAC and MP4

WAV是容器格式,可以存儲任何其它音頻數據,二者壓縮或未壓縮的。更多詳情請見http://www.sonicspot.com/guide/wavefiles.html

AAC可以用多種方式封裝。最常見的是ADTS和MP4。 AAC容器格式的詳細信息是http://en.wikipedia.org/wiki/Advanced_Audio_Coding#Container_formats

ADTS是相對簡單的格式,其中每個AAC幀前面有一個標題。有關ADTS標頭的更多詳細信息,請參閱http://wiki.multimedia.cx/index.php?title=ADTS

MP4是相對更復雜的格式,支持存儲各種音頻格式和視頻格式。在MP4的情況下,頭文件信息一次存儲在文件中的MP4結構中,其餘的AAC幀不需要任何頭文件信息。

How to support playing WAV file with AAC payload in iOS?

  • 確定有效負載的類型,無論是ADTS或MP4或ADIF
  • 如果文件可以脫機轉換,使用第三方庫,例如FFMPEG爲WAV與AAC轉換成M4A文件, iOS支持的格式。
  • 如果文件需要在設備上轉換,最好的方法是從有效載荷中提取AAC幀數據,將它們轉換爲iOS預期的方式並對其進行解碼。確定這一點的最佳方法是將文件轉換爲M4A離線,並查看數據如何輸入到iOS音頻播放器。
+0

因此,我是否理解,AAC可以像ADTS或ADIF一樣存儲在WAV有效載荷內。而iOS框架只能讀取mp4容器?如何確定數據是ADTS還是ADIF?當我發現它時,我應該怎麼做?並請在ditail上解釋更多解決方案?非常感謝您的幫助。 – DanSkeel

+0

好吧,如果它是一個ADTS,那麼會有那些12位同步字... – DanSkeel