流OPUS音频RTP到机器人设备
我想直接流与音频的ffmpeg(OPUS编解码器),以机器人装置。流OPUS音频RTP到机器人设备
在PC我开始流:
./ffmpeg -re -stream_loop -1 -i akgld-c8mxm.opus -acodec libopus -ac 1 -ab 96k -vn -f rtp rtp://192.168.0.100:6000
凡192.168.0.100 - 我的手机的本地WiFi地址。
在Android设备我试图发挥流:
public void tryPlayStream() {
String ip = Utils.wifiIpAddress(this);
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(ip);
audioStream = new AudioStream(inetAddress);
audioStream.setCodec(AudioCodec.PCMA);
audioStream.setMode(RtpStream.MODE_RECEIVE_ONLY);
InetAddress inetAddressRemote = InetAddress.getByName(ip);
audioStream.associate(inetAddressRemote, 6000);
audioStream.join(audioGroup);
} catch (Exception e) {
e.printStackTrace();
}
}
在logcat中我看到下一行:
E/AudioRecord: AudioFlinger could not create record track, status: -1
E/AudioGroup: cannot initialize audio device
什么即时做错了什么?感谢您的帮助
随着RTP启动您的PC上的流媒体服务器。因此,在您的ffmpeg命令行,你必须指定你的PC的IP地址而不是目标:
./ffmpeg -re -stream_loop -1 -i akgld-c8mxm.opus -acodec libopus -ac 1 -ab 96k -vn -f rtp rtp://YOUR_PC_S_IP_ADDRESS:6000
在Android端,您将需要一个RTP/RTSP客户端。我会尝试: https://github.com/pedroSG94/rtmp-rtsp-stream-client-java
在Android客户端应该从ffmpeg命令行指定PC的IP地址还是使用它自己的IP地址? – gregm
是 - Android客户端需要使用包含PC IP地址的ffmpeg命令行中指定的URL。 –