• Skip to content
  • Skip to primary sidebar
  • Skip to footer

Foliovision

Main navigation

  • Weblog
    • FV Player
    • WordPress
    • Video of the Week
    • Case Studies
    • Business
  • About
    • Testimonials
    • Meet the Team
    • We Support
    • Careers
    • Contact
    • Pricing
  • Products
  • Support
    • FV Player Docs
    • Pro Support
  • Login
  • Basket is empty
Affordable VAST/VPAID for Wordpress has arrived. Serve ads with your videos starting today!
    • Docs
      • Installation
      • Changelog
    • FAQ
    • Support
      • Free Support
      • Pro Support
    • PRO

    Video Position Saving

    With FV Player’s Remember Video Position setting the viewer video position is stored in database if the user is logged in. Full description of this setting can be found in: How To Use Video Position Saving

    This article describes how to work with FV Player’s video position data for you custom integrations.

    • Data Structure
    • PHP Functions
    • Legacy Shortcodes

    Data Structure

    Here’s how to access this data so that you can potentially build you own custom integrations with FV Player.

    The fv_wp_flowplayer_position_* user meta key stores the last video position. The value is in seconds:

    $video_position = get_user_meta( get_current_user_id(), 'fv_wp_flowplayer_position_'.$video_id, true );

    The fv_wp_flowplayer_saw_* user meta key remembers if the user saw the whole video or not:

    $saw_the_video = get_user_meta( get_current_user_id(), 'fv_wp_flowplayer_saw_'.$video_id, true ) );

    Since this information is stored for each video, it’s a bit tricky to figure out which video is used in any given player or a post.

    Here’s how to loop through the player videos:

    $player = new FV_Player_Db_Player( $player_id );
    if( $player && $player->getIsValid() ) {
      $videos = $player->getVideos();
      foreach( $videos AS $video ) {
        echo "<p>Video #".$video->getId()." has duration of ".$video->getDuration().".</p>
    n";
      }
    }

    If you are showing a post, it’s also possible to obtain the videos which belong to players embedded in the post:

    global $wpdb;
    $videos_in_this_post = $wpdb->get_results( $wpdb->prepare( "
    SELECT v.id AS id, vm.meta_value AS duration FROM
      {$wpdb->prefix}fv_player_players AS p
    JOIN {$wpdb->prefix}fv_player_playermeta AS pm
      ON p.id = pm.id_player
    JOIN {$wpdb->prefix}fv_player_videos AS v
      ON FIND_IN_SET(v.id, p.videos) 
    JOIN {$wpdb->prefix}fv_player_videometa AS vm
      ON v.id = vm.id_video
    WHERE
      pm.meta_key = 'post_id' AND
      pm.meta_value = %d AND
      vm.meta_key = 'duration'", $post_id ) );
    
    foreach( $videos_in_this_post AS $video ) {
      echo "<p>Video #".$video->id." has duration of ".$video->duration.".</p>
    n";
    }

    The query is a bit tricky, it gets the videos for which:

    • the player has a playermeta key post_id with value matching your $post_id
    • the video must be among the player’s videos IDs
    • the video must have the duration stored in videometa table

    This way you know the video ID, its duration and you can obtain user position in that video using get_user_meta() as shown above.

    PHP Functions

    The above structure is not exactly simple, so FV Player provides ready-to-go functions to get a list of the watched video IDs or the post IDs where they belong.

    function fv_player_get_user_watched_video_ids( $args = array() )

    Gives back an array of video IDs, or array of video progress details.

    Parameters

    $args array Optional

    • count int Number of items to get
    • full_details bool Should it return full details about the video progress?
    • include string Get only “unfinished” or “finished” videos.
    • post_type string Post type where the video is embed
    • user_id int User ID to operate on, defaults to logged in user.

    Return

    array Array of video IDs, or array of video progress details.

    Example when using $args = array( 'full_details' => true ):

    array(
      1 => array(
        'type' => 'unfinished',
        'message' => 'Watched until 00:30',
        'player_id' => 1,
        'post_id' => 100,
        'time' => '30'
      ),
      10 => array(
        'type' => 'finished',
        'message' => 'Saw whole video',
        'player_id' => 8,
        'post_id' => 120
      )
    )

    function fv_player_get_user_watched_post_ids( $args = array() )

    Get post IDs where the user has watched a video.

    Parameters

    Same as fv_player_get_user_watched_video_ids().

    Return

    array Array of post IDs where the user has a video that he watched.

    Legacy shortcodes

    If you are using shortcodes like [fvplayer src="https://video-cdn.site.com/course-1/lesson-1-1.mp4"] then it’s a bit tricky.

    The video position is then stored for the video file name. If it’s a HLS stream, it takes the folder name. So these must be unique for this feature to work reliably.

    So the position in https://video-cdn.site.com/course-1/lesson-1-1.mp4 will be stored as fv_wp_flowplayer_position_lesson-1-1 and https://video-cdn.site.com/course-1/lesson-1-1/index.m3u8 will be stored as fv_wp_flowplayer_position_lesson-1-1 too.

    Reader Interactions

    Primary Sidebar

    For Developers

    1. Why FV Player?
    2. FAQ
    3. Creating and Managing Playlists
    4. Advanced features
    5. Video Security
    6. Troubleshooting
    7. Tools
    8. Analytics
    9. Audio Player
    10. Live Streaming
    11. Download | Buy
    12. Getting Started
    13. Licensing and Account
    14. Setting Screens
    15. Video Hosting
    16. Video Membership, Pay Per View and eLearning
    17. Video Advertising
    18. FV Player VAST/VPAID
    19. Casting Options
    20. For Developers
      1. FV Player 8 Changes
      2. FV Player Database
      3. Lightbox Customizations
      4. List of Shortcode Parameters
      5. Video Custom Fields
      6. AMP
      7. Minify Plugins
      8. API | Programmer's Guide
      9. JavaScript Guide
      10. Dynamic Content Loading
      11. Video Position Saving
      12. Changelog
      13. How to add your own URL token signing mechanism
      14. How to change FV Player Translations and Labels
    21. FV Player Demos
    22. Additional Services
    23. Legal

    Footer

    Our Plugins

    • FV WordPress Flowplayer
    • FV Thoughtful Comments
    • FV Simpler SEO
    • FV Antispam
    • FV Gravatar Cache
    • FV Testimonials

    Free Tools

    • Pandoc Online
    • Article spinner
    • WordPress Password Finder
    • Delete LinkedIn Account
    • Responsive Design Calculator
    Foliovision logo
    All materials © 2025 Foliovision s.r.o. | Panská 12 - 81101 Bratislava - Slovakia | info@foliovision.com
    • This Site Uses Cookies
    • Privacy Policy
    • Terms of Service
    • Site Map
    • Contact
    • Tel. ‭+421 2/5292 0086‬

    We are using cookies to give you the best experience on our website.

    You can find out more about which cookies we are using or switch them off in .

    Powered by  GDPR Cookie Compliance
    Privacy Overview

    This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.

    Necessary Cookies

    Strictly Necessary Cookie allow you to log in and download your software or post to forums.

    We use the WordPress login cookie and the session cookie.

    If you disable this cookie, we will not be able to save your preferences. This means that every time you visit this website you will need to enable or disable cookies again.

    Support Cookies

    Foliovision.com uses self-hosted Rocket.chat and self-hosted Freescout support desk to provide support for FV Player users. These cookies allow our visitors to chat with us and/or submit support tickets.

    We are delighted to recommend self-hosted Rocket.chat and especially Freescout to other privacy-conscious independent publishers who would prefer to self-host support.

    Please enable Strictly Necessary Cookies first so that we can save your preferences!

    3rd Party Cookies

    This website uses Google Analytics and Statcounter to collect anonymous information such as the number of visitors to the site, and the most popular pages.

    Keeping this cookie enabled helps us to improve our website.

    We reluctantly use Google Analytics as it helps us to test FV Player against popular Google Analytics features. Feel free to turn off these cookies if they make you feel uncomfortable.

    Statcounter is an independent Irish stats service which we have been using since the beginning of recorded time, sixteen years ago.

    Please enable Strictly Necessary Cookies first so that we can save your preferences!