HTML, CSS, & JavaScript на Classi c Сайты Google - Почему не работает запись видео? - PullRequest
0 голосов
/ 19 июня 2020

Вот этот код здесь , который я хочу загрузить на Classi c Сайты Google. (Код находится в самом низу ссылки, по которой вы можете щелкнуть.)

Я могу установить и запустить части HTML и CSS, чтобы записать видео, но часть JavaScript Понятия не имею, почему это не работает. Код идет в таком порядке.

Я могу заставить JavaScript делать другие вещи, но не это. Я набираю «Скопировано и вставлено JavaScript Code» при использовании кода с сайта, указанного выше, но безуспешно.

Что я делаю не так? Как мне запустить эту JavaScript деталь?

<!-- HTML -->


  
    Start
  
  Preview
  


  
    Stop
  
  Recording
  
  
    Download
  


  
// css body {font: 14px "Open Sans", "Arial", sans-serif; } видео {margin-top: 2px; граница: 1px solid черный; } .button {курсор: указатель; дисплей: блок; ширина: 160 пикселей; граница: 1px solid черный; размер шрифта: 16 пикселей; выравнивание текста: центр; padding-top: 2 пикселя; padding-bottom: 4px; цвет белый; цвет фона: темно-зеленый; текстовое оформление: нет; } h2 {край-низ: 4px; } .left {margin-right: 10px; плыть налево; ширина: 160 пикселей; отступ: 0 пикселей; } .right {margin-left: 10px; плыть налево; ширина: 160 пикселей; отступ: 0 пикселей; } .bottom {ясно: оба; padding-top: 10 пикселей; } let preview = document.getElementById («предварительный просмотр»); пусть запись = document.getElementById ("запись"); пусть startButton = document.getElementById ("startButton"); let stopButton = document.getElementById ("stopButton"); пусть downloadButton = document.getElementById ("downloadButton"); пусть logElement = document.getElementById ("журнал"); пусть recordTimeMS = 5000; журнал функций (сообщение) {logElement.inner HTML + = сообщение + "\ п"; } функция ожидания (delayInMS) {вернуть новое обещание (resolve => setTimeout (resolve, delayInMS)); } функция startRecording (поток, lengthInMS) {let Recorder = new MediaRecorder (stream); пусть данные = []; рекордер.ondataavailable = событие => data.pu sh (event.data); рекордер.старт (); журнал (рекордер.состояние + «для» + (lengthInMS / 1000) + «секунды ...»); let stop = новое обещание ((разрешить, отклонить) => {рекордер.onstop = разрешить; рекордер.onerror = событие => отклонить (имя.события);}); пусть записано = ждать (lengthInMS) .then (() => Recorder.state == "запись" && Recorder.stop ()); return Promise.all ([остановлен, записан]) .then (() => данные); } остановка функции (поток) {stream.getTracks (). forEach (track => track.stop ()); } startButton.addEventListener ("клик", function () {navigator.mediaDevices.getUserMedia ({video: true, audio: true}). then (stream => {preview.srcObject = stream; downloadButton.href = stream; preview. captureStream = preview.captureStream || preview.mozCaptureStream; вернуть новое обещание (resolve => preview.onplaying = resolve);}). then (() => startRecording (preview.captureStream (), recordTimeMS)) .then (loadedChunks = > {let recordBlob = new Blob (loadedChunks, {type: "video / webm"}); recording.sr c = URL.createObjectURL (loadedBlob); downloadButton.href = record.src; downloadButton.download = "RecordedVideo. webm "; log (" Успешно записано "+ записанный function () {stop (preview.srcObject);}, ложь);

1 Ответ

2 голосов
/ 19 июня 2020

Хорошо, из того, что я вижу, код на самом деле правильный и без каких-либо проблем, если вы помещаете все это в один файл HTML, вы можете добавить тег заголовка, а затем поместить CSS стилизация внутри тега вместо тега.

И добавьте сценарий JS внутри тега body в конце кода, и он должен запустить код.

У меня есть добавил код, который работает ниже, чтобы вы могли сравнить его со своим кодом и посмотреть, в чем разница:)

    
  
    
      body {
      font: 14px "Open Sans", "Arial", sans-serif;
      }
    
      video {
      margin-top: 2px;
      border: 1px solid black;
      }
    
      .button {
      cursor: pointer;
      display: block;
      width: 160px;
      border: 1px solid black;
      font-size: 16px;
      text-align: center;
      padding-top: 2px;
      padding-bottom: 4px;
      color: white;
      background-color: darkgreen;
      text-decoration: none;
      }
    
      h2 {
      margin-bottom: 4px;
      }
    
      .left {
      margin-right: 10px;
      float: left;
      width: 160px;
      padding: 0px;
      }
    
      .right {
      margin-left: 10px;
      float: left;
      width: 160px;
      padding: 0px;
      }
    
      .bottom {
      clear: both;
      padding-top: 10px;
      }
    
  
  
    
    
      Start
    
    Preview
    
    
    
    
      Stop
    
    Recording
    
    
      Download
    
    
    
    
let preview = document.getElementById ("preview"); пусть запись = document.getElementById ("запись"); пусть startButton = document.getElementById ("startButton"); let stopButton = document.getElementById ("stopButton"); пусть downloadButton = document.getElementById ("downloadButton"); пусть logElement = document.getElementById ("журнал"); пусть recordTimeMS = 5000; журнал функций (сообщение) {logElement.inner HTML + = сообщение + "\ п"; } функция ожидания (delayInMS) {вернуть новое обещание (resolve => setTimeout (resolve, delayInMS)); } функция startRecording (поток, lengthInMS) {let Recorder = new MediaRecorder (stream); пусть данные = []; рекордер.ondataavailable = событие => data.pu sh (event.data); рекордер.старт (); журнал (рекордер.состояние + «для» + (lengthInMS / 1000) + «секунды ...»); let stop = новое обещание ((разрешить, отклонить) => {рекордер.onstop = разрешить; рекордер.onerror = событие => отклонить (имя.события);}); пусть записано = ждать (lengthInMS) .then (() => Recorder.state == "запись" && recorder.stop ()); return Promise.all ([остановлен, записан]) .then (() => данные); } остановка функции (поток) {stream.getTracks (). forEach (track => track.stop ()); } startButton.addEventListener ("клик", function () {navigator.mediaDevices.getUserMedia ({video: true, audio: true}). then (stream => {preview.srcObject = stream; downloadButton.href = stream; preview. captureStream = preview.captureStream || preview.mozCaptureStream; вернуть новое обещание (resolve => preview.onplaying = resolve);}). then (() => startRecording (preview.captureStream (), recordTimeMS)) .then (loadedChunks = > {let recordBlob = new Blob (loadedChunks, {type: "video / webm"}); record.sr c = URL.createObjectURL (loadedBlob); downloadButton.href = record.src; downloadButton.download = "RecordedVideo. webm "; log (" Успешно записано "+ loadedBlob.size +" bytes of "+ loadedBlob.type +" media. ");}) .catch (log);}, false); stopButton.addEventListener (" click ", function () {stop (preview.srcObject);}, ложь);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...