我有2个客户端,Java SIP客户端net.sourceforge.peers
和另一侧的Zoiper。
我正在尝试使用net.sourceforge.peers.demo
在net.sourceforge.peers
上,我将读取传入的音频,进行转录,然后使用nlp生成一个文本,对其进行tts(nlp和tts在net.sourceforge.peers
之外完成),并将其存储为文件({{1)},然后将其流回Zoiper客户端。
我已在C:\\Users\\absin\\Downloads\\output1.wav
中配置了MediaMode.captureAndPlayback
,因为我想捕获传入的音频,对其进行处理并发送准备好的音频。
我有以下课程要这样做:
net.sourceforge.peers.peers-demo
我正在Zoiper客户端上获得音频,但是音频缓慢且断线。
如果我像下面这样更改public class StreamSoundManager extends AbstractSoundManager {
@Override
public byte[] readData() {
File file = new File("C:\\Users\\absin\\Downloads\\output1.wav");
FileInputStream fin = null;
byte[] byteArray = null;
try {
// create FileInputStream object
fin = new FileInputStream(file);
// create string from byte array
byteArray = IOUtils.toByteArray(fin);
} catch (FileNotFoundException e) {
System.err.println("File not found" + e);
} catch (IOException ioe) {
System.err.println("Exception while reading file " + ioe);
} finally {
// close the streams using close method
try {
if (fin != null) {
fin.close();
}
} catch (IOException ioe) {
System.err.println("Error while closing stream: " + ioe);
}
}
return byteArray;
}
中的MediaMode.file
并修改CustomConfig.java
类中的handleAck
,则我的Zoiper客户端会获得正确的音频
MediaManager
在Java客户端上的case file:
if (fileReader != null) {
fileReader.close();
}
// String fileName = userAgent.getConfig().getMediaFile();
String fileName = "C:\\Users\\absin\\Downloads\\output1.wav";
fileReader = new FileReader(fileName, logger);
startRtpSession(destAddress, destPort, codec, fileReader);
try {
incomingRtpReader = new IncomingRtpReader(rtpSession, null, codec, logger);
} catch (IOException e) {
logger.error("input/output error", e);
return;
}
incomingRtpReader.start();
break;
类中我缺少什么?
我的用例是从Zoiper捕获传入的音频流,在Java客户端中对其进行处理,然后使用tts和nlp准备音频并将其发送到Zoiper客户端。我可以在StreamSoundManager
演示的MediaMode.file
中使用CustomConfig
来实现吗?我经历了peers
,但是找不到这个特殊的用例。