python3使用dpkt天生PCMA格式rtp流

打印 上一主题 下一主题

主题 893|帖子 893|积分 2681

操纵系统 :CentOS 7.6_x64
Python版本:3.9.12
dpkt版本:1.9.8
PCMA编码是VoIP通信中常见的格式,今天整理下CentOS7环境下,python3如何使用dpkt天生PCMA格式rtp流的条记,并提供相关示例代码、运行效果视频和配套文件下载。
我将从以下几方面进行展开:

  • 背景材料
  • 使用dpkt天生PCMA格式rtp包
  • 使用wav文件PCMA格式rtp流
  • 运行效果截图及视频
  • 配套资源下载
一、背景材料

1、安装dpkt

pypi地点:https://pypi.org/project/dpkt/
文档地点:https://dpkt.readthedocs.io/en/latest/
GitHub地点:https://github.com/kbandla/dpkt

安装命令:
  1. pip install dpkt
复制代码

2、payload type定义

rfc文档: 
https://www.rfc-editor.org/rfc/rfc3551.html

 PCMA编码的PT值是8。
二、天生rtp数据包

rtp包定义参考rfc文档:
https://www.rfc-editor.org/rfc/rfc3550

在dpkt包内里定义的有RTP对象,可以使用dpkt天生rtp包,示例代码如下(genPkt1.py):
  1. import dpkt
  2. pkt=dpkt.rtp.RTP()
  3. pkt.m = 0
  4. pkt.pt = 8
  5. pkt.seq = 1234
  6. pkt.ts = 5678
  7. pkt.ssrc = 0xabcdef01
  8. data = '''d5d5d5d5d5d5d555d555d555d555d5d5d5d5d555d5d5d5d5d5d5d5d5555555555555555555555555555555555555555555d55555d55555d555555555d555d5d55555555555555555555555555555d5d55555555555d55555d5d5d5555555d555555555d5555555d555555555d555d5d5555555d5d555d5d5d5d5d5d5d5d555d5d5d5d5d5d5d555d5d5d5d5d5d5d5d5d5d555d555d5d5d5d5d5d5d5d5d5d555d5'''
  9. pkt.data = bytes.fromhex(data)
  10. pkt.pprint()
  11. pkt.pack() # rtp raw data , can send by socket
复制代码
运行效果如下:

三、使用wav文件天生rtp流

1、预备wav文件

这里以Audacity为例进行演示,该软件的先容可参考这里:
https://www.cnblogs.com/MikeZhang/p/audacity2022022.html1)天生音频
这里以Risset鼓点为例天生音频文件

 2)导出wav文件

 格式:
pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
3)使用ffmpeg验证格式
ffmpeg -i test111.wav

2、使用python3发送rtp流

导出的wav文件是s16le格式的音频,目标pt是pcma,需要借助audioop的lin2alaw函数来实现。
https://docs.python.org/3/library/audioop.html

大致步调如下:  1)读取wav数据;  2)将wav数据转换为pcma数据;  3)使用socket发送pcma数据到目的地点;  4)使用tcpdump进行抓包;  5)使用wireshark验证抓包数据;  示例代码(genRtp1.py):

完整代码可从如下渠道获取:关注微信公众号(聊聊博文,文末可扫码)后回复 20240501 获取。3、运行效果

首先需要开启抓包:

tcpdump -i enp0s3 udp -w t111.pcap
运行脚本:
  1. ../bin/python3.9 genRtp1.py
复制代码
运行效果如下:

 抓包效果如下:

运行效果视频可从如下渠道获取:关注微信公众号(聊聊博文,文末可扫码)后回复 2024050101 获取。四、资源下载

本文涉及源码及相关文件,可以从如下途径获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20240501 获取。

 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南七星之家

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表