Как потоковое аудио в приложении phonegap
Я пытаюсь реализовать звуковые вызовы в приложении phonegap, которое я создаю. Я использую PeerJS, чтобы подключить 2 клиента. Эта часть работает. Но проблема связана с URL-адресом, созданным для медиапотока. Это выглядит так:
<audio src="blob:file%3A///6212fd77-7d1e-46ba-9abe-cfe96d414b28"></audio>
Вместо чего-то вроде:
<audio src="blob:http%3A///url-to-server.com/6212fd77-7d1e-46ba-9abe-cfe96d414b28"></audio>
Вот почему ничего не слышно с обоих устройств (я тестирую с помощью genymotion и моего смартфона).
Но странно, что он работает, когда я тестирую из браузера и моего телефона. Когда я разговариваю со встроенным микрофоном в своем ноутбуке, я слышу его на своем телефоне. Но когда я говорю в своем телефоне, на моем ноутбуке ничего не слышно.
Для справки это то, что я получаю, когда я выбираю элемент аудио, который воспроизводит медиапоток:
<audio src="blob:http%3A//localhost%3A8100/861180b2-2c12-4134-a6da-89fcb40ef372"></audio>
Не уверен, действительно ли это проблема.
Я использую ionic для разработки приложения, и он плавно интегрируется с пешеходным переходом, который в основном просто упаковывает недавний браузер Chrome с вашим приложением, чтобы он мог без проблем использовать блестящие новые вещи.
Вот код для запроса микрофона:
function getAudio(successCallback, errorCallback){
navigator.getUserMedia({
audio: true,
video: false
}, successCallback, errorCallback);
}
И затем я вызываю его всякий раз, когда кто-то инициирует вызов:
getAudio(
function(MediaStream){
console.log('now calling ' + to);
var call = peer.call(to, MediaStream);
call.on('stream', onReceiveStream);
});
Затем onReceiveStream
преобразует медиапоток в URL-адрес, который затем присваивается звуковому элементу:
function onReceiveStream(stream){
var audio = document.querySelector('audio');
audio.src = window.URL.createObjectURL(stream);
audio.onloadedmetadata = function(e){
console.log('now playing the audio');
audio.play();
}
}
Любые идеи? Спасибо заранее.
Обновление
Кажется, что реальная проблема заключается в том, что звук не может быть записан с телефона, потому что он не запрашивает доступ к микрофону при вызове navigator.getUserMedia
. Я подтвердил, что navigator.getUserMedia
доступен, когда я тестировал с помощью genymotion. Хотя он также не запрашивает доступ в genymotion. Я использую recordRTC в качестве поставщика прокладки.
обновление 2
ok Я отказался от этого. Невозможно запросить микрофон. То, что я сейчас пытаюсь сделать, это PhoneRTC. Но я снова застрял в проблеме. Это не здание, когда у меня установлен плагин. Пожалуйста, ознакомьтесь с этой проблемой на страницах проекта Github для получения более подробной информации:
https://github.com/alongubkin/phonertc/issues/151
Ответы
Ответ 1
Чтобы получить доступ к ресурсам телефона, вы должны объявить их на AndroidManifest.xml, поэтому конечный пользователь знает об этом при установке приложения.
Кордоба и плагин Phongap создают приложение, даже если вы не используете их в качестве библиотеки веб-просмотра, поэтому вам нужно попросить разрешения в манифесте.
для микрофона и камеры разрешения:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
но кажется, что некоторые плагины также делают некоторые трюки и нуждаются в еще одном:
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />