Project Icon

RecordRTC

多功能WebRTC音视频录制库

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

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

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

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

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号