Fw: [問題] ffmpeg解h264的stream
※ [本文轉錄自 Programming 看板 #1FR5YjDb ]
作者: SocketAM2 (AM2) 看板: Programming
標題: [問題] ffmpeg解h264的stream
時間: Fri Mar 23 19:04:11 2012
開發環境:VC2008、ffmpeg的SDK
關於h264的Raw Byte Sequence Payload小弟已經有相當程度的熟悉
ffmpeg中用到的AVpacket、AVframe等等的初始化也都沒問題
現在剩下的問題有兩個,
都是關於AVPacket avpkt裡面的data要餵進那些nal unit的byte,
才能在丟入ffmpeg中用來decode的函數avcodec_decode_video2()後正確解碼
我嘗試把一段h264 raw stream中一段(HEX)
00 00 00 01 09 ......(這是一段delimiter,pic_type: I-frame)
00 00 00 01 27 ......(這是一段SPS)
00 00 00 01 28 ......(這是一段PPS)
[00 00 00 01 06 ......] * 3 (連續三段SEI)
00 00 00 01 05 ......(這是I-frame的內容)
餵進avpkt.data,並把這段的總長(byte)丟進avpkt.size
結果avcodec_decode_video2()有回傳非零的值,但卻沒有got_picture
嘗試連續做上一段的事情兩次,
則在第二次回傳非零的值,並且有got_picture
請問第一個問題:是否第一次把SPS、PPS丟入avcodec_decode_video2()時,
這些parameter set的內容並無法使用在丟進去的當下這個AVPacket,
這第一次丟入avcodec_decode_video2()實際上相當於告知解碼器解碼的參數,
而在第二次的時候才能順利解碼並且got_picture?
有大大可以詳細點的說明avcodec_decode_video2()的使用方法嗎?
http://ffmpeg.org/上面的說明雖然幫助很大,但許多細節都沒提到......
=========================================================================
第二個問題:
avcodec_decode_video2()成功解碼,把畫面存在AVFrame pFrame裡面之後,
若我想要把這個解好的畫面"長寬大小不變"的依據Y、U、V取出存在另一塊記憶體中,
我需要知道這個解完的frame的編碼方式(YUV420、422或其他等等)
和在AVFrame pFrame中存放排列的方法,
請問有人知道要怎麼獲取這段解好的原始資料嗎?
現在暫時可行的做法是使用sws_scale(),因為它的output是我知道排列方式的。
但我擔心即使是透過sws_scale()做"原尺寸、原編碼方式"的輸出,
實際上仍然需要相當的計算effort,
也就是這一步造成了多於計算資源的浪費。
小弟希望在有限的電腦上盡可能的快速處理大量高解析度影像,
故對效率性希望能做一些提高。
--
小弟這部分完全是上網找資料自學,也許有些觀念其實存在謬誤也請不吝指點
另外,現在要去吃個飯,晚上回來一定會回應,
若有大大作回覆的,或是認為我還需要補充說明什麼的
請不要一小時內沒看我回應就誤解小弟發問誠意不足丟了就跑,實在是吃飯時間......
總之請各位先進不吝指教,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.39.60.73
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 轉錄者: SocketAM2 (123.192.25.86), 時間: 03/23/2012 22:35:47
推
03/23 23:59, , 1F
03/23 23:59, 1F
ㄜ...其實我沒把自己想的那麼偉大,就是想知道去哪可以學到這些而已
→
03/23 23:59, , 2F
03/23 23:59, 2F
請問有推薦的網站或論壇嗎,我去估狗
→
03/24 00:01, , 3F
03/24 00:01, 3F
我要的資訊不是長寬,這都有了
我要的是存著解好YUV的array的排列方式,我要直接access每個pixel
※ 編輯: SocketAM2 來自: 123.192.25.86 (03/24 00:14)
推
03/24 00:22, , 4F
03/24 00:22, 4F
→
03/24 00:23, , 5F
03/24 00:23, 5F
我知道YUV420P、YV12等等等結構的擺放方式
我想知道的是avcodec_decode_video2()解出存在AVFrame pFrame裡的結構
根據查到的資料和實際檢視,有些我弄不懂的padding之類
我希望藉由直接存取pFrame取出我需要的pixel資訊
所以發問請教有沒有人知道那裏面的資訊是如何擺放的
※ 編輯: SocketAM2 來自: 123.192.25.86 (03/24 00:43)
→
03/24 02:39, , 6F
03/24 02:39, 6F
→
03/24 02:42, , 7F
03/24 02:42, 7F
推
03/25 07:09, , 8F
03/25 07:09, 8F
→
03/25 07:11, , 9F
03/25 07:11, 9F
推
03/25 15:12, , 10F
03/25 15:12, 10F
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 3 篇):