Hi James, Thank you for your help!
I tried your code and sadly the issue still persists. I am trying to seek an ogg audio file. Maybe my code is faulty even though I debugged and the first frame's timestamp is greater than my target ts. On Sat, Mar 6, 2021 at 11:42 PM James Crisafulli <[email protected]> wrote: > > On Sat, 6 Mar 2021 at 00:52, ilkercan Kaya <[email protected]> wrote: > >> Hi Everyone, >> >> Anyone kindly wanting to help me on this matter? I am really stuck. In >> case of my question being vague, I can reword it. Please let me know. >> >> Kind regards. >> >> >> On Wed, Mar 3, 2021, 19:31 ilkercan Kaya <[email protected]> wrote: >> >>> In case this got lost, I'm kindly replying to this thread. >>> >>> On Sun, Feb 21, 2021, 04:20 ilkercan Kaya <[email protected]> >>> wrote: >>> >>>> Hello Everyone, >>>> >>>> I am trying to seek my audio ogg file with the following: >>>> >>>> int64_t targetPts = av_rescale_q(seekTimeMicro, AV_TIME_BASE_Q, >>>> streamTimeBase); >>>> >>>> av_seek_frame(avFormatContext, streamInfoIndex, targetPts, >>>> AVSEEK_FLAG_BACKWARD); >>>> >>>> >>>> This works all fine. Most of the time AVSEEK_FLAG_BACKWARD makes sure >>>> that the stream is seeked to a time before targetPts. However, there are >>>> times the opposite happens, seeking a time after targetPts. I can see this >>>> with the first frame I request from avcodec_receive_frame() having pts >>>> (avFrame->pts) greater than my targetPts. I need to ensure that the first >>>> frame I receive is always smaller than my targetPts. (it's an overhead in >>>> my system, long story). >>>> >>>> I read it that here >>>> <https://stackoverflow.com/questions/20734814/ffmpeg-av-seek-frame-with-avseek-flag-any-causes-grey-screen>: >>>> "It appears that, for some reason, av_seek_frame() using >>>> AVSEEK_FLAG_BACKWARD returns the next keyframe when the frame that I am >>>> seeking is the one directly before this keyframe. Otherwise it returns the >>>> previous keyframe (which is what I want).". I suspect that this is the >>>> case. However, this post is too old so it might be outdated. >>>> >>>> Could you help me? >>>> Thank you! >>>> >>>> >>>> _______________________________________________ >> Libav-user mailing list >> [email protected] >> https://ffmpeg.org/mailman/listinfo/libav-user >> >> To unsubscribe, visit link above, or email >> [email protected] with subject "unsubscribe". > > > > Hi Ilkercan, > > I wanted to share what I used to seek so that the timestamp will be behind > the one you ask for. > I used this to implement a video player where when you seek, the timestamp > will be behind what you're looking for, then I can loop decode until the > requested PTS precisely. > Caveat: this worked for me for video, but may not work for you for audio. > In my use case I discarded the audio packets. > I used this API which is currently discouraged (not sure when it will be > completed, it has been saying that comment since 2.8 or even before): > https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/avformat.h#L2362. > I couldn't get the same results with av_seek_frame. > > The code: > > int64_t streamTimestamp = YOUR_STREAM_TIMESTAMP_TO_SEEK_TO; > int flags = 0; > // The idea is that we ask to get the low bound keyframe. This way we > always get the keyframe before our desired one. > // Set min_ts to 0, max to your ts, ts to your ts. > int ret = avformat_seek_file(formatCtx, YOUR_STREAM_INDEX, 0, > streamTimestamp, streamTimestamp, flags); > > Hope it is useful. > - James > _______________________________________________ > Libav-user mailing list > [email protected] > https://ffmpeg.org/mailman/listinfo/libav-user > > To unsubscribe, visit link above, or email > [email protected] with subject "unsubscribe".
_______________________________________________ Libav-user mailing list [email protected] https://ffmpeg.org/mailman/listinfo/libav-user To unsubscribe, visit link above, or email [email protected] with subject "unsubscribe".
