2009-10-21 55 views
2

我搞砸了與編解碼器的問題了天,還是沒能看到大局呢。這是我第一次處理音頻/視頻格式和編解碼器。所以我真的需要一些幫助。 這是工作。自定義文件格式和編解碼器?

我寫幾個組成部分,它負責編碼和解碼定製MPEG文件。在standart de/compression過程(對於音頻和視頻)之前,我將執行一些自定義的de/encryption。爲此編寫編解碼器和軟件庫。列出了我無法弄清楚的事情。

  • 對於WMP,什麼是編解碼器定位策略。
  • 如何differantiate例如從MPEG-3格式我的自定義文件格式。這是什麼標準和編程結構。 (我搞砸了真正的部分是這樣的。容器格式,視頻格式,FOURCC碼...等開車送我到死)
  • 對於Windows這項工作你建議寫碼器有什麼方法(DMO或過濾器)

我希望通過上市問題,以應付你的幫助。信息和一些有用的鏈接將不勝感激。除了MSDN :)因爲我無法找到我正在搜索的內容。

回答

2

對於WMP,什麼是編解碼器定位 政策。

直到Windows Media Player 7.0,它只是一個純粹的DirectShow播放器。從7.0開始,Microsoft已開始以不同方式處理不同的文件類型。這主要是WMV文件的情況。 WMP現在將在Vista中使用MediaFoundation媒體管道,在​​某些文件類型中使用7。

如何從mpeg-3格式差異化自定義文件 格式。 什麼是standarts和編程 結構爲此。 (實部我 搞砸了是這樣的。容器格式, 視頻格式,FOURCC碼...等 開車送我到死)

could do this(笑,遺憾的MSDN鏈接) ,如果你正在創建你自己的自定義容器格式,但如果你想讓自己的生活更輕鬆,我會選擇一個現有的和/或開源的容器,如AVI或MKV。當您以這兩種格式創建流時,您都需要提供一個編解碼器代碼,例如視頻的fourcc或音頻的格式標籤。由於您正在製作自己的自定義格式,因此您應該製作自己的fourcc或格式標記值,但請注意不要選擇已使用的人。

比方說,你正在使用的AVI。內置的avi demux將讀取AVI頭文件並查看文件中每個流的元數據。它可能會找到具有fourcc DX50的視頻流和具有WAVE_FORMAT_PCM格式標籤的音頻流。 DirectShow將枚舉已註冊的過濾器並查詢其引腳,以查看它們是否支持採用DX50視頻或WAVE_FORMAT_PCM音頻。所以如果你的AVI有一個4XX的XXXX,DirectShow會枚舉過濾器來尋找需要XXXX的類型。然後,您將製作一個轉換過濾器,它將接受fourcc XXXX。您的轉換過濾器將解碼視頻並輸出未壓縮的格式。也許RGB24。 DirectShow將檢測您的輸出引腳輸出該媒體類型,並可能將其直接連接到渲染器。這個過程對音頻來說是一樣的,除了我們處理格式標記而不是四個cs(並且你處理WAVEFORMATEX和VIDEOINFOHEADER)。

For this work on Windows what method do you suggest to write codec(DMO or Filter) 

我從來沒有親自寫DMO,但我會強烈建議看看它。我聽說有更少的鍋爐板COM和IIRC,MediaFoundation有DMO包裝,所以你可能會得到自動的MediaFoundation支持。

除了DShow SDK示例,您可能還想檢查out this。可以幫助你開始。 this website也有很好的樣品,但可能並不完全符合您的要求。

+0

感謝您的答案。據我瞭解處理fourcc和格式標記是由默認的源過濾器處理。然後它連接到相應的轉換過濾器,我必須自己寫。還有2個問題: 1-對於音頻使用mp3格式的效果是什麼。 2-我找不到結構VIDEOINFOHEADER的元素用於放置fourcc代碼。 – 2009-10-21 13:24:55

+0

使用MP3格式沒有任何效果。爲了容易理解,假裝DSHOW不知道任何關於MP3格式的內容,DSHOW文檔也沒有提及MP3。對於DShow,它只是您定義的另一種格式:) FourCC位於VIDEOINFOHEADER的VIDEOINFOHEADER.bmiHeader.biCompression中。有一件事情可能並不明顯,AM_MEDIA_TYPE.subType的前4個字節也是fourcc!其餘的GUID將是FORMAT_VideoInfo(FORMAT_VideoInfo將是majorType) – 2009-10-21 19:00:16

+0

謝謝你耶利米。所有幫助我很多。 – 2009-10-21 19:43:09

0

沒有足夠的空間,徵求意見,我認爲:)

我對最後的過濾器和DirectShow通過你的答案和程序的GraphEdit一些瞭解。我將爲音頻和視頻使用AVI容器。在內部,我將使用將通過我的算法加密的mpeg格式。我將實現轉換過濾器或DMO。 (DMO可能)

我想知道AVI Splitter如何將數據傳遞到我的註冊編解碼器。我的意思是將採用哪種格式的數據。我認爲必須有一些標準。我在研究過程中與MSDN保持了和平,但在個別格式的數據流中找不到有關實際緩衝區格式的信息。 (AVI在我的情況下)

+0

真的沒有緩衝區格式。您只需獲取完整樣本的緩衝區。例如,如果您在AVI中使用壓縮視頻幀(使用自定義壓縮/加密),則AVI分離器將通過您的輸入引腳向您發送全幀樣本。 – 2009-10-25 02:44:56

+0

分離器會向我發送幀的標題還是內容? – 2009-10-25 14:55:34