# h265web.js - Support Hard-Decode 中文 | English

H265web.js is the best HEVC/H.265 web player you can find.
Video Stream Server recommand use ZLMediaKit(https://github.com/ZLMediaKit/ZLMediaKit) - Pretty good video live stream server/framework
A hevc/h.265 web player, easy to play 1080P. `~^_^~ For love` if h265web helped you, please `star` it~

All Features

| 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) |
#### Contact #### * Github: https://github.com/numberwolf/h265web.js * Email: porschegt23@foxmail.com * QQ Group Number: 925466059(recommand) * QQ: 531365872 * Discord:numberwolf#8694 * Wechat:numberwolf11 #### Online DEMO h265webjs.html (Demo is not newest version, you need to download from github and get newest version) #### First Demo - for first use index-debug.html | h265web.js | mpeg.js `(ts demuxer)` | h265web.js's H.265 decoder | LICENSE | | ---- | ---- | ---- | ---- | | [h265web.js](https://github.com/numberwolf/h265web.js) | [MPEG-Demuxer.js](https://github.com/numberwolf/MPEG-Demuxer.js) | [h265web.js-wasm-decoder](https://github.com/numberwolf/h265web.js-wasm-decoder) | CYL_Free-1.0 LICENSE-Free_CN.MD |
# Remind! H265web.js use the soft-decode mode(Can not use hard-decode and assembly-optimization on browers), so your device performance has a large impact on player. Notice: * Recommended FPS <= 30fps * Better: 24fps * Recommended Bitrate <= 1500kbps * Better: 300~600kbps ## Index - [Update Log](#updatelog) - [0、README](#0readme) - [Support what?](#supported) - [Free token](#freetoken) - [Demo](#demo) - [Preview image](#previewimage) - [1、How to use it? See demo code](#1useitbydemo) - [2、SDK/API Document](#2sdkandapidocument) - [How to install it](#install) - [Player Config](#playerconfig) - [Init Player](#initplayer) - [Player bind events](#playerbindevents) - [Seed Finished](#seedfinished) - [Callback Yuv Data](#callbackyuvdata) - [Media Load Successed](#medialoadsuccessed) - [Player Pts Update](#playerptsupdate) - [Play Finished](#playfinished) - [Cache Download](#cachedownload) - [Cover Image Load Finished](#coverimageloadfinished) - [Caching Decode Frames](#cachingdecodeframes) - [Caching Decode Finished](#cachingdecodefinished) - [Open FullScreen Event](#openfullscreenevent) - [Exit FullScreen Event](#closefullscreenevent) - [Callback Play State](#callbackplaystate) - [Player API Document](#playerapidocument) - [Build Player](#buildplayer) - [Get Player Play Status](#getplayerplaystatus) - [Start Play](#startplay) - [Pause](#pause) - [Set Render Callback YuvFrame](#setrendercallbackyuvframe) - [Seek](#seek) - [Volume Option](#volumeoption) - [Get MediaInfo - and check is h265 video](#getmediainfo) - [Open Fullscreen](#openfullscreen) - [Exit Fullscreen](#exitfullscreen) - [Play frame by frame(next frame)](#nextframe) - [Resize](#resize) - [Snapshot](#snapshot) - [SetPlayRate](#setplayrate) - [GetPlayRate](#getplayrate) - [Release Player](#release) - [3、Others](#3others) - [Donate](#donate) - [FFmpeg Support H265 Live Encode](#ffmpegsupporth265liveencode) - [Transcode and get HEVC/H.265 media file by ffmpeg](#transcodeandget265codecfilebyffmpeg)
### 0、README ### | TODO | Content | | ---- | ---- | | 1 | Support HDR10 BT.2020 | #### Supported #### * 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 | ---- | | 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... | | 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/AV1 | | Resize | Y | ---- |
#### freeToken #### ```javascript token = "base64:QXV0aG9yOmNoYW5neWFubG9uZ3xudW1iZXJ3b2xmLEdpdGh1YjpodHRwczovL2dpdGh1Yi5jb20vbnVtYmVyd29sZixFbWFpbDpwb3JzY2hlZ3QyM0Bmb3htYWlsLmNvbSxRUTo1MzEzNjU4NzIsSG9tZVBhZ2U6aHR0cDovL3h2aWRlby52aWRlbyxEaXNjb3JkOm51bWJlcndvbGYjODY5NCx3ZWNoYXI6bnVtYmVyd29sZjExLEJlaWppbmcsV29ya0luOkJhaWR1"; ```
#### Demo #### https://www.zzsin.com/h265webjs.html Simple Demo - First index-debug.html
#### PreviewImage #### | Type | Example | | ---- | ---- | | VOD | | | LIVE | |
## 1、UseItByDemo ## * Simple Demo - First index-debug.html * You need to put project in your `web server` path, and open it with `index.html`
## 2、SdkAndApiDocument ## ———————— __API/Events__ #### New SDK Project for H.265/HEVC decoder - [https://github.com/numberwolf/h265web.js-wasm-decoder](https://github.com/numberwolf/h265web.js-wasm-decoder) ### Install ### > *

