Closed MUCHWAY closed 3 weeks ago
When I use h264_rkmpp
only as an encoder, not as a decoder, the same program runs as follows:
read pkt from stream
g_iDecPkt size 20027
read_data_time ------------>1 ms
send pkt to decoder
read frame from decoder
send frame to encoder
need input more pkt
decoder_time -------------->49 ms
read pkt from encoder
g_oEncPkt size 2463
g_oEncPkt size 0
need input more frame
encoder_time -------------->0 ms
get size 2463
loop_time ----------------->50 ms
read pkt from stream
g_iDecPkt size 23244
read_data_time ------------>2 ms
send pkt to decoder
read frame from decoder
send frame to encoder
need input more pkt
decoder_time -------------->59 ms
read pkt from encoder
g_oEncPkt size 2813
g_oEncPkt size 0
need input more frame
encoder_time -------------->0 ms
get size 2813
loop_time ----------------->62 ms
read pkt from stream
g_iDecPkt size 12861
read_data_time ------------>1 ms
send pkt to decoder
read frame from decoder
send frame to encoder
need input more pkt
decoder_time -------------->54 ms
read pkt from encoder
g_oEncPkt size 2369
g_oEncPkt size 0
need input more frame
encoder_time -------------->0 ms
get size 2369
loop_time ----------------->56 ms
Please use the ffmpeg command line to reproduce the issue.
Use -flags +low_delay
if you need one-input-one-output encoder mode.
avcodec_receive_packet cannot receive encoded packets continuously. The current thinking is that 'h264_rkmpp' is used as decoder and encoder. The frame rate of video source is 25fps. avcodec_receive_packet does not receive packets in every cycle. Packets are always received after an interval of one cycle. My key code is:
When code is run, output information via printf:
avcodec_receive_packet
return AVERROR(EAGAIN),I try to send more packet to endocer, but there was no improvement.