作成中の 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>
ただし、これが実際に問題であるかどうかはよくわかりません。
私はアプリの開発にイオンを使用しており、クロスウォークとスムーズに統合します。これは、基本的に最近のクロムブラウザーをアプリにパッケージ化するだけで、光沢のある新しいものを問題なく使用できます。
マイクをリクエストするコードは次のとおりです。
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 に変換し、それを audio 要素に割り当てます。
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でもアクセスを要求していませんが。shim プロバイダーとしてrecordRTCを使用しています。
更新 2
わかりました、私はこれをあきらめました。マイクを要求することは実際には不可能です。私が今試しているのはPhoneRTCです。しかし、私は再び問題に行き詰まっています。プラグインをインストールしてもビルドされません。詳細については、プロジェクトの Github ページでこの問題を確認してください: https://github.com/alongubkin/phonertc/issues/151