Warning: Do not install from npm store! Please download from Github! Because npm store is not friendly with Webassembly!

> *

Warning: Put the .wasm file into `webpack`/`browerify`'s dist Directory! If wasm's path is not same with `webpack`/`browerify`'s dist file's path, you can not running with it!!!Or you can include with this github's dist/\*.js and dist/missile\*.wasm

```bash bash init.sh ``` #### 1)Install SDK Package * By github 1.1 h265web.js * Simple Demo - First index-debug.html * demo: example_normal (recommend) ```javascript ``` * demo: example ```javascript // import wasm in html file // import from local file in your es js file require('./dist/h265webjs'); ``` * demo: example * `import xxx from xxx` ```javascript // import wasm in html file // import from local file in your es js file import H265webjsModule from './dist/index'; ```
#### 2)Install Wasm * If you install it by github, you could skip this step.
#### 3)Include h265web.js to project * Github h265web.js
### PlayerConfig ### * Make player config ```javascript const PLAYER_CORE_TYPE_DEFAULT = 0; // Default player core const PLAYER_CORE_TYPE_CNATIVE = 1; // BAK player Core let config = { player: "glplayer", width: 960, height: 540, token : token, extInfo : { moovStartFlag : true } }; ``` * Config desc | Config | Type | Value | Need | Desc | | ---- | ---- | ---- | ---- | ---- | | type | String | mp4/hls/ts/raw265/flv | N | Media file type, or auto detect | | player | String | - | Y | Player dom id | | width | Int | - | Y | Player width | | height | Int | - | Y | Player height | | token | String | - | Y | player's token | | extInfo | Object | - | N | player extra info | | \+ moovStartFlag | Bool | true/false | N:default is sfalse | mp4 with moov before mdat | | \+ rawFps | Float32 | Example:30 | N:default 24 | Fps for play HEVC/AVC stream | | \+ coreProbePart | Float32 | - | N:Default is 1.0 | Probe Mp4 media info,interval: `0.0~1.0`, traditional mp4 file which moov box front of mdat box, use 0.1(10%) (only with Bak player core mode(beta)) | | \+ core | Int | - | N:Default 0 | 0:Default Core
1:Bak Core | | \+ ignoreAudio | Int | - | N:Default is 0 | 0:Play with audio
1:Without audio | | \+ probeSize | Int | - | N:4096 | HTTP-FLV(LIVE) Mode's probe size, default is 4096 | | \+ autoPlay | Bool | true/false | N:false | Open autoplay
HTTP-FLV 265+264
HTTP-TS 265+264
HLS 264 | | \+ cacheLength | Int | [5, ∞+] | N:Default is 50 frames | Set cache frame count by manual
MP4 265 |
### InitPlayer ### * Warning!!! After compile ,Please put your `JS file` with `wasm file` in the same directory * Example ```c ./dist/your dist play file ./dist/sdk files ./index.html ``` * Create your player(Global function) > new265webjs(`mediaAddress`, `playerConfig`) | Param | Type | Default | Need | Desc | | ---- | ---- | ---- | ---- | ---- | | mediaAddress | String | - | Y | media file address/path | | playerConfig | Object | - | Y | player's config | * Example * 1)URI and Config * Example 1 Create `mp4/hls/ts` Player ```javascript let videoURL = "h265_test.mp4"; let config = { player: "glplayer", width: 960, height: 540, accurateSeek : true, token : token, extInfo : { moovStartFlag : true, readyShow : true } }; ```` * Example 2 Create `raw265` Player (play hevc raw stream) ```javascript let videoURL = "demo/res/raw.h265"; let config = { player: "glplayer", width: 960, height: 540, accurateSeek : true, token : token, extInfo : { readyShow : true, rawFps : 30 // frame rate } }; ```` * Example 3 Create `FLV`(Video on demand) Player ```javascript const PLAYER_CORE_TYPE_DEFAULT = 0; // Default player core const PLAYER_CORE_TYPE_CNATIVE = 1; // Bak player core mode let config = { player: "glplayer", width: 960, height: 540, accurateSeek : true, token : token, extInfo : { moovStartFlag : true, readyShow : true, autoCrop : false, coreProbePart : 0.1, ignoreAudio : 0 } }; ```` * 2)Player * 0. Example 0 Create by normal js without compile Example: ```javascript let player = window.new265webjs(url, config); ``` * 1. If `require('./src/h265webjs');` Example: ```javascript let player = new265webjs(videoURL, config); // Global Function ``` * 2. If `import H265webjsModule from './dist/index';`(recommend) Example: ```javascript let player = H265webjsModule.createPlayer(videoURL, config); ``` * 3. NOTICE! If you want to create `raw265` stream player (Do not need execute with this step when you play 265 vod stream) * Add `raw265` type, and set `rawFps` for player's fps ```javascript config = { type: 'raw265', player: "glplayer", width: 960, height: 540, // accurateSeek : true, token : token, extInfo : { rawFps: 24, moovStartFlag : true, coreProbePart : 0.1, ignoreAudio : 0, probeSize : 8192, autoPlay : true, } }; ```
### PlayerBindEvents ### #### SeedFinished #### * Example ```javascript player.onSeekFinish = () => { // todo }; ```
#### CallbackYuvData #### | Callback param | Type | Default | Need | Desc | | ---- | ---- | ---- | ---- | ---- | | width | int | - | - | YUV width | | height | int | - | - | YUV height | | imageBufferY | Uint8Array | - | - | Y | | imageBufferB | Uint8Array | - | - | ChromaB | | imageBufferR | Uint8Array | - | - | ChromaR | > You can use this event's data to render a new window(full screen play) > must use `setRenderScreen` to open this feature. * Example ```javascript player.onRender = (width, height, imageBufferY, imageBufferB, imageBufferR) => { // todo }; ```
#### MediaLoadSuccessed #### > If this event happened, you can start play * Example ```javascript player.onLoadFinish = () => { // todo }; ```
#### PlayerPtsUpdate #### | Callback param | Type | Default | Need | Desc | | ---- | ---- | ---- | ---- | ---- | | videoPTS | float64 | - | - | pts now | * Example ```javascript player.onPlayTime = (videoPTS) => { // todo console.log(videoPTS) }; ``` #### PlayFinished #### * Example ```javascript player.onPlayFinish = () => { // finished }; ``` #### CacheDownload #### | Callback param | Type | Default | Need | Desc | | ---- | ---- | ---- | ---- | ---- | | cPts | float64 | - | - | Cache process timestamp | * Example ```javascript player.onCacheProcess = (cPts) => { // console.log("onCacheProcess => ", cPts); }; ```` #### CoverImageLoadFinished #### * Example ```javascript player.onReadyShowDone = () => { // console.log("onReadyShowDone"); // to play }; ``` #### CachingDecodeFrames #### * Example ```javascript player.onLoadCache = () => { // caching frames }; ``` #### CachingDecodeFinished #### * Example ```javascript player.onLoadCacheFinshed = () => { // cache finished }; ``` #### OpenFullScreenEvent #### * Example ```javascript player.onOpenFullScreen = () => { // todo }; ``` #### CloseFullScreenEvent #### * Example ```javascript player.onCloseFullScreen = () => { // todo }; ``` #### CallbackPlayState #### * Example ```javascript player.onPlayState = (state) => { // state // true: playing / false: paused }; ```
### PlayerAPIDocument ### #### BuildPlayer #### > After【set player config】和【bind events】 * Example ```javascript player.do(); ```
#### GetPlayerPlayStatus #### | Function | Return | Desc | | ---- | ---- | ---- | | isPlaying() | bool | play status | * Example ```javascript if (player.isPlaying()) { // now is playing } else { } ```
#### StartPlay #### | Function | Return | Desc | | ---- | ---- | ---- | | play() | - | Start play | * Example ```javascript player.play(); ```
#### Pause #### | Function | Return | Desc | | ---- | ---- | ---- | | pause() | - | Pause | * Example ```javascript player.pause(); ```
#### SetRenderCallbackYuvFrame #### > After open,you can use `onRender` Event | Function | Return | Desc | | ---- | ---- | ---- | | setRenderScreen(`{param1}`) | - | Open/Close : Render callback YUV Frame data | * Param | Param | Type | Default | Desc | | ---- | ---- | ---- | ---- | | param1 | bool | false | Open/Close : Render callback YUV Frame data | * Example ```javascript // Open player.setRenderScreen(true); // Close player.setRenderScreen(false); ```
#### Seek #### | Function | Return | Desc | | ---- | ---- | ---- | | seek(`{pts}`) | - | Seek to any timestamp | * Params | Param | Type | Default | Desc | | ---- | ---- | ---- | ---- | | pts | float64 | - | Seek to any timestamp | * Example ```javascript // Seek to 10.01s player.seek(10.01); ```
#### VolumeOption #### | Function | Return | Desc | | ---- | ---- | ---- | | setVoice(`{volume}`) | - | volume value | * Params | Param | Type | Default | Desc | | ---- | ---- | ---- | ---- | | volume | float64 | - | Set value in `[0, 1.0]`, 0 is mute,1.0 is full | * Example ```javascript // half player.setVoice(0.5); ```
#### GetMediaInfo #### | Function | Return | Desc | | ---- | ---- | ---- | | mediaInfo() | Object | Media file info | * Return Example ```json meta: audioNone: false // include audio stream durationMs: 600000 // media duration(ms) fps: 25 // frame rate sampleRate: 44100 // audio sampleRate size: height: 720 width: 1280 videoCodec: 0 // 0:HEVC/H.265 1:Others Codec isHEVC: true // video is HEVC Codec videoType: "vod" // vod or live ``` * Example ```javascript let mediaInfo = player.mediaInfo(); ```
#### OpenFullscreen #### | Function | Return | Desc | | ---- | ---- | ---- | | fullScreen() | - | open fullscreen | * Example ```javascript player.fullScreen(); ```
#### ExitFullscreen #### | Function | Return | Desc | | ---- | ---- | ---- | | closeFullScreen() | - | exit fullscreen | * Example ```javascript player.closeFullScreen(); ```
#### nextframe #### | Function | Return | Desc | | ---- | ---- | ---- | | playNextFrame() | true/false | play next frame |
#### setplayrate #### | Function | Return | Desc | | ---- | ---- | ---- | | setPlaybackRate(rate) | true/false | 设置倍速 默认1.0 | * 示例 ```javascript h265Object.setPlaybackRate(0.5); ```
#### getplayrate #### | Function | Return | Desc | | ---- | ---- | ---- | | getPlaybackRate() | Double | 截取当前帧图像 | * 示例 ```javascript let rate = h265Object.getPlaybackRate(); ```
#### resize #### | Function | Return | Desc | | ---- | ---- | ----| | resize(width, height) | true/false | resize |
#### snapshot #### | Function | Return | Desc | | ---- | ---- | ---- | | snapshot() | - | Snapshot frame | * Example ```javascript const snapCanvas = document.getElementById("snapshot-player"); // create canvas h265Object.snapshot(snapCanvas); // snapshot to canvas ```
#### release #### | Function | Return | Desc | | ---- | ---- | ---- | | release() | - | Release Player | * Example ```javascript player.release(); ```
## 3、Others ## ### Donate ### | Wechat | Alipay | PayPal | | ---- | ---- | ---- | | | | TODO |
### FFmpegSupportH265LiveEncode ### * Github: https://github.com/numberwolf/FFmpeg-QuQi-H265-FLV-RTMP
### TranscodeAndGet265CodecFileByFFmpeg ### * mp4 ```bash 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 ```bash 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 ```bash 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 ```
# UpdateLog # | Update | Content | | ---- | ---- | | 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 https://github.com/numberwolf/h265web.js/issues/108 | | - | 1.Fixed ISSUE of HLS Split Rules https://github.com/numberwolf/h265web.js/issues/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 https://github.com/numberwolf/h265web.js/issues/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](./dist/raw-parser.js) | | Time | 2021/02/21 | | - | 1.New SDK Project for H.265/HEVC decoder - [https://github.com/numberwolf/h265web.js-wasm-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 |