2012-05-04 5 views
1

wireshark의 tshark와 jnetpcap을 조합하여 오프라인 캡처를 디코딩하고 foward와 반대 방향으로 파일에서 rtp 오디오 페이로드를 추출합니다.jnetpcap save 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

문제에 대한 해결책은 jitterbuffer로 RingBuffer을 구축하고 패키지를 동기화하고 적절한 침묵 생성하는 것입니다.

+0

동일한 문제가 발생합니다. 어떻게 문제를보다 명확하게 해결할 수 있습니까? 아니면이 문제로 나를 도울 수 있습니까? http : //stackoverflow.com/questions/36567622/how-to-decode-rtp-packets-payload-to-audio-using-jnetpcap – SomnusLee