16

作成中の 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.getUserMediaGenymotionでテストしたところ、アクセス可能であることを確認しました。Genymotionでもアクセスを要求していませんが。shim プロバイダーとしてrecordRTCを使用しています。

更新 2

わかりました、私はこれをあきらめました。マイクを要求することは実際には不可能です。私が今試しているのはPhoneRTCです。しかし、私は再び問題に行き詰まっています。プラグインをインストールしてもビルドされません。詳細については、プロジェクトの Github ページでこの問題を確認してください: https://github.com/alongubkin/phonertc/issues/151

4

1 に答える 1

2

電話リソースにアクセスするには、AndroidManifest.xml で宣言する必要があります。これにより、最終ユーザーはアプリのインストール時にそれを知ることができます。

Cordova や Phongap プラグインは、webview ライブラリとして使用していない場合でもアプリケーションをビルドするため、マニフェストで許可を求める必要があります。

マイクとカメラの権限は次のとおりです。

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

しかし、一部のプラグインもいくつかのトリックを実行するようで、もう 1 つ必要です。

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
于 2015-06-29T16:13:26.280 に答える