Built and refined continuously since 2017, h265web.js PRO delivers mature browser playback with broad feature coverage and strong performance.
It covers HEVC/H.265, AVC/H.264, AV1, WebRTC, live streaming, VOD, WebCodec, WASM decoding, MediaInfo, snapshot, fullscreen, seek and multi-instance playback.
Recommended media server: ZLMediaKit - a strong streaming server/framework for live and VOD delivery.
If h265web.js helps your project, giving it a GitHub star is a simple way to support the work and help more developers discover it.
| New capability | What you can do | Start here |
|---|---|---|
| Stable volume / audio leveling | Balance quiet and loud passages; switch during playback while preserving user volume and mute. Off by default, with observable processing state | Open player · Enhancement guide |
| Experimental SDR super resolution | Enhance eligible SDR pictures within display and GPU limits. Demos start one available step up, allow Automatic, and show actual output or bypass reasons. Off by default | Try SR · Models and licenses |
| AI integration and troubleshooting skills | Build or integrate players with plain JS, React, Vue, Svelte, Angular, Next and Nuxt; handle lifecycle, audio, SR and playback diagnosis | Install and use the skills |
- Follow the skill installation and usage guide to install the complete skill folders in your coding assistant. Codex users can also use the guide's
$skill-installerprompt. - Choose h265web-bootstrap to build/integrate a player, or h265web-troubleshoot for playback errors, black pictures, missing audio or inactive SR.
- Send this to your assistant and provide your framework, media URL and SDK location:
Use $h265web-bootstrap to integrate h265web.js into my React project.
Add play/pause, stable-volume and experimental SDR super-resolution switches.
SR should start one available step up. Handle unmount/rebuild and verify actual playback.
Read the project's configuration for the media URL and SDK location first.
See all Features · Read the latest Update Log
- GitHub: https://github.com/numberwolf/h265web.js
- Docs (Website: How to use): https://h265web.com/markdown-docs/get-started.php
- Docs (Local: How to use): README-HowToUse.MD
- QA WIKI (FAQ): English · 中文
- Website: https://h265web.com/
- Public Demo: https://h265web.com/player.php
- Playback enhancements: runtime controls and skills
- GitHub: https://github.com/numberwolf/h265web.js
- Email: porschegt23@foxmail.com
- QQ Group Number: 925466059 (recommended)
- QQ: 531365872
- Discord: numberwolf#8694
- Wechat: numberwolf11
- Public Demo: https://h265web.com/player.php
- WebRTC WHIP Publish Demo: webrtc-publish.html
- WebRTC WHEP Playback Demo: webrtc-play.html
- Docs (Website: How to use): https://h265web.com/markdown-docs/get-started.php
- Docs (Local: How to use): README-HowToUse.MD
Loading static/h265web.js prints [h265web.js] SDK script loaded: https://github.com/numberwolf/h265web.js with console.info. This message appears without starting WASM; WASM startup output appears only when playback initializes the WASM runtime.
- Browser playback of HEVC/H.265, AVC/H.264 and AV1
- VOD and live playback in one SDK
- Protocol validation for MP4 / MOV / MKV / FLV / MPEG-TS / M3U8 / HLS / HTTP-FLV / WS-FLV / HTTP-TS / WS-TS / WebRTC / HEVC ES
- Browser-side player projects that need seek, playbackRate, fullscreen, snapshot, MediaInfo, multi-instance playback and multi-thread decode
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|---|---|---|---|---|---|---|---|
| Temu | Kwai | iQiYi | Baidu | Baidu Cloud | Beijing Shutong Mofang | Hangzhou Chengzhi Tianyang | Nanjing Yiyi |
![]() |
![]() |
![]() |
|||||
| Shandong World | Shanghai Unicom | Xi'an Sihua |
| Feature | Feature | Feature | Feature |
|---|---|---|---|
| HLS(LIVE) | M3u8(VOD) | MP4(VOD) | FLV(VOD) |
| HTTP-FLV(LIVE) | HTTP-TS(LIVE) | WS-FLV(LIVE) | WS-TS(LIVE) |
| MPEG-TS(VOD) | MPEG-PS(VOD) | AV1(Chrome) | MOV(H.265) |
| HTTP-HEVC | WS-HEVC | MKV(HEVC) | AAC(MAIN/LC) |
| Multi-Thread (only: https+nginx conf) |
Single-Thread | G711A(HTTP-FLV) | G711U(HTTP-FLV) |
| MediaInfo | HEVC/H.265 | AVC/H.264 | Hardware decoder (FLV/HTTP-FLV/MP4) |
![]() |
|||
| WebRTC(LIVE) | VR360(VOD/LIVE) | Stable volume / audio leveling Runtime switch · off by default |
Experimental SDR super resolution Starts one step up · conditional |
| AI player integration skill Seven frontend templates |
AI playback troubleshooting skill Media / network / audio / SR |
| h265web.js | mpeg.js (ts demuxer) |
h265web.js's H.265 decoder | LICENSE |
|---|---|---|---|
| h265web.js | MPEG-Demuxer.js | h265web.js-wasm-decoder | CYL_Free-1.0 LICENSE-Free_CN.MD |
- Protocol box
| protocol | model | support | desc |
|---|---|---|---|
| mp4 | Video on demand | Y | ---- |
| mov | Video on demand | Y | HEVC/H.265 |
| mkv | Video on demand | Y | HEVC/H.265 |
| av1 | Video on demand | Y | Chrome |
| mpeg-ts | Video on demand | Y | ---- |
| mpeg-ps | Video on demand | Y | ---- |
| m3u8 | Video on demand | Y | ---- |
| hls | Live | Y | ---- |
| flv | Video on demand | Y | ---- |
| http-flv | Live | Y | CodecID=12 |
| http-ts | Live | Y | ---- |
| http-hevc | Live | Y | ---- |
| http-hevc | Video on demand | Y | ---- |
| websocket-hevc | Live | Y | ---- |
| websocket-flv | Live | Y | ---- |
| websocket-ts | Live | Y | ---- |
| WebRTC / WHEP | Live | Y | Standard HTTP signaling endpoint; recommended for playback |
| webrtc:// | Live | Y | SDK-compatible URL converted to WHEP signaling |
| ZLM WebRTC API | Live | Y | ZLMediaKit private signaling endpoint |
| HEVC/H.265 | Video on demand | Y | ---- |
| HEVC/H.265 | Live | Y | ---- |
| AVC/H.264 | Video on demand | Y | ---- |
| AVC/H.264 | Live | Y | ---- |
- Codec
| Codec | Support | Desc |
|---|---|---|
| AVC/H.264 | Y | ---- |
| HEVC/H.265 | Y | ---- |
| AAC | Y | ---- |
| G711A | Y | HTTP-FLV |
| G711U | Y | HTTP-FLV |
| AV1 | Y | Chrome |
- Features
| Feature | Support | Desc |
|---|---|---|
| Hardware-Decode | Y | For Chrome/Safari etc... |
| WebCodec | Y | Browser-supported hardware path |
| SIMD | Y | WASM + SIMD acceleration path |
| MSE | Y | Browser MSE playback path |
| Native WebRTC | Y | WHEP, webrtc:// compatibility URL and ZLM private signaling |
| WebRTC Auto Routing | Y | URL recognition in the SDK; core: 'webrtc' can force the route |
| WebRTC Partial A/V | Y | Supports AV, video-only and audio-only negotiated results |
| VR360 video playback (ERP source) | Y | Drag to look around a 360° VOD/live source; use an SDK build with the VR APIs |
| AI integration and troubleshooting skills | Y | Install and use; seven frontend templates, resources/lifecycle integration and evidence-based diagnosis |
| Stable volume | Optional | Runtime switch; off by default, preserves user volume/mute and reports actual processing |
| Experimental SDR super resolution | Optional | Runtime requests; demos start one step up with Automatic available; reports actual output and availability |
| Video on demand | Y | ---- |
| Live | Y | ---- |
| Seek | Y | ---- |
| AccurateSeek | Y | ---- |
| Cover Image | Y | ---- |
| Playing with download | Y | ---- |
| Volume | Y | ---- |
| Play | Y | ---- |
| Pause | Y | ---- |
| ReStart | Y | ---- |
| PauseWithCoverImage | Y | ---- |
| 1080P | Y | ---- |
| 720P | Y | ---- |
| Create multi players | Y | ---- |
| Play without Audio | Y | ---- |
| Cache process | Y | ---- |
| Open Fullscreen | Y | ---- |
| Exit Fullscreen | Y | ---- |
| Play frame by frame | Y | ---- |
| Snapshot | Y | ---- |
| Autoplay | Y | HTTP-FLV 265+264 HTTP-TS 265+264 HLS 264 |
| Cache Length | Y | MP4 265 |
| Multi-thread decoder | Y | (HTTPS+ Conf NGINX) |
| Single-thread decoder | Y | compatible |
| Get MediaInfo | Y | ---- |
| Get Codec Param | Y | Video&Audio |
| Get Media Duration | Y | Video&Audio |
| Get Video Size | Y | ---- |
| Get Video FPS | Y | ---- |
| Get Audio SampleRate | Y | ---- |
| Chase Frame | Y | HTTP-FLV(no audio) |
| PlayBackRate | Y | H.264/H.265/AV1 |
| Resize | Y | ---- |
| Get SEI Data | Y | ---- |
WHIP is the standard WebRTC HTTP ingestion protocol, and WHEP is the standard WebRTC HTTP egress protocol. h265web.js is a player, so WHEP is the recommended playback input. The HTTP(S) endpoint carries SDP signaling; negotiated media still uses WebRTC ICE/DTLS/SRTP.
- Browser WHIP publish demo: webrtc-publish.html
- h265web.js WHEP playback demo: webrtc-play.html
For ZLMediaKit RTMP-to-WebRTC conversion, set the timestamp policy before testing:
[protocol]
modify_stamp=1
paced_sender_ms=0modify_stamp=1 uses the ZLMediaKit receive clock with smoothing. With modify_stamp=2, some H.264 + AAC RTMP inputs can continue decoding at the expected frame rate while Chrome drops late frames during native WebRTC playout.
The following command publishes the tested H.264 + AAC source to ZLMediaKit. ZLMediaKit then exposes it through WHEP:
ffmpeg -hide_banner -stream_loop -1 -re \
-i /path/to/input.flv \
-vf scale=640:360,format=yuv420p \
-c:v libx264 -preset veryfast -tune zerolatency \
-profile:v baseline -level 3.1 -bf 0 \
-g 25 -keyint_min 25 -sc_threshold 0 \
-c:a aac -profile:a aac_low -ar 44100 -ac 2 -b:a 128k \
-f flv rtmp://127.0.0.1/live/testSupported playback inputs for that stream:
http://127.0.0.1/index/api/whep?app=live&stream=test
webrtc://127.0.0.1/live/test
http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=play
The first URL is standard WHEP and is recommended. webrtc:// is an SDK compatibility URL converted to WHEP. The third URL is specific to ZLMediaKit.
const player = H265webjsPlayer();
player.on_ready_show_done_callback = function () {
console.log('WebRTC first frame ready');
};
player.on_play_time = function (seconds) {
console.log('WebRTC play time', seconds);
};
player.on_error_callback = function (error) {
console.error('WebRTC playback error', error);
};
player.build({
player_id: 'canvas111',
base_url: './static/',
wasm_js_uri: 'h265web_wasm.js',
wasm_wasm_uri: 'h265web_wasm.wasm',
width: 640,
height: 360,
auto_play: false,
ignore_audio: false,
core: 'webrtc'
});
player.load_media('http://127.0.0.1/index/api/whep?app=live&stream=test');Omit core to let the SDK recognize the three WebRTC URL forms automatically. WebRTC uses the existing player lifecycle and callback names; no separate public API is required. Native WebRTC live playback stays at 1x and does not support seek. Standard WebRTC can only receive codecs negotiated by the browser. WebCodecs/WASM fallback for a non-negotiated codec requires the server to implement the optional h265web-rtc-encoded/v1 encoded-media transport.
The PyMKUI integration replaces its Jessibuca playback path for RTMP and TS stream rows with h265web.js. A browser cannot play an rtmp:// URL directly: PyMKUI maps RTMP rows to ZLMediaKit HTTP-FLV (/{app}/{stream}.live.flv) and TS rows to HTTP-TS (/{app}/{stream}.live.ts). It requests the current stream's on_play URL parameters for each attempt and obtains fresh parameters when retrying; one-time authorization tokens must not be reused. Playback starts muted with set_voice(0) while keeping the audio pipeline enabled.
The PyMKUI player defaults to a flat picture. For a real ERP 360° live stream, its 360° mode button calls the SDK's set_projection('erp360') and enables mouse/touch view controls; Reset view calls reset_vr_view(). This is a display choice, not automatic ERP detection or a new codec. The recording manager also uses the SDK for single MP4/WebM files, including manual ERP view switching, pause, seek, playback rate, screenshot and fullscreen. WebM uses the browser's native decoder; it does not fall back to VP8/VP9 software decoding.
HEVC MPEG-TS HLS rows use the SDK. AVC HLS keeps its native path when playback succeeds; native decode/source errors (3/4) trigger one SDK MSE attempt with fresh authorization. HLS-fMP4 HEVC remains unsupported. HTTP-fMP4 and WHEP retain their existing native paths.
Video-only FLV streams use the FLV header's audio flag rather than waiting for a nonexistent audio track. For HTTP-FLV/WebCodec with AAC, startup waits for the first displayed frame and a running AudioContext before aligning the queued audio. This does not change WS-FLV, TS/HLS, VOD or WASM startup.
On HTTP media handled by the demux Worker, on_error_callback now receives an http-transport error with a numeric status when the response is visible. HTTP 401/403/404 are reported without retry, while transient failures have bounded retries; browser CORS failures may only expose status: 0. Releasing or replacing a player aborts its old HTTP request, so a late response cannot revive the previous session. See the English API contract and Chinese API contract.
The SDK includes stable volume, experimental SDR super resolution and two integration/troubleshooting skills. Both playback effects default to off. Independent switches work during playback, with actual state and next actions shown in the panel. Check API availability when integrating an older SDK.
The demo’s stable-volume switch only changes the leveling request; it does not call play or notify a user gesture. If audio remains pending for activation, Play & activate audio is a separate, explicit action that starts or resumes playback through the entry’s play handler. It preserves the user’s volume/mute setting and keeps the playback button state in sync.
| Feature | Integration and scope |
|---|---|
| Stable volume | audio_leveling: 'None' / 'StableVolume'; runtime set_audio_leveling(); inspect get_audio_leveling_state() for actual processing |
| Experimental SDR super resolution | Fixed tiny AN CNN in the same WebGL2 context; super_resolution, set_super_resolution(), get_super_resolution_state(); requires the complete static/models/sr/ directory and license notices |
| Integration skill | h265web-bootstrap: vanilla JS, React, Vue, Svelte, Angular, Next and Nuxt templates and lifecycle handling |
| Troubleshooting skill | h265web-troubleshoot: media/HTTP/browser evidence, actual core selection, feature bypass and redacted reports |
| Setting | Runtime support | When it takes effect |
|---|---|---|
set_audio_leveling('StableVolume' / 'None') |
Supported without waiting for video ready or reloading | When an accessible track and audio graph process audio; inspect status/active |
set_super_resolution({enabled, level, targetKey}) |
Enable/disable and output requests are supported | When frames, SDR, display demand and GPU conditions qualify; an existing C++ renderer may request recreation |
super_resolution.input_color |
Build option | Apply a change through explicit recreation |
Demos initially enable {enabled:true, level:'light', targetKey:null} for the smallest currently available enhanced option. Selecting Automatic sends {enabled:true, level:'standard', targetKey:null}. The SDK’s omitted level default remains standard.
Stable volume measures/processes audio before the user's set_voice(0–1) control. Toggling it does not move the slider or unmute output. Native source security, AudioWorklet, user activation and audio-track availability determine whether it can become active; unavailable paths retain playback and return a reason.
SR defaults to input_color: 'unknown'; declare sdr only for confirmed compatible SDR. At most two aspect-preserving 1.25/1.5/2× candidates require input short side ≤720, output long side ≤1920, short side ≤1080 and ≤2,073,600 pixels, subject to display and GPU budget. A 720p source may offer experimental 900p/1080p candidates; bitrate does not unlock 1440p/4K. Normal high-resolution playback is unaffected by SR limits. HDR/wide gamut, ERP, old WASM without a trustworthy descriptor and unsupported devices bypass. Enabling SR on an existing C++ renderer returns renderer-recreate-required; the user explicitly rebuilds, with no automatic media reload. The engineering model has no production quality, mobile or long-term power approval. Research-only ORT/WebGPU SR backends are not shipped SDK options.
Place <div id="player"></div> in the page. Call notify_user_gesture() and play() from a user click after loading.
const player = H265webjsPlayer();
// Bind business callbacks before build; keep both features opt-in.
const config = { player_id: 'player', width: 960, height: 540,
base_url: './static/', wasm_js_uri: 'h265web_wasm.js',
wasm_wasm_uri: 'h265web_wasm.wasm', ignore_audio: false, auto_play: false };
if (typeof player.set_audio_leveling === 'function' &&
typeof player.get_audio_leveling_state === 'function') config.audio_leveling = 'None';
if (typeof player.set_super_resolution === 'function' &&
typeof player.get_super_resolution_state === 'function')
config.super_resolution = { enabled: false, input_color: 'unknown' };
if (!player.build(config)) throw new Error('build failed');
player.set_voice(0);
player.load_media('./hevc_test_moov_set_head_16s_hvc1.mp4');A true setter return accepts intent only. Inspect leveling status/reason and SR status/reason/output/options rather than equating an enabled switch with actual processing. Copy matching JS/WASM runtime files; SR also needs the complete model directory. See the Playback Enhancements & Skills guide and API docs. On unmount, wait for release(callback) before reusing the container and invalidate late asynchronous work.
The website home and player demos load the website’s current SDK and WASM from the same origin by default. Use ?sdk=cdn only to diagnose the pinned CDN release; remove it to return to the website build. The home demo uses a same-origin SDR sample and an isolated page. Both effects still start off.
The full player and SDK demos accept arbitrary URLs and start in Compatibility mode. Choose Enable software decoding when a path needs WASM/shared memory. This reloads the page with ?isolation=1; Return to compatibility mode removes it. The tab restores URLs, core choices, volume/mute, enhancement switches and requested SR output. The temporary sessionStorage record expires after 10 minutes and is removed after the restore attempt. Playback reconnects; this does not preserve a running decoder or VOD position.
?isolation=1 is a demo hosting contract, not an SDK API or a way to create response headers. The host must send Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp on the isolated document in a secure context; a direct pthread Worker script also needs COEP. The panel checks the real browser environment and reports missing support without repeatedly reloading. Keep SDK/glue/WASM files from the same build, serve WASM as application/wasm, and allow required cross-origin resources through CORS/CORP. In isolated mode, ordinary cross-origin no-CORS video needs CORP; an Access-Control-Allow-Origin header alone does not change its request mode. Compatibility mode retains native playback’s existing request behavior.
SR on a compatible native video does not require the software-decoding switch. Its frame access, SDR declaration, model, output-size and GPU requirements still apply. These page controls do not change the SDK’s core-selection or enhancement algorithms. See the hosting and demo guide.
Use a real monoscopic 360° video (normally a 2:1 equirectangular/ERP source); an ordinary video does not become 360° when you turn on VR. Set projection: 'erp360' to watch it in VR360, or flat for ordinary playback. VR360 keeps the existing decoder and clock; view controls are set_projection(), set_vr_view(), rotate_vr_view(), reset_vr_view() and set_vr_controls(). The current public SDK includes these APIs; when using a cached older bundle, check that they exist. See API Docs and QA WIKI for source, CORS and first-frame checks.
In the local English demo or Chinese demo, type your own URL in Source, or click its arrow to see the local MP4 samples. The list includes H.264 and HEVC VR360 samples; VR360 samples select the ERP view automatically. Use View to switch between ordinary flat and VR360 display while the same video is playing.
- English Docs Home: https://h265web.com/markdown-docs/get-started.php
- Getting Started: https://h265web.com/markdown-docs/get-started.php
- Simple Demo: https://h265web.com/markdown-docs/simple-demo.php
- API Documentation: https://h265web.com/markdown-docs/api-docs.php
- QA WIKI (FAQ): https://h265web.com/markdown-docs/qa-wiki.php
- Donate: https://h265web.com/markdown-docs/donate.php
| Alipay | PayPal | |
|---|---|---|
| - |
- mp4
ffmpeg -i input.mp4 \
-vcodec libx265 -pix_fmt \
-acodec aac -ac 2 -ar 44100 \
-preset medium -maxrate 1000k -bufsize 1000k \
-vtag hvc1 \
-movflags faststart \
-y video.mp4- hls/m3u8 capture
ffmpeg -f avfoundation -i 1:0 \
-q 4 -r 10 \
-filter_complex "scale=1280:720" \
-pix_fmt yuv420p \
-vcodec libx265 \
-ar 22050 -ab 64k -ac 1 -acodec aac \
-threads 4 \
-preset veryfast \
-f segment \
-segment_list test.m3u8 \
-segment_time 5 \
-y /Users/numberwolf/Documents/webroot/VideoMissile/VideoMissilePlayer/res/hls1/v-%03d.ts- mpeg-ts
ffmpeg -ss 20 -t 10 -i ./res/xinxiaomen.mp4 \
-vcodec libx265 -x265-params "bframes=0:keyint=10" -r 24 -filter_complex "scale=720:1280" -preset fast -maxrate 800k -bufsize 800k \
-acodec aac -ar 22050 -ac 1 \
-pix_fmt yuv420p \
-f mpegts -y ./res/veilside2.ts| Update | Content |
|---|---|
| Time | 2026/10/28 |
| - | Added StableVolume audio leveling: runtime controls and observable state; preserves user volume, mute and pause |
| - | Added experimental SDR super resolution: matching models/licenses, one-step-up demo default, Automatic option, actual output/bypass state and explicit recreation when needed |
| - | Added two AI skills: player integration and playback troubleshooting, seven frontend templates, installation steps and ready-to-use prompts |
| - | Unified demo controls: English/Chinese single/multi-instance, WHEP, website home and full-player enhancement switches and status feedback |
| - | Extended PyMKUI integration: live/recording enhancement controls, authorization retries and lifecycle handling; see PR #25 |
| - | Updated delivery guidance: README feature graphics/list, bilingual usage guides and prominent website skill entry; Next template pinned to 16.4.1 |
| Time | 2026/10/14 |
| - | Removed the legacy HLS route and extension runtime files; SDK initialization now needs only the main JS/WASM assets |
| Time | 2026/10/13 |
| - | 0.Fixed MSE FLV startup for video-only streams and aligned HTTP-FLV/WebCodec AAC startup with the first displayed frame and the running audio clock |
| - | 1.Added native WebM VOD routing with explicit capability errors; WebM does not use software fallback |
| - | 2.Extended PyMKUI recording playback with ERP 360° controls and added bounded AVC native-HLS error fallback with fresh authorization |
| Time | 2026/10/11 |
| - | 0.Fixed HTTP demux Worker request cancellation and forwarded visible HTTP status to the existing player error callback, with bounded transient retries |
| - | 1.Integrated ZLMediaKit PyMKUI RTMP/TS rows through HTTP-FLV/HTTP-TS, fresh on_play authorization, muted playback and manual ERP 360° view controls |
| Time | 2026/08/25 |
| - | 0.Added native WebRTC live playback with standard WHEP signaling, webrtc:// compatibility URLs and the ZLMediaKit private WebRTC API |
| - | 1.Added automatic WebRTC URL routing and explicit core: 'webrtc' selection without changing the existing build() and load_media() API |
| - | 2.Added AV, video-only and audio-only negotiated playback, existing lifecycle/error callbacks, release/rebuild and multi-instance isolation |
| - | 3.Added WHIP publish and WHEP playback demos, plus real Chrome regression coverage for WHEP, MP4, HTTP-FLV and HTTP-TS |
| - | 4.Documented the ZLMediaKit modify_stamp=1 requirement for stable RTMP-to-WebRTC A/V timestamps |
| Time | 2026/08/10 |
| - | 0.Added callback-aware HLS mainline routing across Native HLS, MSE, WebCodec and WASM; auto/mainline never enter past-core/ext*, while legacy must be selected explicitly |
| - | 1.Aligned callback contracts across HLS, MP4, FLV and MPEG-TS, including SEI, NAL/frame/render, cache, seek, lifecycle, GPU and A/V-sync callbacks |
| - | 2.Improved HLS master/media playlists, redirects, live sliding windows, discontinuities, codec detection, HEVC samples, keyframes and timestamp handling |
| - | 3.Strengthened seek completion, release/rebuild, worker cleanup, bounded release timeout and multi-instance isolation |
| - | 4.Clarified audio controls: ignore_audio skips the audio pipeline and is not mute; set_voice(0) can be restored with a positive volume |
| - | 5.Updated English/Chinese integration documentation and expanded automated and browser regression coverage |
| Time | 2026/08/03 |
| - | 0.Optimized Auto core selection to prefer native/MSE, then WebCodec, then WASM/SIMD, with controlled fallback |
| - | 1.Improved H.264/H.265 playback with AAC, PCM, G.711A and G.711U audio; unsupported audio no longer downgrades a playable video core |
| - | 2.Fixed repeated backward jumps and frame skipping in HEVC B-frame HTTP-TS and WebSocket-TS live streams by normalizing only the detected abnormal live-TS DTS cadence while preserving CTS reorder information |
| - | 3.Improved player lifecycle cleanup, error fallback and multi-instance stability |
| Time | 2026/03/28 |
| - | 0.Update more powerful version |
| Time | 2022/11/06 |
| - | 0.Update |
| Time | 2022/11/02 |
| - | 0.Update WASM |
| Time | 2022/10/22 |
| - | 0.Support: Hard-Decode for FLV/HTTP-FLV/MP4 |
| - | 1.Support: AVC with Mpeg-TS |
| Time | 2022/09/13 |
| - | 0.Fixed: AVC stream loop buffer error without autoplay |
| Time | 2022/09/12 |
| - | 0.Fixed: hevc url cannot play without text of "http" |
| Time | 2022/08/24 |
| - | 0.Feature: Safari with native player(version>13) |
| Time | 2022/08/23 |
| - | 0.Fixed: Buffer Progress with AVC |
| Time | 2022/08/13 |
| - | 0.Support: Resize |
| Time | 2022/07/27 |
| - | 0.Support: PlayBackRate |
| Time | 2022/07/12 |
| - | 0.Fixed some problem |
| Time | 2022/07/06-10 |
| - | 0.Support g711u (http-flv) |
| - | 1.Fixed: HTTP-FLV(AVC) without Audio |
| Time | 2022/07/01 |
| - | 0.Feature: HTTP-FLV(Without audio) Stream Performance optimizing |
| Time | 2022/06/27 |
| - | 0.Fixed: problem with hls parser |
| Time | 2022/06/26 |
| - | 0.Support g711a (http-flv) |
| - | 1.Fixed 264(avc) flv error with mediainfo |
| - | 2.Support Multi/Single Thread |
| Time | 2022/05/18 |
| - | 0.Support multi-thread decode |
| - | 1.Support mp4's cache length config |
| - | 2.Performance optimizing |
| - | 3.This version is for Beta |
| Time | 2022/05/09 |
| - | 0.Suport play with Websocket 265 raw stream |
| Time | 2022/05/07 |
| - | 0.Fixed:MP4(VOD) retry error |
| - | 1.Support:HEVC raw stream(VOD), create with url |
| - | 2.Support:MKV format |
| Time | 2022/04/21 |
| - | 0.Performance optimizing |
| Time | 2022/04/17 |
| - | New Opensource Free Protocol CYL_Free-1.0 LICENSE-Free_CN.MD |
| Time | 2022/04/14 |
| - | 0.Support Mov File |
| - | 1.Support HTTP-FLV/HTTP-TS/HLS Autoplay |
| - | 2.Performance optimizing of 1080P MP4(VOD) |
| - | 3.Retry of mp4 sniff action |
| - | 4.Support AV1 |
| - | 5.Support Play frame by frame |
| - | 6.Support Video Frame Snapshot |
| Time | 2022/03/28 |
| - | 0.Support MPEG-PS(MPEG1) stream |
| Time | 2022/03/02 |
| - | 0.Fixed h264 FLV(LIVE) can not get resolution info with retry |
| Time | 2022/01/17 |
| - | 0.Fixed ISSUE of HLS 265 OOM Case #108 ![]() |
| - | 1.Fixed ISSUE of HLS Split Rules #105 |
| - | 2.Add New Demo index-debug.html |
| - | 3.Fixed 10+playes of 264 play failed, stack overflow |
| Time | 2021/12/31 |
| - | 0.Add H.264 HTTP-FLV Retry after error |
| Time | 2021/12/24 |
| - | 0.Fixed H.264 HTTP-FLV Some Badcase with callback |
| Time | 2021/12/19 |
| - | 0.Fixed H.264 HLS Callback's problem |
| Time | 2021/12/08 |
| - | 0.Fixed Problem of H.264 MP4 onReadyShowDone Event |
| Time | 2021/12/04 - In the small hours |
| - | 0.Fixed http-flv 265 Render With crash |
| - | 1.Fixed hls problem of fullscreen |
| - | 2.Fixed some bugs |
| Time | 2021/11/29 - Night |
| - | 0.Fixed http-flv retry case and some bugs |
| Time | 2021/11/25 - Night |
| - | 0.Fixed httpflv/ws LIVE ignoreAudio problem |
| Time | 2021/11/23 - Night |
| - | 0.Fixed #90 |
| Time | 2021/11/21 - In the small hours |
| - | 0.Support Websocket-FLV (HEVC/H.265) |
| - | 1.Support Websocket-TS (HEVC/H.265) |
| - | 2.Support HTTP-TS (HEVC/H.265) |
| Time | 2021/11/16 - Evening |
| - | 0.First request, if no response and timeout, then retry 5 times |
| Time | 2021/11/15 - Evening |
| - | 0.HTTP-FLV auto retry when timeout with out packet.(7s) |
| Time | 2021/11/14 - Evening |
| - | 0.Add wasm file of 265mb version(can memory auto grow) |
| - | 1.Add wasm file of 512mb version(can memory auto grow) |
| Time | 2021/11/04 - Evening |
| - | 0.Fixed: release many times with crash |
| Time | 2021/10/26 - Evening |
| - | 0.Fixed some bugs |
| Time | 2021/10/24 - Evening |
| - | 0.Support Codec of AVC/H.264's MP4/HLS/M3u8/FLV/HTTP-FLV play |
| Time | 2021/10/18 - Evening |
| - | 0.Add new example |
| Time | 2021/10/16 - Evening |
| - | 0.Fixed: HTTP-FLV: Mediainfo's codec fault value |
| - | 1.Update example |
| Time | 2021/10/14 - Evening |
| - | 0.Fixed: Mediainfo's codec fault value |
| Time | 2021/10/13 - Evening |
| - | 0.The player compatible with WebIDE develop, split wasm(js) and h265web.js, need include wasm(js) as single |
| Time | 2021/10/12 - Evening |
| - | 0.Fixed: Support HTTP-FLV(HEVC) without fps param |
| Time | 2021/10/09 - In the small hours |
| - | 0.Support HTTP-FLV(HEVC) LIVE, CodecID=12 |
| - | 0.MP4/FLV(VOD) performance optimizing of Seek operation(out of cache area) |
| Time | 2021/09/27 - Evening |
| - | 0.M3u8/MpegTS performance optimizing of Seek operation(out of cache area) |
| Time | 2021/09/25 - In the small hours |
| - | 0.HLS Live Fixed: Crash by OOM |
| - | 1.HLS Live Fixed: MPEG-TS full path |
| - | 2.HLS Live Fixed: Stop by lost stream a moment |
| - | 3.HLS Live Fixed: Stop by unstable network |
| Time | 2021/09/08 - Evening |
| - | 0.Fixed: M3U8 Seek with Decode Failed |
| - | 1.Fixed: Some MP4 Case |
| - | 2.Config update, remove some options, make it auto set |
| Time | 2021/09/07 - Evening |
| - | 0.M3U8 Fixed: some error with parse mpegts file |
| Time | 2021/09/07 - In the small hours |
| - | 0.Bak Player Core - Fixed:MP4/FLV(VOD) Seek BUG can not seek to 0; And performance optimizing for play |
| Time | 2021/08/15 |
| - | 0.H265/HEVC Upgrade Raw Data Player for VOD/LIVE |
| Time | 2021/07/18 |
| - | 0.Upgrade: Player UI Style |
| - | 1.Support: fullscreen & close fullscreen |
| - | 2.Add Event: open/close fullscreen |
| Time | 2021/07/11 |
| - | 0.Fixed: The player compatible with ZLMediaKit + HUAWEI HoloSens Camera LIVE Stream |
| Time | 2021/07/04 |
| - | 0.Fixed: ISSUE#58 (When default player-core's status is caching-frames, can not pause video) |
| Time | 2021/07/01 |
| - | 0.Add example and package.json file |
| Time | 2021/06/27 |
| - | 0.Open Source! |
| - | 1.Support Seek in FLV |
| - | 2.Fixed: Seek problems with bak player core mode |
| - | 3.Add FLV type ,and do not need set player-core |
| Time | 2021/05/30 |
| - | 1.Fixed: Some problem with seek and play(Important) |
| - | 2.Feature: Event/Callback of Video's cover image load finished |
| Time | 2021/05/24 |
| - | 1.FLV VOD Play(In the bak player core mode) |
| Time | 2021/05/21 |
| - | 1.HLS(LIVE:No audio)performance optimizing |
| Time | 2021/05/18 |
| - | 1.HLS(LIVE) performance optimizing and add Audio |
| Time | 2021/05/16 |
| - | 1.MP4(VOD) Fixed:BD265 Mp4 box badcase |
| Time | 2021/05/15 |
| - | 1.Fixed: HLS Play(LIVE) |
| Time | 2021/04/27 |
| - | 1.Fixed: Some video playing with gray block(mosic) |
| - | 2.Fixed: Some video when playing first gop with gray block(mosic) |
| Time | 2021/04/22 |
| - | 1.Bak player core mode(test) support: seek |
| - | 2.Bak player core mode(test) support: yuvj420p |
| - | 3.Others |
| Time | 2021/04/12 |
| - | 1.Fixed bug: Some video(encode hev) play failed |
| - | 2.Fixed bug: Some video(nalu unstandard) play failed |
| - | 3.Fixed bug: Some video play error with mosic |
| Time | 2021/04/07 |
| - | 1.Fixed duration error |
| Time | 2021/03/28 |
| - | 1.Add cache process event |
| - | 2.Fixed some bugs |
| - | 3.Remove HLS Log |
| - | 4.Play without audio optio(New Core) |
| Time | 2021/03/14 |
| - | 1.Bak player core mode: Fixed: render of bytes align |
| Time | 2021/03/12 |
| - | 1.Sorry my friends, I was too tired to make a mistake with hls feature... Now I have fixed it. |
| Time | 2021/03/06 |
| - | 1.Bak player core mode, Fixed: multi-stream play badcase |
| Time | 2021/02/28 |
| - | 1.Add function to feed 265 nalu-frame append265NaluFrame(nalBuf); |
| - | 2.Add new library to parse 265 stream raw-parser.js |
| Time | 2021/02/21 |
| - | 1.New SDK Project for H.265/HEVC decoder - https://github.com/numberwolf/h265web.js-wasm-decoder |
| Time | 2021/02/18 |
| - | 1.Bak player core mode support play with audio |
| Time | 2021/02/08 |
| - | 1.Bak player core mode (beta version , do not support play audio and seek. Make your mp4's moov box front of the mdat) |
| Time | 2021/01/04 |
| - | 1.Player Support Hevc file |
| - | 2.Player Support Hevc stream |
| - | 3.Remove Play/Pause Mask |
| - | 4.Add Event:onPlayFinish, called when play video finished |
English demo and 中文 Demo include the same playback-enhancements panel. The development repository’s dynamic index.html, fixed index-multi.html, website home and full player use consistent switches, output choices and state descriptions. Each instance keeps its own preferences.
| Control | How to use it |
|---|---|
| Stable volume | Preset before creation or switch during playback without rebuilding. Status shows waiting for audio, processing or an unavailable reason; volume and mute stay unchanged |
| SR switch | First enable selects “One step up”, with no second selection required. It can be operated during playback; the actual output appears once usable frames and the model are ready |
| SR output | “One step up” uses the smallest currently available enhanced option; “Automatic” uses the SDK standard policy; offered sizes can also be selected directly |
| SDR confirmation and reload | Confirm only compatible SDR media. Apply and reload explicitly after changing the declaration or when a renderer requires recreation. VOD starts again; live playback reconnects |
Both effects default to off. The switch records intent; actual output and state describe the result. When no enhanced size is available, the original picture remains with a reason. input_color is a build option and cannot be changed by the runtime setter. Requests can be made before ready; enabling a model for the first time while paused may need playback to resume.
Website home · Full player · Runtime behavior and integration examples














