YouTip
Home
JavaScript
PHP
Python3
HTML
C#
Python
Java
PyTorch
Linux
C
jQuery
CSS
XML
jQuery UI
Bootstrap
C++
Angular
HTML DOM
Redis
Web Building
Home
>
HTML
>
Av Prop Buffered
Av Prop Buffered
π 2026-06-14 | π HTML
## HTML Audio/Video DOM: `buffered` Property The `buffered` property is a read-only property of HTML `
` and `
` elements. It returns a `TimeRanges` object, which represents the portions of the media resource that have been downloaded and cached (buffered) by the browser. Because media files are often streamed or downloaded progressively, the browser may buffer multiple non-contiguous segments of a video or audio fileβespecially if the user skips forward or backward in the timeline. The `buffered` property allows developers to track these buffered segments in real time. --- ## Syntax ```javascript let timeRanges = mediaElement.buffered; ``` ### Return Value The property returns a **`TimeRanges`** object. This object contains the following properties and methods: | Property / Method | Return Type | Description | | :--- | :--- | :--- | | `length` | `Number` | Returns the total number of buffered time ranges (segments). | | `start(index)` | `Number` | Returns the start time (in seconds) of the buffered range at the specified index. | | `end(index)` | `Number` | Returns the end time (in seconds) of the buffered range at the specified index. | > **Note:** The index for the buffered ranges is zero-based. The first buffered range is accessed at index `0`. --- ## Code Examples ### Example 1: Basic Usage The following example retrieves the start and end times of the very first buffered segment of a video. ```javascript // Select the video element const myVideo = document.getElementById("video1"); // Check if there is at least one buffered range if (myVideo.buffered.length > 0) { const startSeconds = myVideo.buffered.start(0); // Start of the first range const endSeconds = myVideo.buffered.end(0); // End of the first range console.log(`First buffered segment: Start = ${startSeconds}s, End = ${endSeconds}s`); } else { console.log("No media has been buffered yet."); } ``` ### Example 2: Tracking All Buffered Segments If a user skips around a video, the browser might buffer multiple disconnected segments. You can loop through the `TimeRanges` object to see all buffered parts: ```javascript const myVideo = document.getElementById("video1"); // Listen for the 'progress' event to monitor buffering updates myVideo.addEventListener("progress", () => { const bufferedRanges = myVideo.buffered; console.log(`Total buffered segments: ${bufferedRanges.length}`); for (let i = 0; i < bufferedRanges.length; i++) { const start = bufferedRanges.start(i); const end = bufferedRanges.end(i); console.log(`Segment [${i}]: ${start.toFixed(2)}s to ${end.toFixed(2)}s`); } }); ``` ### Example 3: Calculating Buffer Percentage You can use the `buffered` property to calculate what percentage of the total video duration has been buffered. ```javascript const myVideo = document.getElementById("video1"); myVideo.addEventListener("progress", () => { if (myVideo.duration > 0 && myVideo.buffered.length > 0) { // Get the end time of the last buffered range const lastBufferedIndex = myVideo.buffered.length - 1; const bufferedEnd = myVideo.buffered.end(lastBufferedIndex); // Calculate percentage const percentBuffered = (bufferedEnd / myVideo.duration) * 100; console.log(`Buffered: ${percentBuffered.toFixed(1)}%`); } }); ``` --- ## Technical Considerations ### 1. Multiple Buffered Ranges When a user clicks ahead on the timeline (seeking), the browser stops downloading the current segment and starts downloading from the new timestamp. This creates a gap, resulting in multiple buffered ranges (i.e., `buffered.length` will be greater than `1`). ### 2. The `progress` Event To monitor buffering progress dynamically, always bind your logic to the HTML5 media **`progress`** event. This event fires periodically as the browser downloads more media data. ### 3. Error Prevention Always check if `buffered.length > 0` before calling `buffered.start(index)` or `buffered.end(index)`. If you attempt to access an index that does not exist (e.g., calling `start(0)` when nothing is buffered yet), the browser will throw an `IndexSizeError` DOM exception. --- ## Browser Compatibility | Chrome | Edge / IE | Firefox | Safari | Opera | | :---: | :---: | :---: | :---: | :---: | | Yes | Edge (All) / IE 9+ | Yes | Yes | Yes | *Note: Internet Explorer 8 and earlier versions do not support the `buffered` property or HTML5 audio/video elements.*
β Av Prop Controller
Av Prop Autoplay β
π Categories
β‘ JavaScript
(1589)
π PHP
(872)
π Python3
(810)
π HTML
(691)
βοΈ C#
(650)
π Python
(594)
β Java
(552)
βοΈ PyTorch
(534)
π§ Linux
(472)
βοΈ C
(432)
π¦ jQuery
(406)
π¨ CSS
(377)
π XML
(259)
π¦ jQuery UI
(231)
π― Bootstrap
(220)
βοΈ C++
(215)
π °οΈ Angular
(205)
π HTML DOM
(201)
π΄ Redis
(188)
π Web Building
(142)
π Vue.js
(141)
π R
(131)
πΌ Pandas
(124)
ποΈ SQL
(105)
βοΈ Docker
(86)
βοΈ TypeScript
(73)
βοΈ Highcharts
(70)
π AI Agent
(70)
βοΈ React
(68)
π Node.js
(65)
βοΈ Machine Learning
(60)
π Git
(59)
π΅ Go
(58)
π Markdown
(58)
π’ NumPy
(55)
π§ͺ Flask
(54)
βοΈ Scala
(53)
ποΈ SQLite
(52)
π JSTL
(52)
βοΈ VS Code
(51)
π MongoDB
(49)
π Perl
(48)
π Ruby
(47)
π Matplotlib
(47)
βοΈ Uncategorized
(46)
π Swift
(46)
ποΈ PostgreSQL
(46)
βοΈ Data Structures
(46)
π Playwright
(46)
π iOS
(45)
ποΈ MySQL
(44)
βοΈ LangChain
(43)
π FastAPI
(40)
βοΈ Ionic
(38)
π Design Patterns
(37)
βοΈ Eclipse
(37)
π¨ CSS3
(34)
π Lua
(34)
βοΈ Codex
(34)
πΈ Django
(32)
βοΈ OpenCV
(32)
π Rust
(31)
π JSP
(31)
βοΈ Claude Code
(31)
π Pillow
(30)
βοΈ OpenCode
(28)
π AI Skills
(27)
π Flutter
(26)
π Maven
(26)
π¨ Tailwind CSS
(25)
π§ TensorFlow
(25)
π Servlet
(24)
π Dart
(23)
π Assembly
(23)
βοΈ Memcached
(22)
βοΈ SVG
(22)
βοΈ Electron
(22)
π NLP
(22)
π Regex
(21)
π Android
(20)
π£ Kotlin
(19)
π Julia
(19)
π SOAP
(17)
π Selenium
(17)
π PowerShell
(17)
π Sass
(16)
π HTTP
(16)
π Zig
(15)
π AI
(15)
π AJAX
(14)
π Swagger
(14)
βοΈ Scikit-learn
(13)
βοΈ ECharts
(13)
βοΈ Chart.js
(13)
βοΈ Cursor
(13)
βοΈ SciPy
(12)
π RDF
(12)
π Ollama
(12)
π Next.js
(12)
π Plotly Dash
(12)
π JSON
(11)
π RESTful API
(11)
π WSDL
(9)
βοΈ CMake
(8)
π Firebug
(7)
π Nginx
(6)
βΈοΈ Kubernetes
(6)
π Jupyter
(6)
π LaTeX
(4)
π UniApp
(4)
ποΈ SQL Server
(1)