FFmpeg 解碼流程

當前是用的是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!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章