npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

web-media-playback

v1.0.0

Published

Retrieve playback and buffering information about audio or video playing in the browser

Downloads

6

Readme

web-media-playback

stable

Retrieve playback and buffering information about audio or video playing in the browser. Easily makes it possible to build your own media controls.

Usage

NPM

playback = Playback([media])

Creates a new playback instance. Optionally, you can pass a media object to use on creation. This should be an instance of Audio, HTMLAudioElement or HTMLVideoElement.

const Playback = require('web-media-playback')

const audio = new window.Audio()
const playback = Playback(audio)

audio.src = 'yay.mp3'

playback.info()

Retrieves playback and buffering information about the selected media. The data returned should look something like this:

{
  playing: true,
  loaded: true,
  ready: true,
  duration: 217.324884,
  current: 25.3842934,
  buffer: 180.923398,
  buffered: [[0, 180.923398]],
  playback: [[0, 25.3842934]],
  seekable: [[0, 217.324884]]
}

Note that buffered, playback and seekable are lists of time ranges — each element is a [start, stop] array, and there can be more than one element for each of these metrics. For example:

{
  playback: [[0, 25], [35, 45]]
}

The above would occur if:

  1. The media started at 0 seconds.
  2. The media played for 25 seconds.
  3. At that point, the media was manually seeked to 35 seconds.
  4. And .info() was then called 45 seconds into the audio/video.

info.playing

A boolean reflecting whether or not the media is currently playing.

info.loaded

A boolean reflecting whether or not the media is loaded at all.

info.ready

A boolean reflecting whether or not the media is ready to play.

info.duration

The total duration of the media, in seconds.

info.current

The current playback time, in seconds.

info.buffer

An approximation of how far the media has been buffered. Intended for convenience — use info.buffered for more exact metrics.

info.buffered

A list of time ranges displaying the parts of the media that have been buffered. Note that this may be split up into multiple ranges if you're seeking through the video quickly enough.

info.playback

A list of time ranges that have been played at least once in the current session.

info.seekable

A list of the seekable time ranges in the current media. This should almost always be [[0, info.duration]].

playback.use(media)

Changes the currently observed media. You can use this when swapping songs/videos to maintain the existing instance, and future calls to .info() will be updated as soon as the media is ready.

playback.dispose()

Cleans up any external references for better garbage collection. After calling this, .info() will no longer be updated

See Also

License

MIT, see LICENSE.md for details.