JNETPCAP 保存 RTP 有效负载:两个通道



我正在使用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();
    }

该问题的解决方案是构建一个 RingBuffer 作为抖动缓冲区并同步包并执行适当的静音生成。

最新更新