안녕하세요.
우선 감사의 인사먼저 드리겠습니다.
델파이로 패킷캡춰하는 프로그램을 어떻게 만들까 정말 고민하고 있었는데..
Snoop 컴포넌트 덕분에 이것저것 잘 만들어보고 있습니다.
지금은 인터넷 전화쪽 캡춰를 해보고 있는데요..
RTP캡춰 할때 어떤 식으로 해야할지 궁금하여 문의 드립니다.
제가 해본 방법은 SDP가 들어온 시점부터 해당 아이피로 들어오는 패킷은 RTP라는 가정하에
들어온 패킷의 헤더 12바이트를 잘라내고 나머지 부분들을 MemoryStream에 순차적으로 담아서
전화가 끈어지는 순간에 SaveToFile해서 Wave파일로 드랍해봤는데요..
이 파일을 들어보면 실제 삐~ 하는 기계음 밖에 들리지가 않는걸 보니.. 캡춰를 잘못 한거 같더군요..
UDPData부분에서 RTP미디어만 추출하고 싶은데 어떠한 방식으로 해야 하는지 궁금합니다 ㅠㅠ
조언 부탁드리며..
Snoop 컴포넌트 정말 정말 감사합니다.
답변 감사합니다
아래는 실제 들어온 SDP 정보 입니다.
v=0
o=Xener 100051 100051 IN IP4 172.17.2.72
s=SIP Call
c=IN IP4 172.17.2.72
t=0 0
m=audio 14074 RTP/AVP 0 8 18
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=sendrecv
PCMU/8000으로 들어오고 있는 걸 확인 했구요 ㅠㅠ
ps. RAW데이터의 경우 Decode가 필요 없지 않습니까?(찾아본 봐로는 그냥 그 자체가 음성미디어라고.. 들어서요)
SDP에 들어가 있는 rtpmap 정보를 이용해서 양 호스트같에 협상을 하기는 하는데, 그 결과(어떠한 코덱을 사용하게 될런지)는 저도 잘 기억이 나지 않네요.
가장 정확한 것은 실제 RTP 통신을 할 때 payload type을 보는 것입니다. UDP로 통신하는 경우 UDP data의 2번째 바이트의 값이 무엇인지를 확인해 보시기 바랍니다.
참고로 RTP payload type은 다음에서 확인하실 수 있습니다.
http://www.iana.org/assignments/rtp-parameters/rtp-parameters.xml
RTP payload의 type을 살펴 보시기 바랍니다.
오래 되어서 저도 기억이 나지 않는데 G723.1, G729, G711 등이 사용이 된다면 RTP payload를 해당 Codec을 가지고 decoding을 해서 wave file로 저장해야 합니다.
2~3년 전쯤까지 국내 VoIP는 대부분 G729A를 사용했었으며(지금은 잘 모르겠습니다) SIP(SDP) 협상 부분을 보면 어떠한 Codec을 사용했는지 알 수 있을 것입니다.
인터넷 전화 녹음기는 예전에 만들어 놓은 것이 있으니 참고하시기 바랍니다.
http://vs.gilgil.net