【发布时间】:2015-01-31 20:25:41
【问题描述】:
我想收听 RTP 音频流,但声音中的间隙很小 - 不能继续。可能是什么解决方案?我是否在 Receiver(android) 端或 Streamer(ffmpeg) 端遗漏了什么?
我正在使用 ffmpeg 流式传输 RTP 音频,
ffmpeg -f lavfi -i aevalsrc="sin(400*2*PI*t)" -ar 8000 -vcodec pcm_u8 -f rtp rtp://192.168.0.15:41954 (port changes.)
这是我相关的android代码:
AudioStream audioStream;
AudioGroup audioGroup;
@Override
public void onStart() {
super.onStart();
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_ECHO_SUPPRESSION);
InetAddress inetAddress;
try {
inetAddress = InetAddress.getByName("192.168.0.15");
audioStream = new AudioStream(inetAddress);
audioStream.setCodec(AudioCodec.PCMU);
audioStream.setMode(RtpStream.MODE_NORMAL);
InetAddress inetAddressRemote = InetAddress.getByName("192.168.0.14");
audioStream.associate(inetAddressRemote, 6000);
((TextView)findViewById(R.id.tv_port)).setText("Port : " + String.valueOf(audioStream.getLocalPort()));
audioStream.join(audioGroup);
}
catch ( UnknownHostException e ) {
e.printStackTrace();
}
catch ( SocketException e ) {
e.printStackTrace();
}
}
【问题讨论】:
-
您是否尝试过在 VLC 中打开 RTP 流以检查它在发送时没有播放(数据丢失)。这也将允许您对网络流量进行 Wireshark 处理,我相信 VLC 会让您将其流式传输出去,允许您将设备连接到该设备并查看它是否与 pc 上接收到的流不同
-
是的,我检查过了。 VLC 的音频效果很好。
-
如果你从 vlc 重新发送它并让你的设备连接到那会更好
-
没有更好的。结果相同。
-
如果在设备上使用 vlc 会怎样。如果您可以在设备上安装 vlc 或其他播放器,您能否监控从服务器到设备的流量,这可能有助于排除 ffmeg 导致连接问题的问题
标签: android audio ffmpeg audio-streaming rtp