network-programmingwiresharkvoiprtptshark

How to create an audio file from a Pcap file with Tshark?


I want to make audio data from a Pcap file with Tshark. I have successfully created audio data from a Pcap file using Wireshark in RTP analysis function. This Pcap file is created from a VoIP phone conversation. Next time I want to do the same thing with Tshark. What command would do that?

I read the Tshark manual to find out how. but couldn't find it. do i need any tools?


Solution

  • On Linux, extracting the RTP packets from PCAP file is possible with tshark together with shell tools tr and xxd, but then you might need other tools to convert to an audio format.

    If you have a single call recording in the pcap, so all rtp packets belong to it, try with:

    tshark -n -r call.pcap -2 -R rtp -T fields -e rtp.payload | tr -d '\n',':' | xxd -r -ps >call.rtp
    

    If the pcap has the recordings from many calls, then you have to identify the calls and their RTP streams by source/destination IPs or SSRC and build the filter accordingly, for example if SSRC is 0x7f029328:

    tshark -n -r call.pcap -2 -R rtp -R "rtp.ssrc == 0x7f029328" -T fields -e rtp.payload | tr -d '\n',':' | xxd -r -ps >call.rtp
    

    Tools like sox or ffmpeg can be used to convert from call.rtp file to wav format, depending on the codec that was used in the call. If the codec was G711u (PCMU) with sample rate 8000:

    sox -t ul -r 8000 -c 1 call.rtp call.wav
    

    The audio formats supported by sox are listed by sox -h. The ffmpeg might be needed for codecs such as G729 or G722, example for G722 with sample rate 16000:

    ffmpeg -f g722 -i call.rtp -acodec pcm_s16le -ar 16000 -ac 1 call.wav
    

    These guidelines are from some brief notes I made during the past when I had similar needs, hope they are good and still valid nowadays, or at least provide the right direction to explore further.