从VLC/ffmpeg接收Android RTP/UDP音频流

3
我找了半天好的答案,但我的IT技术入门级别,非常感谢您提供任何帮助。
我想实现的是在ffmpeg或vlc中流式传输音频(mp3文件),并通过udp/rtp在Android设备上接收它。
这是我自己能够了解到的:
1)有Android类AudioStream和RTPStream。我不知道如何使用它。例如,我通过ffmpeg创建一个流:ffmpeg -re -i mymp3.mp3 -ar 8000 -acodec copy -f rtp rtp://192.168.0.100:5533,其中192.168.0.100是我的Android设备的地址。现在我想接收并播放它。
我在Stack上找到了这样的东西:
AudioStream audioStream;
AudioGroup audioGroup;
AudioCodec codec = AudioCodec.PCMU;
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build();
StrictMode.setThreadPolicy(policy);
AudioManager audio = (AudioManager)getSystemService(AUDIO_SERVICE);
audio.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioGroup = new AudioGroup();
audioGroup.setMode(AudioGroup.MODE_NORMAL);
InetAddress inetAddress;
try {
    inetAddress = InetAddress.getByName("163.11.62.208");
    audioStream = new AudioStream(inetAddress);
    audioStream.setMode(RtpStream.MODE_RECEIVE_ONLY);
    audioStream.setCodec(codec);
    InetAddress inetAddressRemote = InetAddress.getByName("163.11.169.206");
    audioStream.associate(inetAddressRemote, 5004);
    audioStream.join(audioGroup);
}

第一个inetAddress 163.11.62.208 是什么?第二个inetAddress 163.11.169.206 又是什么?我不应该只给一个流的地址吗?

2) 我能提交仅为PCMU格式的流吗?我可以流式传输mp3文件吗?

3) 这是否可行?


有关此事有任何更新吗? - sravan953
1个回答

4

我已经在我们的服务器和Android上实现了Cisco Jabber集成,并且设置类似。

audioStream = new AudioStream(inetAddress)

inetAddress(163.11.62.208)是该Android设备的本地网络地址。我们可以通过以下方式获取它:

WifiManager wifiMgr = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
int ip = wifiInfo.getIpAddress();
String ipAddress = Formatter.formatIpAddress(ip);
Log.w(TAG, "ipAddress=" + ipAddress);
inetAddress = InetAddress.getByName(ipAddress);

可能还有其他方法,但我不是安卓开发者。

audioStream.associate(inetAddressRemote, 5004)

inetAddressRemote(163.11.169.206)是远程服务器的地址,你将从该地址向安卓发送音频。

5004是用于在安卓和服务器之间发送音频的端口号。 现在有一个注意点 - 确保从服务器发送音频到安卓的本地端口也是5004。例如测试音频流:

ffmpeg -re -f lavfi -i aevalsrc="sin(400*2*PI*t)" -map 0:0  -c:a pcm_mulaw -b:a 64k -ar 8000 -f rtp rtp://163.11.62.208:5004?localrtpport=5004

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接