• js的MediaRecorder录音录视频方法笔记


       /**
       * 录音举例说明
       * https://www.cnblogs.com/zaijin-yang/p/17306578.html
       * 通过 web 录制视频(摄像头)并上传
       * https://cloud.tencent.com/developer/article/1818977?areaId=106001
       * 视频录制基础知识-MediaRecorder
       * https://www.jianshu.com/p/ad7dfd50880e
       */

    1. import React, { useState, useEffect } from 'react'
    2. var mediaRecorder
    3. var stream
    4. var chunks = []
    5. export default function App() {
    6. return (
    7. <MyRecord />
    8. );
    9. }
    10. function MyRecord() {
    11. var [fileSize, setFileSize] = useState(0)
    12. var [url, setUrl] = useState(null)
    13. /**
    14. * 录音举例说明
    15. * https://www.cnblogs.com/zaijin-yang/p/17306578.html
    16. * 通过 web 录制视频(摄像头)并上传
    17. * https://cloud.tencent.com/developer/article/1818977?areaId=106001
    18. * 视频录制基础知识-MediaRecorder
    19. * https://www.jianshu.com/p/ad7dfd50880e
    20. */
    21. async function initRecord() {
    22. //stream = await navigator.mediaDevices.getUserMedia({ audio: true })
    23. try {
    24. stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment' } })
    25. // const videoElement = document.querySelector('video');
    26. // videoElement.srcObject = stream;
    27. //通过调用getUserMedia方法获取摄像头的实时视频流,并将其赋值给srcObject属性,从而在网页上显示实时视频。
    28. //src适用于加载已有的静态视频文件。
    29. //srcObject适用于处理实时视频流,比如从摄像头捕获到的视频。
    30. mediaRecorder = new MediaRecorder(stream);
    31. mediaRecorder.ondataavailable = event => {
    32. if (event.data.size > 0) {
    33. console.log('======ondataavailable事件触发,chunks.length:', chunks.length);
    34. setFileSize(event.data.size)
    35. chunks.push(event.data); // 将数据块追加到 chunks 数组中
    36. }
    37. };
    38. mediaRecorder.onstop = () => {
    39. console.log('======按下了停止录音键', mediaRecorder.mimeType);
    40. const blob = new Blob(chunks, { type: mediaRecorder.mimeType }); // 将数据块转换为 Blob
    41. // 此时你可以使用 blob 对象,比如上传到服务器或保存到本地文件
    42. console.log('Blob created:', blob.size);
    43. const url = URL.createObjectURL(blob); //创建新的URL表示指定的blob对象
    44. const audio = document.getElementById("aaaa"); //创建标签
    45. audio.src = url;
    46. //销毁视频,释放资源URL.revokeObjectURL(url)
    47. }
    48. } catch (e) {
    49. console.log('用户禁止了摄像头权限')
    50. }
    51. }
    52. function startRecord() {
    53. chunks = []
    54. mediaRecorder.start();
    55. }
    56. function stopRecord() {
    57. /**
    58. * mediaRecorder.state返回当前状态 (闲置中,录制中或者暂停 ) (inactive, recording, or paused.)
    59. */
    60. if (mediaRecorder.state === "recording") {
    61. mediaRecorder.stop();
    62. }
    63. }
    64. function destroyRecord() {
    65. // 终止流(这可以让浏览器上正在录音的标志消失掉)
    66. stream.getTracks().forEach(track => track.stop());
    67. stream = null;
    68. }
    69. function pauseRecord() {
    70. mediaRecorder.pause();
    71. }
    72. function resumeRecord() {
    73. mediaRecorder.resume();
    74. }
    75. var ss = { fontSize: '20px', margin: '10px' }
    76. return (
    77. <div>
    78. <video id="aaaa" controls playsInline style={{ width: '300px', height: '200px' }}></video>
    79. <h3>文件大小:{fileSize}</h3>
    80. <button style={ss} onClick={initRecord}>初始化录音</button>
    81. <button style={ss} onClick={startRecord}>开始录音</button>
    82. <button style={ss} onClick={stopRecord}>停止录音</button>
    83. <button style={ss} onClick={destroyRecord}>销毁录音</button>
    84. <button style={ss} onClick={pauseRecord}>暂停录音</button>
    85. <button style={ss} onClick={resumeRecord}>恢复录制</button>
    86. </div >
    87. );
    88. }

  • 相关阅读:
    SpringBoot实现发送邮件功能
    工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计
    服务器日志出现大量NTLM(NT LAN Manager)攻击
    微信小程序的一些基础入门
    8、RedLock协议
    2023研究生数学建模E题思路+模型+代码+论文(持续更新中) 出血性脑卒中临床智能诊疗建模
    【PID优化】基于matlab simulink正余弦算法PID优化设计【含Matlab源码 2233期】
    查看ubuntu版本
    Python大数据之PySpark(六)RDD的操作
    分享关于UE4中matinee工具的使用教程
  • 原文地址:https://blog.csdn.net/aexwx/article/details/136728791