RecordRTC

RecordRTC

多功能WebRTC音视频录制库

RecordRTC是一个WebRTC JavaScript库,用于录制音频、视频、屏幕和Canvas内容。它支持多种浏览器和编解码器,提供灵活配置。开发者可通过CDN、npm或bower集成,使用全面API实现Web音视频录制。该库文档详细,适合各类Web录制需求。

RecordRTCWebRTC音视频录制浏览器支持API文档Github开源项目

RecordRTC.js | 在线演示

用于音频+视频+屏幕+画布(2D+3D动画)录制的WebRTC JavaScript库

Chrome扩展数十个简单演示,它是开源的并且有API文档

npm 下载量 构建状态:Linux

使用Promise的演示:

let stream = await navigator.mediaDevices.getUserMedia({video: true, audio: true}); let recorder = new RecordRTCPromisesHandler(stream, { type: 'video' }); recorder.startRecording(); const sleep = m => new Promise(r => setTimeout(r, m)); await sleep(3000); await recorder.stopRecording(); let blob = await recorder.getBlob(); invokeSaveAsDialog(blob);

使用常规编码的演示:

navigator.mediaDevices.getUserMedia({ video: true, audio: true }).then(async function(stream) { let recorder = RecordRTC(stream, { type: 'video' }); recorder.startRecording(); const sleep = m => new Promise(r => setTimeout(r, m)); await sleep(3000); recorder.stopRecording(function() { let blob = recorder.getBlob(); invokeSaveAsDialog(blob); }); });

浏览器支持

浏览器操作系统功能
Google ChromeWindows + macOS + Ubuntu + Android音频 + 视频 + 屏幕
FirefoxWindows + macOS + Ubuntu + Android音频 + 视频 + 屏幕
OperaWindows + macOS + Ubuntu + Android音频 + 视频 + 屏幕
Edge (新版)Windows (7或8或10) 和 MacOSX音频 + 视频 + 屏幕
SafarimacOS + iOS (iPhone/iPad)音频 + 视频

编解码器支持

浏览器视频音频
ChromeVP8, VP9, H264, MKVOPUS/VORBIS, PCM
OperaVP8, VP9, H264, MKVOPUS/VORBIS, PCM
FirefoxVP8, H264OPUS/VORBIS, PCM
SafariVP8OPUS/VORBIS, PCM
Edge (新版)VP8, VP9, H264, MKVOPUS/VORBIS, PCM

CDN

<!-- 推荐 --> <script src="https://www.WebRTC-Experiment.com/RecordRTC.js"></script> <!-- 使用5.6.2或cdnjs上的任何其他版本 --> <script src="https://cdnjs.cloudflare.com/ajax/libs/RecordRTC/5.6.2/RecordRTC.js"></script> <!-- NPM,即 "npm install recordrtc" --> <script src="node_modules/recordrtc/RecordRTC.js"></script> <!-- bower --> <script src="bower_components/recordrtc/RecordRTC.js"></script>

配置

