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为例进行演示,该软件的介绍可参考这里:
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


3、运行效果
首先需要开启抓包:
tcpdump -i enp0s3 udp -w t111.pcap
运行脚本:
../bin/python3.9 genRtp1.py
运行效果如下:

抓包效果如下:

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

python3使用dpkt生成PCMA格式rtp流的更多相关文章
- C# 生成 DataMatrix 格式的二维码
该文主要是利用OnBarcode.dll 生成 DataMatrix 格式的二维码的一些简单方法和操作技巧.关于QrBarcode的二维码比较常见和简单,网上有很多资源. 1.附件为dll 2.利用上 ...
- Rss 订阅:php动态生成xml格式的rss文件
Rss 简介: 简易信息聚合(也 叫聚合内容)是一种描述和同步网站内容的格式.使用RSS订阅能更快地获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新.网络用户可以在客户端借助于支持RS ...
- 多个文件下载打包生成zip格式下载
这个多个文件下载生成zip格式必须先引用一个ICSharpCode.SharpZipLib.dll. 代码如下 //将多个文件打包成压缩文件zip格式下载 protected voi ...
- js 生成 yyyy-mm-dd 格式的逼格姿势
关于 js 生成 yyyy-mm-dd 格式,往往都会采取手动拼接,一般不愿意为了小功能而去动用 momentjs 之类的插件. ps: 只分享简单方法,网上有 N 多 dateformat 代码,这 ...
- 通过OpenSSL来生成二进制格式证书文件(pfx和cer)
1.生成RSA字符串私钥 genrsa -out private-rsa.key 2.由1中私钥导出*.cer二进制公钥文件 req -new -x509 -key private-rsa.key - ...
- julia生成指定格式的字符串.jl
julia生成指定格式的字符串.jl """ julia生成指定格式的字符串.jl http://bbs.bathome.net/thread-39829-1-1.htm ...
- 利用caffe生成 lmdb 格式的文件,并对网络进行FineTuning
利用caffe生成 lmdb 格式的文件,并对网络进行FineTuning 数据的组织格式为: 首先,所需要的脚本指令路径为: /home/wangxiao/Downloads/caffe-maste ...
- keil MDK中如何生成*.bin格式的文件
在Realview MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件.虽然这两个格式的文件非常有利于ULINK2仿真器的下载和调试,但是ADS的用户更习惯 ...
- openssl生成RSA格式,并转为pkcs8格式
原文地址:http://www.thinkingquest.net/articles/391.html?utm_source=tuicool 支付宝接口开发相关:openssl 加密工具 支付宝“手机 ...
- (原)caffe中通过图像生成lmdb格式的数据
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5909121.html 参考网址: http://www.cnblogs.com/wangxiaocvp ...
随机推荐
- HttpWebRequest GetResponse操作超时
request.GetResponse()超时问题的解决 解决办法 1.将http的request的keepAlive设置为false //如果不是必须的要keepalive的,那么就要设置Keep ...
- 添加AvalonEdit控件到WinForm
public frmTest() { InitializeComponent(); ElementHost host = new ElementHost(); host.Size = new Size ...
- 用于vivado的TCL脚本创建工程
用于实现在脚本所在的目录创建工程并初始化工程 点击查看代码 #获取脚本所在的文件 variable My_File [file normalize [info script]] #prj_path_f ...
- verilog之时钟信号的编写2
verilog之时钟信号的编写2 1.时钟信号的特点 时钟信号除了可以根据时序一个个变化列举出来,还可以利用其循环的变化的特点,使用循环执行语句always来实现.这种方法实现的时钟信号可以一直执行且 ...
- DIY 3 种分库分表分片算法,自己写的轮子才吊!
大家好,我是小富- 前言 本文是<ShardingSphere5.x分库分表原理与实战>系列的第六篇,书接上文实现三种自定义分片算法.通过自定义算法,可以根据特定业务需求定制分片策略,以满 ...
- #根号分治,分块#洛谷 5309 [Ynoi2011] 初始化
题目传送门 分析 如果 \(x\) 比较大那么可以暴力修改,\(x\) 比较小的话可以用数组打标记 查询的时候对于暴力修改的部分可以分块,暴力修改的同时需要给块打标记 如果 \(x\) 比较小的情况, ...
- #根号分治,背包#51nod 1597 有限背包计数问题 LOJ 6089 小Y的背包计数问题
题目 有一个大小为\(n\)的背包,有\(n\)种物品, 第\(i\)种物品的大小为\(i\),且有\(i\)个, 求装满这个背包的方案数 \(n\leq 10^5\) 分析 直接多重背包会有问题,考 ...
- 内存分析利器之UMDH
近两周投入分析产品的内存泄漏问题. 测试团队反馈产品在安卓平台运行时,随用户操作,应用占用的内存出现上涨的趋势,停止操作并等待一段时间之后,应用占用的内存没有下降,怀疑存在内存泄漏问题. 结合复现的情 ...
- 【直播回顾】OpenHarmony知识赋能五期第三课——多媒体整体介绍
5月5日晚上19点,知识赋能第五期第三节课<OpenHarmony标准系统多媒体子系统整体介绍>,在OpenHarmony开发者成长计划社群内成功举行. 本期课程,由深开鸿资深技术专家郭岳 ...
- C++ 模板和泛型编程详解
C++中的模板和泛型编程是非常重要的概念.模板是一种将数据类型作为参数的通用程序设计方法.它们允许开发人员编写可以处理各种数据类型的代码,而无需为每种数据类型编写不同的代码.下面介绍了一些关于C++中 ...