Отправка 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 (или создайте его для создания собственного сценария).