Запись видео и аудио и загрузка на сервер

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

  • WebRTC
    Я знаю, что с помощью WebRTC мы можем получить поток с веб-камеры и микрофона. Я нашел много статей об одном и том же, но ни один из них не объяснил, как извлечь из этого потока blob и сохранить его или загрузить на сервер. То, что у меня есть, - это получить userMediaStream и показать его в браузере, создав URL-адрес объекта blob

    navigator.getUserMedia  = navigator.getUserMedia ||
                          navigator.webkitGetUserMedia ||
                          navigator.mozGetUserMedia ||
                          navigator.msGetUserMedia;
    
    var video = document.querySelector('video');
    
    if (navigator.getUserMedia) {
      navigator.getUserMedia({audio: true, video: true}, function(stream) {
       video.src = window.URL.createObjectURL(stream);
    }, errorCallback);
    } else {
      video.src = 'somevideo.webm'; // fallback.
    } 
    

    Как извлечь объект из этого потока, чтобы я мог его сохранить или загрузить на сервер?

  • RecorRTC
    RecordRTC - это библиотека, написанная Маузом Ханом для видео/видеозаписи, которая на самом деле хорошая. Используя эту библиотеку, я могу записывать видео и аудио, но есть некоторые проблемы с этим, как показано ниже.

    • В chrome я получаю два Blob объекта один для аудио и один для видео. Чтобы генерировать конечный файл, мне нужно объединить эти файлы в окончательный видеофайл. Я использую FFMPEG для преобразования и объединения файлов на сервере.
    • Он отлично работает с коротким видео, хотя долгое время конвертирует файлы на сервер, но проблема начинается с длинных файлов записи. Я получаю Array memory out of exception для записи больше 4 min и когда размер блоба превышает 10 MB
  • MediaStreamRecorder
    Это еще одна библиотека от Mauz Khan, которая дает записанный blob после определенного временного интервала. Я думал, что это решит проблему исключения памяти. Поэтому я реализовал это как ниже

    • Возьмите блок blob на интервал и отправьте его на сервер

    • Преобразование блока blob в маленький видеофайл с помощью FFMPEG

    • В конце слейте весь мелкий файл в финал с помощью FFMPEG полного видеофайла

    • Проблема с этим заключается в том, что небольшой кусок блоба сохраняется в небольшом видеофайле, кажется, что начальный байт файла поврежден, поэтому он становится повесившимся во время запуска каждого небольшого файла и после слияния всего файла с окончательным завершенным видео, получает видео зависать и слышать шум "trrrrrr" после каждого интервала
    • Также видеозахват для длительного видео

Теперь я собираюсь записывать видео, используя чистый javascript WebRTC UserMedia API, но теперь я действительно шокирован, потому что нет ни одной статьи, которая объясняет How to record video with audio and upload to server. Каждая статья или ответ показывает только get UserMedia and show stream in video tag как показанный код в приведенном выше примере. Я уже трачу много времени на это. пожалуйста, предложите любое решение. Также будет хорошо, если есть какая-либо платная библиотека или услуга.

Ответ 1

Я знаю, что этот ответ приходит поздно, но теперь есть стандартное формирование, чтобы сделать это изначально: MediaRecorder, поддерживаемый в Chrome и Firefox справа Теперь.

Существует образец для функциональности клиентской стороны, которую вы хотите здесь. Затем вы можете взять blob и загрузить его как часть запроса POST на сервер. Таким образом вы получаете WebM, который вы все еще можете перекодировать на сервере (например, с помощью ffmpeg).