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

时间:2015-06-09 10:01:08

标签: android ffmpeg audio-streaming vlc rtp

我正在寻找半天的好答案,但我是这方面的初学者,我将不胜感激。

我想要实现的是在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是什么,第二个163.11.169.206是什么? Shoudln我只是给一个流的地址?

2)我可以只提交PCMU格式的流吗?我可以播放mp3文件吗?

3)甚至可能吗?

1 个答案:

答案 0 :(得分:3)

我已经将Cisco Jabber与我们的服务器和Android集成,并进行了类似的设置。

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);

可能有其他方式,我不是Android开发者。

audioStream.associate(inetAddressRemote, 5004)

inetAddressRemote(163.11.169.206)是您将向其发送音频的服务器的远程地址。

5004是在Android和服务器端发送和接收音频的端口。 现在有一个问题 - 确保您从服务器向Android发送音频的本地端口也是50​​04.例如测试音频流:

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