const recorder = RecordRTC(stream, { // 音频、视频、画布、gif type: 'video', // audio/webm // audio/webm;codecs=pcm // video/mp4 // video/webm;codecs=vp9 // video/webm;codecs=vp8 // video/webm;codecs=h264 // video/x-matroska;codecs=avc1 // video/mpeg -- 目前还不被任何浏览器支持 // audio/wav // audio/ogg -- 仅Firefox支持 // 演示:simple-demos/isTypeSupported.html mimeType: 'video/webm', // MediaStreamRecorder, StereoAudioRecorder, WebAssemblyRecorder // CanvasRecorder, GifRecorder, WhammyRecorder recorderType: MediaStreamRecorder, // 禁用日志 disableLogs: true, // 获取基于时间间隔的blob // 值以毫秒为单位 timeSlice: 1000, // 需要上面的timeSlice // 通过回调函数返回blob ondataavailable: function(blob) {}, // 如果摄像头停止则自动停止录制 checkForInactiveTracks: false, // 需要上面的timeSlice onTimeStamp: function(timestamp) {}, // 针对音频和视频轨道 bitsPerSecond: 128000, // 仅针对音频轨道 // 当codecs=pcm时被忽略 audioBitsPerSecond: 128000, // 仅针对视频轨道 videoBitsPerSecond: 128000, // 由CanvasRecorder和WhammyRecorder使用 // 它类似于"帧率" frameInterval: 90, // 如果您将多个流录制到单个文件中 // 这有助于您查看正在录制的内容 previewStream: function(stream) {}, // 由CanvasRecorder和WhammyRecorder使用 // 您也可以传递{width:640, height: 480} video: HTMLVideoElement, // 由CanvasRecorder和WhammyRecorder使用 canvas: { width: 640, height: 480 }, // 由StereoAudioRecorder使用 // 范围从22050到96000 sampleRate: 96000, // 由StereoAudioRecorder使用 // 范围从22050到96000 // 让我们强制16khz录音: desiredSampRate: 16000, // 由StereoAudioRecorder使用 // 合法值为(256、512、1024、2048、4096、8192、16384) bufferSize: 16384, // 由StereoAudioRecorder使用 // 1或2 numberOfAudioChannels: 2, // 由WebAssemblyRecorder使用 frameRate: 30, // 由WebAssemblyRecorder使用 bitrate: 128000, // 由MultiStreamRecorder使用 - 用于访问HTMLCanvasElement elementClass: 'multi-streams-mixer' });

MediaStream参数

MediaStream参数接受以下值:

let recorder = RecordRTC(MediaStream || HTMLCanvasElement || HTMLVideoElement || HTMLElement, {});

API

RecordRTC.prototype = { // 开始录制 startRecording: function() {}, // 停止录制 // 在回调函数内获取Blob stopRecording: function(blobURL) {}, // 暂停录制 pauseRecording: function() {}, // 恢复录制 resumeRecording: function() {}, // 在特定时长后自动停止录制 setRecordingDuration: function() {}, // 重置录音机状态并删除数据 reset: function() {}, // 调用保存对话框 save: function(fileName) {}, // 返回录制的Blob getBlob: function() {}, // 返回Blob-URL toURL: function() {}, // 返回Data-URL getDataURL: function(dataURL) {}, // 返回内部录音机 getInternalRecorder: function() {}, // 初始化录音机 [已弃用] initRecorder: function() {}, // 如果录音机状态改变时触发 onStateChanged: function(state) {}, // 将录制的blob写入indexed-db存储 writeToDisk: function(audio: Blob, video: Blob, gif: Blob) {}, // 从indexded-db存储获取录制的blob getFromDisk: function(dataURL, type) {}, // [已弃用] setAdvertisementArray: function([webp1, webp2]) {}, // [已弃用] 清除录制的数据 clearRecordedData: function() {}, // 清除内存;清除所有内容 destroy: function() {}, // 获取录音机的状态 getState: function() {}, // [只读] 属性:录音机的状态 state: string, // 录制的blob [只读] 属性 blob: Blob, // [只读] 数组缓冲区;仅对StereoAudioRecorder有用 buffer: ArrayBuffer, // RecordRTC版本 [只读] version: string, // [只读] 仅对StereoAudioRecorder有用 bufferSize: integer, // [只读] 仅对StereoAudioRecorder有用 sampleRate: integer }

请在此处查看文档:https://recordrtc.org/

全局API

// "bytesToSize"返回人类可读的大小(以MB或GB为单位) let size = bytesToSize(recorder.getBlob().size); // 修复视频定位问题 getSeekableBlob(recorder.getBlob(), function(seekableBlob) { invokeSaveAsDialog(seekableBlob); }); // 此函数调用保存对话框 invokeSaveAsDialog(recorder.getBlob(), 'video.webm'); // 使用这些全局变量来检测浏览器 let browserInfo = {isSafari, isChrome, isFirefox, isEdge, isOpera}; // 使用此功能将blob存储到IndexedDB存储中 DiskStorage = { init: function() {}, Fetch: function({audioBlob: Blob, videoBlob: Blob, gifBlob: Blob}) {}, Store: function({audioBlob: Blob, videoBlob: Blob, gifBlob: Blob}) {}, onError: function() {}, dataStoreName: function() {} };

如何解决回声问题?

  1. 设置<video>.muted=true<video>.volume=0
  2. 在getUserMedia上传递audio: {echoCancellation:true}

维基

发布

单元测试

问题/疑问?

致谢

用途
RecorderjsStereoAudioRecorder
webm-wasmWebAssemblyRecorder
jsGifGifRecorder
whammyWhammyRecorder

规范与参考

  1. MediaRecorder API
  2. Web Audio API
  3. Canvas2D
  4. Media Capture and Streams

谁在使用RecordRTC?

框架Github文章
Angular2github文章
React.jsgithub文章
Video.jsgithub
Meteorgithub

许可证

RecordRTC.jsMIT许可证下发布。版权所有 (c) [Muaz

编辑推荐精选

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

下拉加载更多