react-media-recorder 是一个完全类型化的 React 组件,具有渲染属性或 React hook,可用于:
npm i react-media-recorder
或
yarn add react-media-recorder
import { ReactMediaRecorder } from "react-media-recorder"; const RecordView = () => ( <div> <ReactMediaRecorder video render={({ status, startRecording, stopRecording, mediaBlobUrl }) => ( <div> <p>{status}</p> <button onClick={startRecording}>开始录制</button> <button onClick={stopRecording}>停止录制</button> <video src={mediaBlobUrl} controls autoPlay loop /> </div> )} /> </div> );
由于 react-media-recording 使用渲染属性,您可以定义要在视图中渲染的内容。只需记得将 startRecording、stopRecording 和 mediaBlobUrl 连接到您的组件即可。
import { useReactMediaRecorder } from "react-media-recorder"; const RecordView = () => { const { status, startRecording, stopRecording, mediaBlobUrl } = useReactMediaRecorder({ video: true }); return ( <div> <p>{status}</p> <button onClick={startRecording}>开始录制</button> <button onClick={stopRecording}>停止录制</button> <video src={mediaBlobUrl} controls autoPlay loop /> </div> ); };
该 hook 接收一个对象作为参数,该对象具有与 ReactMediaRecorder 相同的选项/属性(除了 render 函数)。
可以是布尔值或 MediaTrackConstraints 对象。
类型:boolean 或 object
默认值:true
来自 MDN:
一个可选的 BlobPropertyBag 字典,可以指定以下两个属性(用于 mediaBlob):
type,表示将放入 blob 中的数组内容的 MIME 类型。endings,默认值为 "transparent",指定如何写出包含换行符 \n 的字符串。它有两个值之一:"native",表示换行符会更改以匹配主机操作系统文件系统约定,或 "transparent",表示结尾存储在 blob 中时不会更改。类型:object
默认值:
如果启用了 video,
{
type: "video/mp4"
}
如果只启用了 audio,
{
type: "audio/wav"
}
媒体流对象本身(可选)
一个可选的选项对象,将传递给 MediaRecorder。请注意,如果您通过 audio 或 video 属性 和 通过这个 mediaRecorderOptions 指定 MIME 类型,mediaRecorderOptions 具有更高的优先级。
类型:object
默认值:{}
当 MediaRecorder 开始时将被调用的 function。
类型:function()
默认值:() => null
当 MediaRecorder 停止时将被调用的 function。它 将提供 blob 和 blob URL 作为其参数。
类型:function(blobUrl: string, blob: Blob)
默认值:() => null
是否在停止时停止所有流。默认为 true
一个 function,接受一个包含字段:status、startRecording、stopRecording 和 mediaBlob 的对象。这个函数将返回一个 React 元素/组件。
类型:function
默认值:() => null
一个 boolean 值。允许您录制当前屏幕。并非所有浏览器都支持此功能。请在此处查看可用性。请注意,目前 MediaRecorder 不会同时录制两个相同的流,如果您同时提供 screen 和 video 属性,屏幕捕获将优先于视频捕获。但是,您可以提供 video 属性(作为 MediaTrackConstraints),然后它将被屏幕捕获利用(例如,height、width 等)。
可以是布尔值或 MediaTrackConstraints 对象。
类型:boolean 或 object
默认值:false
一个布尔值。如果设置为 true,将在挂载时请求媒体权限。
类型:boolean
默认值:false
render 函数中可用的属性一个字符串枚举。可能的值:
media_abortedpermission_deniedno_specified_media_foundmedia_in_useinvalid_media_constraintsno_constraintsrecorder_error一个字符串 enum。可能的值:
media_abortedpermission_deniedno_specified_media_foundmedia_in_useinvalid_media_constraintsno_constraintsrecorder_erroridleacquiring_mediarecordingstoppingstopped一个 function,调用时开始录制。
一个 function,调用时暂停录制。
一个 function,调用时恢复录制。
一个 function,调用时停止录制。
一个 function,调用时静音音频轨道。
一个 function,调用时取消静音音频轨道。
一个 blob URL,可以连接到 <audio />、<video /> 或 <a /> 元素。
一个 function,清除现有生成的 blob URL(如果有)并将工作流重置为初始 idle 状态。
一个布尔属性,表示音频是否静音。
如果您想为用户创建视频的实时预览,可以使用这个 stream 并将其附加到 <video /> 元素。请注意,这是一个静音流。这是设计如此,以避免笔记本电脑等机器上的内部麦克风反馈。
例如:
const VideoPreview = ({ stream }: { stream: MediaStream | null }) => { const videoRef = useRef<HTMLVideoElement>(null); useEffect(() => { if (videoRef.current && stream) { videoRef.current.srcObject = stream; } }, [stream]); if (!stream) { return null; } return <video ref={videoRef} width={500} height={500} autoPlay controls />; }; const App = () => ( <ReactMediaRecorder video render={({ previewStream }) => { return <VideoPreview stream={previewStream} />; }} /> );
如果您想访问实时音频流以用于声音可视化,可以使用这个 stream 作为音频源,并使用 Web Audio API 的 AudioContext 和 AnalyzerNode 功能从中提取数据。一些 JavaScript 示例可以在这里找到。
如果您发现了 bug(我可能遗漏了很多!:grinning:)或想进一步增强它,欢迎提交 PR。
谢谢!祝录制愉快!


职场AI,就用扣子
AI办公助手,复杂任务高效处理。办公效率低?扣子 空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!


多风格AI绘画神器
堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。


零代码AI应用开发平台
零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。


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


最适合小白的AI自动化工作流平台
无需编码,轻松生成可复用、可变现的AI自动化工作流

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


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


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


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


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

微信扫一扫关注公众号