Подтвердить что ты не робот

Запись видео в формате HTML 5 и сохранение потока

Использование Html 5 Я хочу записать видео и сохранить поток в локальном файле. Ниже приведен код. При нажатии кнопки он уже вызывает камеру и захватывает видео в теге "VIDEO" HTML. Можно ли сохранить поток в локальный файл? Или я могу сохранить его как файл MP4?

<!DOCTYPE html>
<html>
<head>

<script type="text/javascript">

function enter() {

    if (navigator.mozGetUserMedia) { 
       navigator.myGetMedia=navigator.mozGetUserMedia;
       navigator.myGetMedia({video: true}, connect, error); 
    } 
    else {
       alert("NO");
    }

    function connect(stream) {

        var video = document.getElementById("my_video");
            video.src = window.URL ? window.URL.createObjectURL(stream) : stream;
            video.play();

        var canvas = document.getElementById("c"); 
    }

    function error(e) { console.log(e); }

}

</script>

</head>    
<body>
    <canvas width="640" height="480" id="c"></canvas>
    <input type="button" value="RECORD" onClick="enter()"/>
    <input type="button" value="SAVE" />
    <video id="my_video" width="640" height="480"/>
</body>
</html>

Я хочу сохранить поток при нажатии кнопки сохранения.

4b9b3361

Ответ 1

RecordRTC: аудио/видеозапись WebRTC

https://github.com/muaz-khan/WebRTC-Experiment/tree/master/RecordRTC

  • Запись звука для Chrome и Firefox
  • Запись видео /Gif для Chrome; (Firefox имеет немного проблем, скоро будет восстановлен)

Демо: https://www.webrtc-experiment.com/RecordRTC/


Создание .webm видео из getUserMedia()

http://ericbidelman.tumblr.com/post/31486670538/creating-webm-video-from-getusermedia

Демо: http://html5-demos.appspot.com/static/getusermedia/record-user-webm.html


Захват аудио и видео в HTML5

http://www.html5rocks.com/en/tutorials/getusermedia/intro/

Ответ 2

MediaRecorder API - это решение, которое вы ищете,

Firefox поддерживал его некоторое время, а шум - это хром, который будет реализовывать его в следующем выпуске (chrome 48), но предположим, что вам, возможно, потребуется включить флаг эксперимента, возможно, флаг не будет потребуется от chrome версии 49, для получения дополнительной информации ознакомьтесь с этим chrome issue.

Между тем, пример того, как это сделать в firefox:

var video, reqBtn, startBtn, stopBtn, ul, stream, recorder;
video = document.getElementById('video');
reqBtn = document.getElementById('request');
startBtn = document.getElementById('start');
stopBtn = document.getElementById('stop');
ul = document.getElementById('ul');
reqBtn.onclick = requestVideo;
startBtn.onclick = startRecording;
stopBtn.onclick = stopRecording;
startBtn.disabled = true;
ul.style.display = 'none';
stopBtn.disabled = true;

function requestVideo() {
  navigator.mediaDevices.getUserMedia({
      video: true,
      audio: true
    })
    .then(stm => {
      stream = stm;
      reqBtn.style.display = 'none';
      startBtn.removeAttribute('disabled');
      video.src = URL.createObjectURL(stream);
    }).catch(e => console.error(e));
}

function startRecording() {
  recorder = new MediaRecorder(stream, {
    mimeType: 'video/mp4'
  });
  recorder.start();
  stopBtn.removeAttribute('disabled');
  startBtn.disabled = true;
}


function stopRecording() {
  recorder.ondataavailable = e => {
    ul.style.display = 'block';
    var a = document.createElement('a'),
      li = document.createElement('li');
    a.download = ['video_', (new Date() + '').slice(4, 28), '.webm'].join('');
    a.href = URL.createObjectURL(e.data);
    a.textContent = a.download;
    li.appendChild(a);
    ul.appendChild(li);
  };
  recorder.stop();
  startBtn.removeAttribute('disabled');
  stopBtn.disabled = true;
}
<div>

  <button id='request'>
    Request Camera
  </button>
  <button id='start'>
    Start Recording
  </button>
  <button id='stop'>
    Stop Recording
  </button>
  <ul id='ul'>
    Downloads List:
  </ul>

</div>
<video id='video' autoplay></video>

Ответ 3

В настоящее время нет готового к выпуску HTML5 решения для записи видео через Интернет. Текущие доступные решения заключаются в следующем:

Захват HTML файлов

Работает на мобильных устройствах и использует приложение захвата ОС для захвата видео и загрузки/отправки его на веб-сервер. Вы получите файлы .mov на iOS (они не воспроизводятся на Android, которые я пробовал) и .mp4 и .3gp на Android. По крайней мере, кодеки будут такими же: H.264 для видео и AAC для аудио в 99% устройств.

HTML Media Capture

Изображение предоставлено https://addpipe.com/blog/the-new-video-recording-prompt-for-media-capture-in-ios9/

Flash и медиа-сервер на рабочем столе.

Запись видео во Flash работает следующим образом: аудио и видео данные захватываются с веб-камеры и микрофона, кодируются с помощью Sorenson Spark или H.264 (видео) и Nellymoser Asao или Speex (аудио), затем он передается (rtmp) в медиа-сервер (Red5, AMS, Wowza), где он сохраняется в файлах .flv или .f4v.

Предложение MediaStream Recording

Запись MediaStream представляет собой предложение Целевой группы по захвату медиа (совместная целевая группа между рабочими группами WebRTC и Device API) для JS API, цель которой - сделать базовую видеозапись в браузере очень простой.

Не поддерживается основными браузерами. Когда это произойдет, вы, скорее всего, столкнетесь с разными типами файлов (как минимум .ogg и .webm) и аудио/видео кодеками в зависимости от браузера.

Коммерческие решения

Есть несколько саасов и программных решений, которые будут обрабатывать некоторые или все вышеперечисленное, включая addpipe.com, HDFVR, Nimbb и Cameratag.

Дальнейшее чтение:

Ответ 4

Вот элегантная библиотека, которая записывает видео во всех поддерживаемых браузерах и поддерживает загрузку:

https://www.npmjs.com/package/videojs-record