我正在尝试在台式电脑上的麦克风和安卓智能手机之间建立 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 发布数据
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 权限。
编解码器也应该相同。
谢谢你的回答