Pergunta

Estou tentando entender como buscar vídeos codificados com p-frames (por exemplo,H.264)-- no momento só sei procurar em vídeos codificados com codecs em que cada quadro é um quadro-chave (por exemplo,MJPEG).

Dado um carimbo de data/hora, em última análise, ele deverá reproduzir o quadro desse carimbo de data/hora. Mas, por enquanto, estou apenas tentando reproduzir o quadro-chave próximo ao carimbo de data/hora. Então, primeiro--

ret = av_seek_frame(pFormatCtx, videoStream, avTime, 0); 
avcodec_flush_buffers(pCodecCtx);

Então algum código intermediário, incluindo av_read_frame.Então--

ret = avcodec_decode_video2(pCodecCtx, captureFrame, &gotPicture, &packet); 

Observações:

  • Para alguns vídeos, isso funciona.Para os outros, avcodec_decode_video2 retorna um erro (número negativo).Exemplo de um vídeo de trabalho: aqui.Exemplo de um vídeo que não funciona: aqui.

  • Para vídeos MJPEG, isso funciona.

  • Se eu tirar o av_seek_frame, para que ele reproduza os quadros em sequência, funciona.

Foi útil?

Solução

Substitua isso--

ret = av_seek_frame(pFormatCtx, videoStream, avTime, isPlayingBackward ? AVSEEK_FLAG_BACKWARD : 0); 
avcodec_flush_buffers(pCodecCtx);

com isso--

ret = avformat_seek_file(pFormatCtx, videoStream, 0, avTime, avTime, 0); 

(Embargo:Os documentos para avformat_seek_file dizer:“Isso faz parte da nova API de busca que ainda está em construção.Portanto, não use isso ainda.Pode mudar a qualquer momento, não espere compatibilidade com ABI ainda!")

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top