python3使用dpkt生成PCMA格式rtp流

操作系统 :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

安装命令:

复制代码
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):

复制代码
import dpkt

pkt=dpkt.rtp.RTP()

pkt.m = 0
pkt.pt = 8
pkt.seq = 1234
pkt.ts = 5678
pkt.ssrc = 0xabcdef01 
data = '''d5d5d5d5d5d5d555d555d555d555d5d5d5d5d555d5d5d5d5d5d5d5d5555555555555555555555555555555555555555555d55555d55555d555555555d555d5d55555555555555555555555555555d5d55555555555d55555d5d5d5555555d555555555d5555555d555555555d555d5d5555555d5d555d5d5d5d5d5d5d5d555d5d5d5d5d5d5d555d5d5d5d5d5d5d5d5d5d555d555d5d5d5d5d5d5d5d5d5d555d5'''

pkt.data = bytes.fromhex(data)
pkt.pprint()

pkt.pack() # rtp raw data , can send by socket

运行效果如下:

三、使用wav文件生成rtp流

1、准备wav文件

这里以Audacity为例进行演示,该软件的介绍可参考这里:
https://www.cnblogs.com/MikeZhang/p/audacity2022022.html

1)生成音频

这里以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

运行脚本:

复制代码
../bin/python3.9 genRtp1.py

运行效果如下:

抓包效果如下:


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

四、资源下载

本文涉及源码及相关文件,可以从如下途径获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20240501 获取。

相关推荐
湫ccc24 分钟前
《Python基础》之pip换国内镜像源
开发语言·python·pip
hakesashou25 分钟前
Python中常用的函数介绍
java·网络·python
菜鸟的人工智能之路35 分钟前
极坐标气泡图:医学数据分析的可视化新视角
python·数据分析·健康医疗
菜鸟学Python36 分钟前
Python 数据分析核心库大全!
开发语言·python·数据挖掘·数据分析
小白不太白95038 分钟前
设计模式之 责任链模式
python·设计模式·责任链模式
喜欢猪猪43 分钟前
Django:从入门到精通
后端·python·django
糖豆豆今天也要努力鸭1 小时前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
何大春1 小时前
【弱监督语义分割】Self-supervised Image-specific Prototype Exploration for WSSS 论文阅读
论文阅读·人工智能·python·深度学习·论文笔记·原型模式
在下不上天1 小时前
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
大数据·开发语言·python
SEVEN-YEARS1 小时前
深入理解TensorFlow中的形状处理函数
人工智能·python·tensorflow