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

大致步骤如下:  
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 获取。

python3使用dpkt生成PCMA格式rtp流的更多相关文章

  1. C# 生成 DataMatrix 格式的二维码

    该文主要是利用OnBarcode.dll 生成 DataMatrix 格式的二维码的一些简单方法和操作技巧.关于QrBarcode的二维码比较常见和简单,网上有很多资源. 1.附件为dll 2.利用上 ...

  2. Rss 订阅:php动态生成xml格式的rss文件

    Rss 简介: 简易信息聚合(也 叫聚合内容)是一种描述和同步网站内容的格式.使用RSS订阅能更快地获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新.网络用户可以在客户端借助于支持RS ...

  3. 多个文件下载打包生成zip格式下载

    这个多个文件下载生成zip格式必须先引用一个ICSharpCode.SharpZipLib.dll. 代码如下  //将多个文件打包成压缩文件zip格式下载         protected voi ...

  4. js 生成 yyyy-mm-dd 格式的逼格姿势

    关于 js 生成 yyyy-mm-dd 格式,往往都会采取手动拼接,一般不愿意为了小功能而去动用 momentjs 之类的插件. ps: 只分享简单方法,网上有 N 多 dateformat 代码,这 ...

  5. 通过OpenSSL来生成二进制格式证书文件(pfx和cer)

    1.生成RSA字符串私钥 genrsa -out private-rsa.key 2.由1中私钥导出*.cer二进制公钥文件 req -new -x509 -key private-rsa.key - ...

  6. julia生成指定格式的字符串.jl

    julia生成指定格式的字符串.jl """ julia生成指定格式的字符串.jl http://bbs.bathome.net/thread-39829-1-1.htm ...

  7. 利用caffe生成 lmdb 格式的文件,并对网络进行FineTuning

    利用caffe生成 lmdb 格式的文件,并对网络进行FineTuning 数据的组织格式为: 首先,所需要的脚本指令路径为: /home/wangxiao/Downloads/caffe-maste ...

  8. keil MDK中如何生成*.bin格式的文件

    在Realview MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件.虽然这两个格式的文件非常有利于ULINK2仿真器的下载和调试,但是ADS的用户更习惯 ...

  9. openssl生成RSA格式,并转为pkcs8格式

    原文地址:http://www.thinkingquest.net/articles/391.html?utm_source=tuicool 支付宝接口开发相关:openssl 加密工具 支付宝“手机 ...

  10. (原)caffe中通过图像生成lmdb格式的数据

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5909121.html 参考网址: http://www.cnblogs.com/wangxiaocvp ...

随机推荐

  1. KDE算法解析

    核密度估计(Kernel Density Estimation, KDE)算法通过样本估计这些样本所属的概率密度函数,是non-parametric方法,也就是在进行估计时无需假设分布的具体形式.本文 ...

  2. 为什么SOTA网络在你的数据集上不行?来看看Imagnet结果的迁移能力研究

     论文通过实验证明,ImageNet上的模型并不总能泛化到其他数据集中,甚至可能是相反的,而模型的深度和宽度也会影响迁移的效果.  如果需要参考,可选择类别数与当前任务相似的数据集上的模型性能.论文通 ...

  3. 电影数据集【可供机器学习附爬虫源码】(豆瓣、爱奇艺、IMDB、腾讯视频等)

    电影数据集(豆瓣.爱奇艺.IMDB.腾讯视频.搜狐.1905) 爬虫爬取豆瓣.爱奇艺.IMDB.腾讯视频.搜狐.1905网,电影数据. 获取方式:微信搜索关注[靠谱杨阅读人生]回复[电影]. 整理不易 ...

  4. SpringBoot配置启动页(首页)控制台打印项目访问入口url

    一.SpringBootApplication 1 package com.reliable.yang; 2 3 /** 4 * @author Administrator 5 * @date 202 ...

  5. Android按钮_单选框_多选框_文字框

    1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android= ...

  6. list集合中的实现类Vector

    Vector: 它底层也是用数组来存数据对象的,但它是唯一一个线程安全的,线程安全也就意味着时间长,效率慢,如果是单一线程的话,建议不使用该实现类 add(E element): 将指定的元素追加到此 ...

  7. 鸿蒙HarmonyOS实战-ArkUI组件(CustomDialog)

    一.CustomDialog CustomDialog组件是一种自定义对话框,可以通过开发人员根据特定的要求定制内容和布局.它允许开发人员创建一个完全可定制的对话框,可以显示任何类型的内容,例如文本. ...

  8. Maven 必备技能:MAC 系统下 JDK和Maven 安装及环境变量配置详细讲解

    开发中难免因系统问题或者版本变更反复折腾JDK和Maven环境变量,干脆写个笔记备忘个,也方便小伙伴们节省时间. =================JDK安装与环境变量配置====== 1.官网下载j ...

  9. 很强!4.7k star,推荐一款Python工具,可实现自动化操作!!

    1.介绍 在日常工作中,肯定会遇到一些重复性的工作,不管是点击某个按钮.写东西,打印东西,还是复制粘贴拷贝资料之类的,需要进行大量的重复操作.按键精灵大家都听说过,传统的方式,大家可以使用按键精灵将操 ...

  10. JVM简明笔记3:类加载机制

    1 类的加载 类的加载指的是将类的 .class 文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class 对象,用来封装类在方法区内的数据结 ...