FFmpeg av_seek_frame規律詳解


本帖最后由 TangMonk 於 2016-7-27 10:26 編輯

1 av_seek_frame 對視頻進行跳轉規律
1.1 flags 參數
#define AVSEEK_FLAG_BACKWARD 1 ///< seek backward,若你設置seek時間為1秒,但是只有0秒和2秒上才有I幀,則時間從0秒開始。 #define AVSEEK_FLAG_BYTE 2 ///<seeking based on position in bytes #define AVSEEK_FLAG_ANY 4 ///< seek toany frame, even non-keyframes,若你設置seek時間為1秒,但是只有0秒和2秒上才有I幀,則時間從2秒開始。 #defineAVSEEK_FLAG_FRAME 8 ///< seeking based on frame number,若你設置seek時間為1秒,但是只有0秒和2秒上才有I幀,則時間從2秒開始。
1.2 seek 不成功的原因
1.2.1  格式問題

[td]  
   
格式
   
   
AVSEEK_FLAG_BYTE
   
   
AVSEEK_FLAG_ANY
   
  
mp4
  
  
不可以
  
  
可以
  
  
flv
  
  
可以
  
  
不可以
  
  
avi
  
  
可以,但是顯示下一個pos
  
  
可以
  
  
ogv
  
  
可以
  
  
可以
  
  
webm
  
  
可以
  
  
可以
  
1.2.2 ffmpeg 版本問題
有的版本可以滿足上面的格式關系
1.3 flv
對於flv格式,pkt->pos指向該packet的h264數據位置
1.4 MP4
有些mp4的片段的最后一個packet的pos為packet.pos,那么該mp4在seek的時候需要用到文件pos-50000位置的數據,不同的視頻該偏移不同
1.5 av_seek_frame 到40.0秒處,av_read_frame讀到的第一個packet可能不是40秒處的視頻packet,可能是之前的音頻packet

遇到的問題及解決
2.1 probe size[flv @ 0x608380] Packet mismatch 0 7474
[flv @ 0x608380] Could not find codec parameters for stream 0 (Video:h264, none, 502 kb/s): unspecified size Consider increasing the value for the'analyzeduration' and 'probesize' options [flv @ 0x608380] Could not find codecparameters for stream 1 (Audio: aac, 44100 Hz, stereo, 32 kb/s): unspecifiedsample format Consider increasing the value for the 'analyzeduration' and'probesize' options
2.1.1  原因是自定義IO的probe size參數設置的過小
2.2 mp4 文件執行時打印錯誤: [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fff340008c0] error reading header
原因: 頭的大小過小,分配大一點的頭解決
2.3 mp4 文件執行到avformat_open_input,報[mov,mp4,m4a,3gp,3g2,mj2@ 0x7fff340008c0] moov atom not found
別人那里沒問題 原因:頭太小,10M才可以,5M都不行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM