2014-10-28 203 views
10

我有在附錄B格式的h264流,並按照此鏈接here來實現與iOS8 videoToolBox的h264解碼。錯誤代碼-8969,-12909在解碼視頻工具箱iOS8中的h264時

我在每一步檢查OSStatus。

  1. 與SPS和PPS數據使用CMVideoFormatDescriptionCreateFromH264ParameterSets創建CMFormatDescription。(狀態== NOERR)

  2. 創建使用VTDecompressionSessionCreate一個VTDecompressionSession。 (狀態== noErr)

  3. 將NALUnit有效載荷捕獲到CMBlockBuffer中,確保以
    替換字節長度代碼。 (status == noErr)

  4. 創建一個CMSampleBuffer。 (狀態== noErr)

  5. 使用VTDecompressionSessionDecodeFrame並獲取錯誤代碼-8969(模擬器),-12909(設備)中的 回調函數。

我懷疑我在步驟3中做了什麼錯誤,我不太確定長度代碼的含義。我只是按照WWDC會話視頻替換每個NALUnit開始代碼00 00 00 01至00 00 80 00.是對還是不對?或者我應該檢查別的東西?謝謝

回答

13

最後,現在就工作吧。 因此,我分享瞭如何使用videoToolbox解碼h.264流數據的細節,而不是顯示在屏幕上。

  1. 獲得SPS,PPS格式的H.264流數據。
  2. 使用CMVideoFormatDescriptionCreateFromH264ParameterSets創建CMFormatDescription。
  3. 使用VTDecompressionSessionCreate創建VTDecompressionSession。
  4. 將NALUnit載荷轉換爲CMBlockBuffer。
  5. 用4字節的長度代碼替換起始代碼。 (ps:長度= NALUnit長度 - 起始碼長度)
  6. 使用CMSampleBufferCreate創建CMSampleBuffer。
  7. 使用VTDecompressionSessionDecodeFrame並從回調中獲得結果。

然後,你必須使用dispatch_semaphore_t來控制幀解碼和顯示。我上傳sample project on my git。希望能幫助別人。

+2

謝謝!看着你的代碼,我意識到我沒有字節交換NALU長度代碼。它必須採用大端格式。 – 12on 2014-12-12 16:25:16

+2

鏈接已損壞。你有沒有將VideoToolboxDemo上傳到其他地方?這正是我想要做的,我正在掙扎。 – ddelnano 2015-01-16 22:20:43

+0

有人可以提供上述第4步和第5步的一些代碼嗎?我被困住了,找不到解決辦法... – FormigaNinja 2015-03-19 03:25:03