test.html 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. }
  12. #video {
  13. width: 100%;
  14. height: 100%;
  15. object-fit: cover;
  16. }
  17. </style>
  18. <script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>
  19. <script>
  20. // VConsole 默认会挂载到 `window.VConsole` 上
  21. var vConsole = new window.VConsole();
  22. </script>
  23. </head>
  24. <body>
  25. <video id="video" autoplay></video>
  26. <button id="saveButton">保存</button>
  27. <script>
  28. const video = document.getElementById('video');
  29. let mediaRecorder;
  30. let recordedBlobs;
  31. if (navigator.mediaDevices.getUserMedia) {
  32. navigator.mediaDevices.getUserMedia({
  33. video: {
  34. width: { ideal: 1920 },
  35. height: { ideal: 1080 }
  36. }
  37. })
  38. .then(function (stream) {
  39. video.srcObject = stream;
  40. mediaRecorder = new MediaRecorder(stream);
  41. console.log('mediaRecorder : ', mediaRecorder.state, mediaRecorder)
  42. mediaRecorder.ondataavailable = event => {
  43. console.log('event : ', event)
  44. if (event.data && event.data.size > 0) {
  45. recordedBlobs.push(event.data);
  46. }
  47. };
  48. mediaRecorder.start(1000);
  49. console.log('mediaRecorder : ', mediaRecorder.state, mediaRecorder)
  50. recordedBlobs = [];
  51. })
  52. .catch(function (err) {
  53. console.log("Something went wrong!", err);
  54. });
  55. }
  56. // 在用户点击按钮时保存录制的视频
  57. document.querySelector('#saveButton').addEventListener('click', () => {
  58. mediaRecorder.stop();
  59. console.log('recordedBlobs : ', recordedBlobs)
  60. const blob = new Blob(recordedBlobs, { type: 'video/webm' });
  61. const url = window.URL.createObjectURL(blob);
  62. const a = document.createElement('a');
  63. a.style.display = 'none';
  64. a.href = url;
  65. a.download = 'test.webm';
  66. document.body.appendChild(a);
  67. a.click();
  68. setTimeout(() => {
  69. document.body.removeChild(a);
  70. window.URL.revokeObjectURL(url);
  71. }, 100);
  72. });
  73. </script>
  74. </body>
  75. </html>