我已经设法在浏览器上录制并下载了一段视频,它在浏览器上运行良好,完全没有问题,但当我试图在视频播放器(POT播放器)上观看它时,上面没有曲目.为什么?

<body>
    <video id="video" width="640" height="480" autoplay></video>
    <button id="startRecording">Start Recording</button>
    <button id="stopRecording" disabled>Stop Recording</button>
    <a id="downloadLink" style="display: none;">Download Video</a>

    <script>
        let mediaRecorder;
        let recordedChunks = [];

        navigator.mediaDevices.getUserMedia({ video: true })
            .then((stream) => {
                const video = document.getElementById('video');
                video.srcObject = stream;

                mediaRecorder = new MediaRecorder(stream);

                mediaRecorder.ondataavailable = (event) => {
                    if (event.data.size > 0) {
                        recordedChunks.push(event.data);
                    }
                };

                mediaRecorder.onstop = () => {
                    const blob = new Blob(recordedChunks, { type: 'video/webm' });
                    recordedChunks = [];

                    const downloadLink = document.getElementById('downloadLink');
                    downloadLink.href = URL.createObjectURL(blob);
                    downloadLink.download = 'recorded_video.webm';
                    downloadLink.style.display = 'block';
                };
            })
            .catch((error) => {
                if (error.name === 'NotAllowedError' || error.name === 'PermissionDeniedError') {
                    console.error('User denied camera access.');
                } else {
                    console.error('Error accessing camera:', error);
                }
            });

        document.getElementById('startRecording').addEventListener('click', () => {
            recordedChunks = [];
            mediaRecorder.start();
            document.getElementById('startRecording').disabled = true;
            document.getElementById('stopRecording').disabled = false;
        });

        document.getElementById('stopRecording').addEventListener('click', () => {
            mediaRecorder.stop();
            document.getElementById('startRecording').disabled = false;
            document.getElementById('stopRecording').disabled = true;
        });
    </script>
</body>

能帮我改进 playbook 吗?

推荐答案

将BLOB转换为MP4文件,因为POT播放器支持MP4格式.首先您需要将视频录制为MP4格式,然后将其用作MP4视频文件

const blob = new Blob(recordedChunks, { type: "video/mp4" });

<video id="video" width="640" height="480" autoplay></video>
    <div>
      <button id="startRecording">Start Recording</button>
      <button id="stopRecording" disabled>Stop Recording</button>
    </div>

    <a id="downloadLink" style="display: none">Download Video</a>
    <video width="320" height="240" controls id="videoPlayer">
      <source src="" type="video/mp4" />
      <source src="" type="video/ogg" />
      Your browser does not support the video tag.
    </video>
    <script>
      let mediaRecorder;
      let recordedChunks = [];
      const videoPlayer = document.getElementById("videoPlayer");
      var constraints = {
        audio: true,
        video: true,
      };
      navigator.mediaDevices
        .getUserMedia(constraints)
        .then((stream) => {
          const video = document.getElementById("video");
          video.srcObject = stream;

          mediaRecorder = new MediaRecorder(stream);

          mediaRecorder.ondataavailable = (event) => {
            if (event.data.size > 0) {
              recordedChunks.push(event.data);
            }
          };

          mediaRecorder.onstop = () => {
            const blob = new Blob(recordedChunks, { type: "video/mp4" });
            recordedChunks = [];
            const newObjectUrl = URL.createObjectURL(blob);
            videoPlayer.src = newObjectUrl;
            videoPlayer.play();

            const myFile = new File([blob], "demo.mp4", { type: "video/mp4" });

            const downloadLink = document.getElementById("downloadLink");
            downloadLink.href = URL.createObjectURL(myFile);
            downloadLink.download = "recorded_video.mp4";
            downloadLink.style.display = "block";
          };
        })
        .catch((error) => {
          if (error.name === "NotAllowedError" || error.name === "PermissionDeniedError") {
            console.error("User denied camera access.");
          } else {
            console.error("Error accessing camera:", error);
          }
        });

      document.getElementById("startRecording").addEventListener("click", () => {
        recordedChunks = [];
        mediaRecorder.start();
        document.getElementById("startRecording").disabled = true;
        document.getElementById("stopRecording").disabled = false;
      });

      document.getElementById("stopRecording").addEventListener("click", () => {
        mediaRecorder.stop();
        document.getElementById("startRecording").disabled = false;
        document.getElementById("stopRecording").disabled = true;
      });
    </script>

Javascript相关问答推荐

容器如何更改默认插槽中子项的显示?

使用useup时,React-Redux无法找到Redux上下文值

没有输出到带有chrome.Devtools扩展的控制台

将自定义排序应用于角形数字数组

如何用拉威尔惯性Vue依赖下拉?

如何在JavaScript文件中使用Json文件

实现JS代码更改CSS元素

在执行异步导入之前判断模块是否已导入()

如何通过将实例方法的名称传递给具有正确类型的参数的继承方法来调用实例方法?

如何使用JavaScript拆分带空格的单词

在使用REACT更改了CSS类之后,无法更改CSS样式

每次重新呈现时调用useState initialValue函数

Docent.cloneNode(TRUE)不克隆用户输入

当我点击一个按钮后按回车键时,如何阻止它再次被点击

如何在FiRestore中的事务中使用getCountFromServer

我的NavLink活动类在REACT-ROUTER-V6中出现问题

bootstrap S JS赢得了REACT中的函数/加载

固定动态、self 调整的优先级队列

如何在css中裁剪成一定Angular 的圆的一部分,而不需要复杂的多边形

如何在底部重叠多个div?