Hi, I did a workaround as the following:
I seek and read a packet frame, if packet has pts higher than my target I seek 10ms behind the original target and check again, I keep this until I get a pts smaller than my target pts. This is a dirty workaround and so far it works fine but I am open to any other suggestions from the authors or anyone that wants to help, thank you! Kind regards. On Sun, Mar 7, 2021, 17:10 ilkercan Kaya <[email protected]> wrote: > 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".
