我正在使用wireshark的tshark和jnetpcap的组合来解码离线捕获并从文件中提取rtp音频有效负载以用于向前和反向。
在第一步中,我只隔离了rtp文件并将它们保存到一个额外的文件中。
然后我只需通过该文件循环使用jnetpcap并将rtp有效负载保存到文件中。
如果我需要两个通道,可以播放生成的文件,但采样等不能正常工作。听起来有点太快(太高)。所以必须采取不同的方式......
任何人都有提示如何将其保存为2个通道,因此它可以用作立体声而不是单声道?
final StringBuilder errbuf = new StringBuilder();
Pcap pcap = Pcap.openOffline(filename, errbuf);
if(pcap == null) {
System.err.printf("Error while opening device for capture: "
+ errbuf.toString());
return false;
}
PcapPacketHandler<String> handler = new PcapPacketHandler<String>() {
public void nextPacket(PcapPacket packet, String user) {
System.out.println("size of packet is=" + packet.size());
Rtp rtp = new Rtp();
if(packet.hasHeader(rtp)) {
System.out.println("rtp.headerLength = "+rtp.getHeaderLength()+ "rtp.payloadLength = "+rtp.getPayloadLength());
try {
dos.write(rtp.getPayload());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
int ret = pcap.dispatch(-1, handler, "I rock");
System.out.println("Ret = "+ret);
try {
dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 0 :(得分:0)
问题的解决方案是将RingBuffer构建为jitterbuffer并同步包并进行适当的静音生成。