Comando para detectar quadros-chave [ffprobe:Windows]:
ffprobe -f dshow -video_pin_name 1 -i video="H264 USB Camera" -show_entries frame=key_frame
A saída do comando na minha câmera é um quadro -chave por segundo . Usando avformat/av_read_frame(AVInputContext *, AVPacket *) e verificando os sinalizadores de pacotes de saída, ou seja in_packet->flags & AV_PKT_FLAG_KEY
, não estou recebendo nenhum pacote com a AV_PKT_FLAG_KEY definida. Estou configurando o input_context de forma semelhante à que faço no ffprobe:
av_dict_set(&opt, "video_pin_name", "1", 0);
Preciso fazer algo diferente ao ler os quadros da câmera? Posso confirmar que os quadros têm um PTS e um DTS válidos, mas nenhum deles mostra key_frame
o sinalizador definido.
O status do KF nos quadros é definido pelo decodificador.
O status do KF nos pacotes é definido pelo demuxer, mas o ffmpeg não lê essa informação, pois, quando o wrapper dshow foi escrito, as capturas eram de vídeo bruto.
Você pode abrir um tíquete de melhoria em trac.ffmpeg.org, se quiser.