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
Note: Starting with FV Player 8 we are using custom database tables for video position storing. It no longer relies on wp_usermeta
. Documentation coming soon.
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 getfull_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 embeduser_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.