FFmpeg 解碼流程
阿新 • • 發佈:2018-01-06
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!
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()把包轉換為幀。然而當解碼一個包的時候,我們可能沒有得到我們需要的關於幀的信息。
註意到相當重要的一點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 解碼流程