Отправка MediaStream для размещения сервера с помощью WebRTC после его захвата с помощью getUserMedia

Я собираю аудиоданные с помощью getUserMedia(), и я хочу отправить его на свой сервер, чтобы сохранить его как Blob в поле MySQL.

Это все, что я пытаюсь сделать. Я сделал несколько попыток сделать это с помощью WebRTC, но я даже не знаю, на этот раз, если это правильно или даже лучший способ сделать это.

Может кто-нибудь мне помочь?

Вот код, который я использую для захвата звука с микрофона:

navigator.getUserMedia({
    video:false,
    audio:true,
},function(mediaStream){

    // output mediaStream to speakers:
    var mediaStreamSource=audioContext.createMediaStreamSource(mediaStream);
    mediaStreamSource.connect(audioContext.destintion);

    // send mediaStream to server:

    // WebRTC code? not sure about this...
    var RTCconfig={};
    var conn=new RTCPeerConnection(RTCconfig);

    // ???

},function(error){
    console.log('getUserMedia() fail.');
    console.log(error);
});

Как я могу отправить этот mediaStream на сервер?

После Googling вокруг Ive заглядывал в WebRTC, но это похоже на то, что вы просто общаетесь со сверстниками - на самом деле, теперь я изучаю это больше, я думаю, что это путь. Кажется, это способ общаться с браузером клиентов до веб-сервера хоста, но ничто из того, что я пытаюсь, даже не приближается к работе.

Я проходил через документацию W3C (которую я нахожу слишком абстрактной), и Ive шел через этот статью о скалах HTML5 (что вызывает больше вопросов, чем ответов). По-видимому, мне нужен метод сигнализации, может ли кто-нибудь сообщить, какой метод сигнализации лучше всего подходит для отправки медиапоток, XHR, XMPP, SIP, Socket.io или что-то еще?

Что мне нужно на сервере для поддержки приема WebRTC? На моем веб-сервере работает базовый стек LAMP.

Также лучше дождаться завершения записи mediaStream до отправки на сервер или лучше отправить mediaStream в качестве записи? Я хочу знать, буду ли я делать это правильно. Я написал загрузчики файлов в javascript и HTML5, но загрузка одной из этих mediaStreams кажется адской более сложной, и я не уверен, что я приближаюсь к ней правильно.

Любая помощь по этому поводу будет принята с благодарностью.

Ответ 1

Вы не можете загружать сам живой поток во время его работы. Это потому, что это поток LIVE.

Итак, это оставляет вам несколько вариантов.

  • Запись аудиопотока с использованием одного из многих рекордеров там RecordRTC работает достаточно хорошо. Подождите, пока поток будет завершен, а затем загрузите файл.
  • Отправляйте меньшие фрагменты записанного аудио с помощью таймера и объедините их снова на стороне сервера. Это пример этого.
  • Отправляйте аудиопакеты по мере их появления на веб-серверах на свой сервер, чтобы вы могли ими манипулировать и объединять их. Моя версия RecordRTC делает это.
  • Сделайте реальное одноранговое соединение с вашим сервером, чтобы он мог захватить необработанный поток rtp, и вы можете записывать поток с использованием кода более низкого уровня. Это можно легко сделать с помощью Janus-Gateway.

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

У Firefox фактически есть собственное собственное решение для записи, но оно не поддерживается в Chrome, поэтому оно может не работать в вашей ситуации.

В стороне, упомянутый метод сигнализации предназначен для создания сеанса/уничтожения и не имеет никакого отношения к самому медиа. Вы бы действительно беспокоились об этом, если бы использовали возможное решение № 4, показанное выше.

Ответ 2

Хороший API для вас будет API MediaRecorder, но он менее поддерживается, чем API веб-аудио, поэтому вы можете сделать это с помощью ScriptNode или используйте Recorder.js (или создайте его для создания собственного сценария).