gpt4 book ai didi

java - 在使用 gstreamer 发布的 Android 上播放 rtp 流

转载 作者:行者123 更新时间:2023-12-02 06:46:08 24 4
gpt4 key购买 nike

我正在尝试在台式电脑上的麦克风和 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 发布数据

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

我是否错过了诸如启动流或打开扬声器之类的操作?

所有可用的音量 slider 均已调至最大。我还在 list 文件中请求了 INTERNET 和 RECORD_AUDIO 权限。

编解码器也应该相同。

感谢您的回答

最佳答案

您应该在“new AudioStream(createInet("127.0.0.1"));”中传递实际的 IP 地址,而不是环回地址 127.0.0.1

关于java - 在使用 gstreamer 发布的 Android 上播放 rtp 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18616406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com