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 ...
随机推荐
- proteus的五状态显示控制器
proteus的五状态显示控制器 1.实验原理 使用的核心器件还是4028,BCD译码器.将输入的四个信号接入输入端,输出信号选取0.1.2.4.8这五个输出状态驱动led显示.发光LED需要加入保护 ...
- Delving into Sample Loss Curve to Embrace Noisy and Imbalanced Data
这篇论文: 提出了prob-and-allocate训练策略,在prob阶段获得样本损失,在allocate阶段分配样本权重. 以[2]的meta-weight-net为Baseline,取名为Cur ...
- #容斥#51nod 1407 与与与与
题目 给出 \(n\) 个数,问有多少个子集的按位与为0 分析 考虑容斥,设 \(f[i]\) 表示有多少个数按位与为 \(x\),满足 \(x\&i=i\) 那么答案就是 \(\sum_{i ...
- #线段树#洛谷 2221 [HAOI2012]高速公路
题目 分析 首先把收费站之间化为点,那这样即是区间加和区间查询, 考虑求的应该是 \[\frac{\sum a[i]*(r-i+1)*(i-l+1)}{C(r-l+2,2)} \] 分子可以拆成 \[ ...
- #Dijkstra#洛谷 4943 密室
题目 分析 考虑答案只可能是分别到或者哈利一个人到两个房间, 那么在罗恩的时候先不建不可走的边,等到哈利走的时候再建边 代码 #include <cstdio> #include < ...
- OpenHarmony Meetup北京站招募令
OpenHarmony Meetup城市巡回北京站火热来袭!!日期:2023年11月25日14:00地点:中国科学院软件园区五号楼B402与OpenHarmony技术大咖近距离互动,分享技术见解,结交 ...
- OpenHarmony开发之MQTT讲解
相信MQTT这个名称大家都不陌生,物联网的开发必然会遇到MQTT相关知识的应用.那么什么是MQTT?它有什么特点?它能解决什么问题?它是如何工作的?OpenAtom OpenHarmony(以下简 ...
- 详讲openGauss 5.0 单点企业版如何部署_Centos7_x86
本文分享自华为云社区<openGauss 5.0 单点企业版部署_Centos7_x86>,本文作者:董小姐 本文档环境:CentOS7.9 x86_64 4G1C40G python2. ...
- docker 应用篇————docker基本命令[四]
前言 介绍一下一些docker的基本命令. 正文 帮助命令: 首先要学的肯定是docker --help 命令了,因为这样我们就不用经常去查官网. docker version docker info ...
- NodeJs初探索
练习1:模块之间的引用 a.js // 引入b.js模块 var b = require("./b"); // 调用对象里的方法: 对象.属性名 对象.方法名() b.add(); ...