当前是用的是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
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!
本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/2058119,如需转载请自行联系原作者