1. 程式人生 > >FFmpeg 解碼流程

FFmpeg 解碼流程

input 解碼 結構 ive nal existing format receive free

當前是用的是3.4版本的FFmpeg

av_register_all
avformat_open_input
avformat_find_stream_info
avcodec_find_decoder
avcodec_open2
av_read_frame
avcodec_send_packet
avcodec_receive_frame

av_read_frame()讀取一個包並且把它保存到AVPacket結構體中。這些數據可以在後面通過av_free_packet()來釋放。
函數avcodec_decode_video()把包轉換為幀。然而當解碼一個包的時候,我們可能沒有得到我們需要的關於幀的信息。
因此,當我們得到下一幀的時候,avcodec_decode_video()為我們設置了幀結束標誌frameFinished。

註意到相當重要的一點av_read_frame()需要足夠的信息去解碼,如果沒有SPS/PPS,會繼續探測碼流,打印錯誤如下:
I:2018-01-06 14:35:33 ms:313:nal_unit_type: 1, nal_ref_idc: 3
I:2018-01-06 14:35:33 ms:313:non-existing PPS 0 referenced
I:2018-01-06 14:35:33 ms:313:decode_slice_header error
I:2018-01-06 14:35:33 ms:313:no frame!

FFmpeg 解碼流程