code: def voip_play(s1, lst=None, **kargs):
      
  
      dsp, rd = os.popen2(sox_base % "")
  
      def play(pkt):
          if not pkt:
              return
          if not pkt.haslayer(UDP) or not pkt.haslayer(IP):
              return
          ip = pkt.getlayer(IP)
          if s1 == ip.src:
              dsp.write(pkt.getlayer(conf.raw_layer).load[12:])
      try:
          if lst is None:
              sniff(store=0, prn=play, **kargs)
          else:
              for p in lst:
                  play(p)
      finally:
          dsp.close()
          rd.close()
docs: Play VoIP packets with RAW data that
      are either sniffed either from an IP, or
      specified as a list.
  
      It will play only the incoming packets !
  
      :param s1: The IP of the src of all VoIP packets.
      :param lst: (optional) A list of packets to load
      :type s1: string
      :type lst: list
  
      :Example:
  
      >>> voip_play("64.2.142.189")
      while calling '411@ideasip.com'
  
      >>> voip_play("64.2.142.189", lst)
      with list a list of packets with VoIP data
      in their RAW layer
  
      .. seealso:: voip_play2
      to play both the outcoming and incoming packets
      at the same time.
  
      .. seealso:: voip_play3
      to read RTP VoIP packets