Home > Suggestions > Easy frame by frame navigation

Easy frame by frame navigation

Oct 18, 2017
Mistralys wrote
Hello,

Reviewing the Media Player SDK for an application we are working on, we noticed that there is no PreviousFrame() method. We need our users to be able to navigate frame by frame in both directions, so we tried reversing the playback and then using the ReversePlayback_PreviousFrame() method, but this is not practical, and in our tests often did not work as expected when quickly navigating forwards and backwards.

We would suggest adding a PreviousFrame() method that does not require reversing the playback.

Regards,

Mistralys.
New
0
Vote
Reply
3 Answers
Oct 19, 2017
Roman Minyaylov agent wrote
Most of codecs do not support it. That's a problem. We using caching, but it's ugly way as you told. You can call Position_Set methods as alternative, to go back.
Oct 19, 2017
Mistralys wrote
Hi Roman,

I thought there was a reason behind this :) Still, having a PreviousFrame() method would be great, if it can take care of all the things needed to make it work. With codecs that do not support it, the performance would possibly not be great, or it would not work at all, but that way developers would not have to manually handle the codec specifics. If the drawbacks are well documented, this should not be an issue.

Having a way to find out if the currently playing media supports seeking backwards could make it possible to adjust the UI and inform the user as needed. A boolean media player property like SeekBackwardsAllowed for example would be helpful. Maybe an event telling you when the cache has completed too.

Also, having a dedicated method would make the API more stable if the internals to seek backwards should change.

Finally, having a NextFrame() method makes me expect there to be a PreviousFrame() method.

Regards,

Mistralys.
Oct 19, 2017
Roman Minyaylov agent wrote
Right now only Mpeg-2 decoder from MS support this feature, and only for DVD playback. No common API for this feature in Directshow. So, I suggest to use Position_Set for now.