0

デスクトップ PC のマイクと Android スマートフォンの間で rtp 接続を取得しようとしています。

gstreamer を使用してデータを取得します。他のアプリケーションが同じシステムでこのマイクを同時に使用しているため、データが公開される tcpsink があります。

これは、次の呼び出しで行われます。

gst-launch-0.10 -v alsasrc ! 'audio/x-raw-int, depth=16, width=16, \ 
             endianness=1234, channels=1, rate=16000' ! \ 
             tcpserversink host=localhost port=20000

次に、tcp 接続を取得して rtp ストリームに変換し、udp 経由でデータを公開する 2 番目のストリームを作成します。

gst-launch-0.10 tcpclientsrc host=localhost protocol=0 port=20000 ! \
             audio/x-raw-int,depth=16, width=16,endianness=1234, channels=1,\
             rate=16000 ! lamemp3enc target=1 bitrate=64 cbr=true ! mad ! \
             audioconvert ! audioresample ! mulawenc ! rtppcmupay pt=96 ! \
             udpsink host=129.70.134.128 port=6000

これは、ローカルホストでvlcプレーヤーで再生中に機能します

vlc rtp://129.70.134.128:6000

ここで、udpsink のホストを Android の電話に変更します。これは、mplayer アプリで遊んでいるときに叫ぶことも行います。

この後、最後のステップは、自分のアプリでサウンドを再生することです。

android.net.rtpクラスでストリームを取得しようとしています 。

AudioManager audioManager = (AudioManager);
mContext.getSystemService(mContext.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
AudioStream inRtpStream = new AudioStream(createInet("127.0.0.1"));

inRtpStream.associate(createInet(url), 6000);
inRtpStream.setMode(RtpStream.MODE_RECEIVE_ONLY);  
inRtpStream.setCodec(AudioCodec.PCMU);
inRtpStream.setDtmfType(96);
// Initialize an AudioGroup and attach an AudioStream
AudioGroup main_grp = new AudioGroup();
main_grp.setMode(AudioGroup.MODE_NORMAL);
inRtpStream.join(main_grp);

しかし、沈黙があります。ログ出力から、アプリケーションが再生しようとしている何らかのデータがあると思われます。

DEBUG   AudioGroup  stream[57] is configured as PCMU 8kHz 20ms mode 2
DEBUG   AudioGroup  stream[64] is configured as RAW 8kHz 32ms mode 0
DEBUG   AudioGroup  stream[64] joins group[63]
DEBUG   AudioGroup  group[63] switches from mode 0 to 2
DEBUG   AudioGroup  stream[57] joins group[63]
DEBUG   AudioGroup  reported frame count: output 1149, input 384
DEBUG   AudioGroup  adjusted frame count: output 1149, input 512
DEBUG   AudioGroup  latency: output 302, input 64

ストリームを開始したり、スピーカーのスイッチを入れたりするなどの何かが欠けていますか?

使用可能なすべてのボリューム スライダーが最大になっています。また、マニフェスト ファイルで INTERNET と RECORD_AUDIO のアクセス許可を要求しました。

コーデックも同じである必要があります。

答えてくれてありがとう

4

3 に答える 3

1

audioStream を作成するとき、ポート番号はランダムに生成されます。AudioStream getLocalPort() 関数を呼び出して自分のものを取得したら、sip などのシグナリング プロトコルを介して、または単純に TCP または UDP を介して IP + ポートを他のデバイスに送信する必要があります。他のデバイスも同様に送信する必要があります。他のデバイスからこのデータを取得したら、リモート IP とリモート ポートを使用して、自分の側で関連付け機能を使用できます。他のデバイスの IP を取得する必要はないことに注意してください。それをハードコードすることはできますが、(繰り返しますが) ランダムに生成されるため、ポートに関しては何もできません。

乾杯

于 2013-11-15T08:07:53.437 に答える