2012-05-04 30 views
1

我正在使用wireshark的tshark和jnetpcap的组合来解码离线捕获并从文件中提取正向和反向方向的rtp音频有效载荷。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

问题的解决方案是构建一个RingBuffer作为jitterbuffer并同步包并进行适当的沉默生成。

+0

我遇到同样的问题,你能告诉我你如何更清楚地解决你的问题?或者你能帮我解决这个问题:http://stackoverflow.com/questions/36567622/how-to-decode-rtp-packets-payload-to-audio-using-jnetpcap – SomnusLee