Question

J'essaie de comprendre comment rechercher dans les vidéos encodées avec les p-frames (par ex.H. 264)-- aujourd'hui je ne sais comment rechercher dans les vidéos encodées avec les codecs dans lequel chaque image est une image-clé (par ex.MJPEG).

Étant donné un timestamp, en fin de compte, il devrait jouer l'image pour que l'horodatage. Mais pour l'instant, je suis juste en train de jouer de l'image clé près de l'horodatage. Donc, d'abord--

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

Puis certains code intervenant, y compris av_read_frame.Puis--

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

Observations:

  • Pour certaines vidéos, cela fonctionne.Pour les autres, avcodec_decode_video2 renvoie une erreur (nombre négatif).Exemple d'un travail vidéo: ici.Exemple de non-travail vidéo: ici.

  • Pour MJPEG vidéos, cela fonctionne.

  • Si je sors de l' av_seek_frame, de sorte qu'il joue tout simplement à travers les images de la séquence, il fonctionne.

Était-ce utile?

La solution

Remplacer cette--

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

avec cette--

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

(Mise en garde:Les docs pour avformat_seek_file dire:"Cela fait partie de la nouvelle chercher de l'API qui est encore en construction.Donc n'utilisez pas encore.Il peut changer à tout moment, ne vous attendez pas ABI compatibilité encore!")

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top