AV_SEEK_FRAME 코덱이 P-FRAMES를 사용하면 AVCODEC_DECODE_VIDEO2를 중단합니다

StackOverflow https://stackoverflow.com/questions/6084921

  •  09-09-2020
  •  | 
  •  

문제

P-Frames로 인코딩 된 비디오에서 찾는 방법을 이해하려고 노력하고 있습니다 (예 : H.264) - 지금은 모든 프레임이 키 프레임 인 코덱으로 인코딩 된 비디오에서 탐색하는 방법을 알고 있습니다 (예 : MJPEG 짐마자

타임 스탬프가 주어지면 궁극적으로 해당 시간 소인의 프레임을 재생해야합니다. 그러나 지금은 시간 소인 근처의 키 프레임을 재생하려고 노력하고 있습니다. 그래서, 처음 -

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

그런 다음 av_read_frame를 포함하여 일부 개재 코드입니다. 그 다음 -

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

관찰 :

  • 일부 비디오의 경우이 작업이 작동합니다. 다른 기타를 위해 avcodec_decode_video2 오류 (음수)를 반환합니다. 작업 비디오의 예 : 여기 . 작동하지 않는 비디오의 예 : 여기 .

  • MJPEG 동영상의 경우이 작업을 수행합니다.

  • av_seek_frame를 꺼내는 경우, 프레임을 순서대로 수행하면 작동합니다.

도움이 되었습니까?

해결책

바꾸기 -

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

-

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

(Caveat : avformat_seek_file 용 Docs는 "이것은 아직 공사중인 새로운 Seek API의 일부입니다. 따라서 아직 사용하지 마십시오. 언제든지 변경 될 수 있습니다. 아직 ABI 호환성을 아직 기대하지 마십시오.")

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top