{"id":19361417,"url":"https://github.com/kansiris/video-recoder-editor","last_synced_at":"2026-06-13T04:31:49.850Z","repository":{"id":106185911,"uuid":"230720088","full_name":"kansiris/video-recoder-editor","owner":"kansiris","description":"video recoder editor","archived":false,"fork":false,"pushed_at":"2019-12-29T07:54:14.000Z","size":5061,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-18T04:25:59.696Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kansiris.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-29T07:51:40.000Z","updated_at":"2019-12-29T07:54:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"f4efe0ac-2e8b-4daa-9549-dd5058a7ccba","html_url":"https://github.com/kansiris/video-recoder-editor","commit_stats":null,"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"purl":"pkg:github/kansiris/video-recoder-editor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kansiris%2Fvideo-recoder-editor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kansiris%2Fvideo-recoder-editor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kansiris%2Fvideo-recoder-editor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kansiris%2Fvideo-recoder-editor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kansiris","download_url":"https://codeload.github.com/kansiris/video-recoder-editor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kansiris%2Fvideo-recoder-editor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34272603,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T07:22:59.190Z","updated_at":"2026-06-13T04:31:49.834Z","avatar_url":"https://github.com/kansiris.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RecordRTC.js | [Live Demo](https://www.webrtc-experiment.com/RecordRTC/)\n\n**WebRTC JavaScript Library for Audio+Video+Screen+Canvas (2D+3D animation) Recording**\n\n[Chrome Extension](https://github.com/muaz-khan/Chrome-Extensions/tree/master/screen-recording) or [Dozens of Simple-Demos](https://www.webrtc-experiment.com/RecordRTC/simple-demos/) and [it is Open-Sourced](https://github.com/muaz-khan/RecordRTC) and has [API documentation](https://recordrtc.org/)\n\n[![npm](https://img.shields.io/npm/v/recordrtc.svg)](https://npmjs.org/package/recordrtc) [![downloads](https://img.shields.io/npm/dm/recordrtc.svg)](https://npmjs.org/package/recordrtc) [![Build Status: Linux](https://travis-ci.org/muaz-khan/RecordRTC.png?branch=master)](https://travis-ci.org/muaz-khan/RecordRTC)\n\n**A demo using promises:**\n\n```javascript\nlet stream = await navigator.mediaDevices.getUserMedia({video: true, audio: true});\nlet recorder = new RecordRTCPromisesHandler(stream, {\n    type: 'video'\n});\nrecorder.startRecording();\n\nconst sleep = m =\u003e new Promise(r =\u003e setTimeout(r, m));\nawait sleep(3000);\n\nawait recorder.stopRecording();\nlet blob = await recorder.getBlob();\ninvokeSaveAsDialog(blob);\n```\n\n**A demo using normal coding:**\n\n```javascript\nnavigator.mediaDevices.getUserMedia({\n    video: true,\n    audio: true\n}).then(async function(stream) {\n    let recorder = RecordRTC(stream, {\n        type: 'video'\n    });\n    recorder.startRecording();\n\n    const sleep = m =\u003e new Promise(r =\u003e setTimeout(r, m));\n    await sleep(3000);\n\n    recorder.stopRecording(function() {\n        let blob = recorder.getBlob();\n        invokeSaveAsDialog(blob);\n    });\n});\n```\n\n* [Watch a YouTube video presentation/tutorial](https://www.youtube.com/watch?v=YrLzTgdJ-Kg)\n\n## Browsers Support\n\n| Browser        | Operating System                    | Features               |\n| -------------  |-------------                        |---------------------   |\n| Google Chrome  | Windows + macOS + Ubuntu + Android  | audio + video + screen |\n| Firefox        | Windows + macOS + Ubuntu + Android  | audio + video + screen |\n| Opera          | Windows + macOS + Ubuntu + Android  | audio + video + screen |\n| Edge           | Windows 10                          | only audio             |\n| Safari         | macOS + iOS (iPhone/iPad)           | audio + video          |\n\n## Codecs Support\n\n| Browser       | Video               | Audio            |\n| ------------- |-------------        |-------------     |\n| Chrome        | VP8, VP9, H264, MKV | OPUS/VORBIS, PCM |\n| Opera         | VP8, VP9, H264, MKV | OPUS/VORBIS, PCM |\n| Firefox       | VP8, H264           | OPUS/VORBIS, PCM |\n| Safari        | VP8                 | OPUS/VORBIS, PCM |\n| Edge          | None                | PCM              |\n\n\n## CDN\n\n```html\n\u003c!-- recommended --\u003e\n\u003cscript src=\"https://www.WebRTC-Experiment.com/RecordRTC.js\"\u003e\u003c/script\u003e\n\n\u003c!-- use 5.5.6 or any other version on cdnjs --\u003e\n\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/RecordRTC/5.5.6/RecordRTC.js\"\u003e\u003c/script\u003e\n\n\u003c!-- NPM i.e. \"npm install recordrtc\" --\u003e\n\u003cscript src=\"node_modules/recordrtc/RecordRTC.js\"\u003e\u003c/script\u003e\n\n\u003c!-- bower --\u003e\n\u003cscript src=\"bower_components/recordrtc/RecordRTC.js\"\u003e\u003c/script\u003e\n```\n\n## Configuration\n\n```javascript\nconst recorder = RecordRTC(stream, {\n     // audio, video, canvas, gif\n    type: 'video',\n\n    // audio/webm\n    // video/webm;codecs=vp9\n    // video/webm;codecs=vp8\n    // video/webm;codecs=h264\n    // video/x-matroska;codecs=avc1\n    // video/mpeg -- NOT supported by any browser, yet\n    // video/mp4  -- NOT supported by any browser, yet\n    // audio/wav\n    // audio/ogg  -- ONLY Firefox\n    // demo: simple-demos/isTypeSupported.html\n    mimeType: 'video/webm',\n\n    // MediaStreamRecorder, StereoAudioRecorder, WebAssemblyRecorder\n    // CanvasRecorder, GifRecorder, WhammyRecorder\n    recorderType: MediaStreamRecorder,\n\n    // disable logs\n    disableLogs: true,\n\n    // get intervals based blobs\n    // value in milliseconds\n    timeSlice: 1000,\n\n    // requires timeSlice above\n    // returns blob via callback function\n    ondataavailable: function(blob) {},\n\n    // auto stop recording if camera stops\n    checkForInactiveTracks: false,\n\n    // requires timeSlice above\n    onTimeStamp: function(timestamp) {},\n\n    // both for audio and video tracks\n    bitsPerSecond: 128000,\n\n    // only for audio track\n    audioBitsPerSecond: 128000,\n\n    // only for video track\n    videoBitsPerSecond: 128000,\n\n    // used by CanvasRecorder and WhammyRecorder\n    // it is kind of a \"frameRate\"\n    frameInterval: 90,\n\n    // if you are recording multiple streams into single file\n    // this helps you see what is being recorded\n    previewStream: function(stream) {},\n\n    // used by CanvasRecorder and WhammyRecorder\n    // you can pass {width:640, height: 480} as well\n    video: HTMLVideoElement,\n\n    // used by CanvasRecorder and WhammyRecorder\n    canvas: {\n        width: 640,\n        height: 480\n    },\n\n    // used by StereoAudioRecorder\n    // the range 22050 to 96000.\n    sampleRate: 96000,\n\n    // used by StereoAudioRecorder\n    // the range 22050 to 96000.\n    // let us force 16khz recording:\n    desiredSampRate: 16000,\n\n    // used by StereoAudioRecorder\n    // Legal values are (256, 512, 1024, 2048, 4096, 8192, 16384).\n    bufferSize: 16384,\n\n    // used by StereoAudioRecorder\n    // 1 or 2\n    numberOfAudioChannels: 2,\n\n    // used by WebAssemblyRecorder\n    frameRate: 30,\n\n    // used by WebAssemblyRecorder\n    bitrate: 128000,\n\n    // used by MultiStreamRecorder - to access HTMLCanvasElement\n    elementClass: 'multi-streams-mixer'\n});\n```\n\n## MediaStream parameter\n\nMediaStream parameter accepts following values:\n\n```javascript\nlet recorder = RecordRTC(MediaStream || HTMLCanvasElement || HTMLVideoElement || HTMLElement, {});\n```\n\n## API\n\n```javascript\nRecordRTC.prototype = {\n    // start the recording\n    startRecording: function() {},\n\n    // stop the recording\n    // getBlob inside callback function\n    stopRecording: function(blobURL) {},\n\n    // pause the recording\n    pauseRecording: function() {},\n\n    // resume the recording\n    resumeRecording: function() {},\n\n    // auto stop recording after specific duration\n    setRecordingDuration: function() {},\n\n    // reset recorder states and remove the data\n    reset: function() {},\n\n    // invoke save as dialog\n    save: function(fileName) {},\n\n    // returns recorded Blob\n    getBlob: function() {},\n\n    // returns Blob-URL\n    toURL: function() {},\n\n    // returns Data-URL\n    getDataURL: function(dataURL) {},\n\n    // returns internal recorder\n    getInternalRecorder: function() {},\n\n    // initialize the recorder [deprecated]\n    initRecorder: function() {},\n\n    // fired if recorder's state changes\n    onStateChanged: function(state) {},\n\n    // write recorded blob into indexed-db storage\n    writeToDisk: function(audio: Blob, video: Blob, gif: Blob) {},\n\n    // get recorded blob from indexded-db storage\n    getFromDisk: function(dataURL, type) {},\n\n    // [deprecated]\n    setAdvertisementArray: function([webp1, webp2]) {},\n\n    // [deprecated] clear recorded data\n    clearRecordedData: function() {},\n\n    // clear memory; clear everything\n    destroy: function() {},\n\n    // get recorder's state\n    getState: function() {},\n\n    // [readonly] property: recorder's state\n    state: string,\n\n    // recorded blob [readonly] property\n    blob: Blob,\n\n    // [readonly] array buffer; useful only for StereoAudioRecorder\n    buffer: ArrayBuffer,\n\n    // RecordRTC version [readonly]\n    version: string,\n\n    // [readonly] useful only for StereoAudioRecorder\n    bufferSize: integer,\n\n    // [readonly] useful only for StereoAudioRecorder\n    sampleRate: integer\n}\n```\n\nPlease check documentation here: [https://recordrtc.org/](https://recordrtc.org/)\n\n## Global APIs\n\n```javascript\n// \"bytesToSize\" returns human-readable size (in MB or GB)\nlet size = bytesToSize(recorder.getBlob().size);\n\n// to fix video seeking issues\ngetSeekableBlob(recorder.getBlob(), function(seekableBlob) {\n    invokeSaveAsDialog(seekableBlob);\n});\n\n// this function invokes save-as dialog\ninvokeSaveAsDialog(recorder.getBlob(), 'video.webm');\n\n// use these global variables to detect browser\nlet browserInfo = {isSafari, isChrome, isFirefox, isEdge, isOpera};\n\n// use this to store blobs into IndexedDB storage\nDiskStorage = {\n    init: function() {},\n    Fetch: function({audioBlob: Blob, videoBlob: Blob, gifBlob: Blob}) {},\n    Store: function({audioBlob: Blob, videoBlob: Blob, gifBlob: Blob}) {},\n    onError: function() {},\n    dataStoreName: function() {}\n};\n```\n\n## How to fix echo issues?\n\n1. Set `\u003cvideo\u003e.muted=true` and `\u003cvideo\u003e.volume=0`\n2. Pass `audio: {echoCancellation:true}` on getUserMedia\n\n## Wiki\n\n* [https://github.com/muaz-khan/RecordRTC/wiki](https://github.com/muaz-khan/RecordRTC/wiki)\n\n## Releases\n\n* [https://github.com/muaz-khan/RecordRTC/releases](https://github.com/muaz-khan/RecordRTC/releases)\n\n## Unit Tests\n\n* [https://travis-ci.org/muaz-khan/RecordRTC](https://travis-ci.org/muaz-khan/RecordRTC)\n\n## Issues/Questions?\n\n* Github: [https://github.com/muaz-khan/RecordRTC/issues](https://github.com/muaz-khan/RecordRTC/issues)\n* Disqus: [https://www.webrtc-experiment.com/RecordRTC/#ask](https://www.webrtc-experiment.com/RecordRTC/#ask)\n* Stackoverflow: [http://stackoverflow.com/questions/tagged/recordrtc](http://stackoverflow.com/questions/tagged/recordrtc)\n* Email: `muazkh =\u003e gmail`\n\n## Credits\n\n| Library     | Usage |\n| ------------- |------------|\n| [Recorderjs](https://github.com/mattdiamond/Recorderjs) | StereoAudioRecorder |\n| [webm-wasm](https://github.com/GoogleChromeLabs/webm-wasm) | WebAssemblyRecorder |\n| [jsGif](https://github.com/antimatter15/jsgif) | GifRecorder |\n| [whammy](https://github.com/antimatter15/whammy) | WhammyRecorder |\n\n## Spec \u0026 Reference\n\n1. [MediaRecorder API](https://w3c.github.io/mediacapture-record/MediaRecorder.html)\n2. [Web Audio API](https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html)\n3. [Canvas2D](http://www.w3.org/html/wg/drafts/2dcontext/html5_canvas/)\n4. [Media Capture and Streams](http://www.w3.org/TR/mediacapture-streams/)\n\n## Who is using RecordRTC?\n\n| Framework     | Github               | Article            |\n| ------------- |-------------        |-------------     |\n| Angular2      | [github](https://github.com/ShankarSumanth/Angular2-RecordRTC) | [article](https://medium.com/@SumanthShankar/integrate-recordrtc-with-angular-2-typescript-942c9c4ca93f#.7x5yf2nr5) |\n| React.js       | [github](https://github.com/szwang/recordrtc-react) | [article](http://suzannewang.com/recordrtc/) |\n| Video.js      | [github](https://github.com/collab-project/videojs-record) | None |\n| Meteor        | [github](https://github.com/launchbricklabs/recordrtc-meteor-demo) | None |\n\n## License\n\n[RecordRTC.js](https://github.com/muaz-khan/RecordRTC) is released under [MIT license](https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE) . Copyright (c) [Muaz Khan](https://MuazKhan.com).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkansiris%2Fvideo-recoder-editor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkansiris%2Fvideo-recoder-editor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkansiris%2Fvideo-recoder-editor/lists"}