C:如何将RTP数据包转换为.raw文件

时间:2017-11-12 13:46:31

标签: c networking voip rtp

我是学生,我正在开发一个关于VOIP的项目来捕获通信VOIP,然后将其转换为音频格式。我正在使用C编程语言

我能够使用winpcap库捕获网络流量并过滤RTP数据包。但我不知道如何用它创建音频文件。

2 个答案:

答案 0 :(得分:0)

要进行分析,请使用wireshark捕获并导出RTP流: 见

https://wiki.wireshark.org/RTP

和/或

https://www.wireshark.org/docs/wsug_html_chunked/ChTelRTPAnalysis.html

从C中提取RTP数据包,您可以手动重新实现RFC(https://tools.ietf.org/html/rfc3550)或使用第三方库,如gstreamer(https://gstreamer.freedesktop.org/documentation/rtp.html

答案 1 :(得分:0)

完整算法正在关注

  • 使用winpcap获取原始数据包
  • 检测用于编码音频的编解码器:
    • 在VOIP中,编解码器协商由单独的控制协议执行,如会话发起协议(SIP)和会话描述协议(SDP)
    • 对于某些编解码器,您可以根据有效负载ID猜测编解码器类型,它们在RTP A/V Profile
    • 中定义
    • 正如wirehark所说;)
  • 从pcap文件中解码一个数据包。你需要解码:
    • 链路层标头(以太网或VLAN等)
    • IP标头
    • UDP标头
    • RTP标题
  • 提取RTP流。这可以通过以下方式完成:
    • 来源IP地址/端口
    • 目标IP地址/端口
    • RTP数据包的SSRC字段
  • 提取一个RTP流的有效负载并使用编解码器
  • 对其进行解码
  • 将解码数据保存为WAV文件

如果您需要生产代码,但每个子弹点都是非常棘手的任务,但它们都有快速而肮脏的解决方案,适合您。