首页 > 编程语言 >python3使用dpkt生成PCMA格式rtp流

python3使用dpkt生成PCMA格式rtp流

时间:2024-05-01 23:23:17浏览次数:27  
标签:pkt dpkt rtp https wav PCMA

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

 

标签:pkt,dpkt,rtp,https,wav,PCMA
From: https://www.cnblogs.com/MikeZhang/p/18169795/pyGenPcmaRtp20240501

相关文章

  • 【Python】Q-Learning处理CartPole-v1
    上一篇配置成功gym环境后,就可以利用该环境做强化学习仿真了。这里首先用之前学习过的qlearning来处理CartPole-v1模型。CartPole-v1是一个倒立摆模型,目标是通过左右移动滑块保证倒立杆能够尽可能长时间倒立,最长步骤为500步。模型控制量是左0、右1两个。模型状态量为下面四个:......
  • 后端实现查询分页PageHelper.startPage()
      这是一个多条件查询,当查询时给出条件,则按条件查询符合条件的所有数据;不给条件时,则查询全部。mapper层:/**部门查询全部条件:登录名称、手机号、状态、时间区间*/List<XzUser>selectAll(@Param("userName")StringuserName,@Param("phoneNumber")String......
  • 强化学习环境-倒立摆[CartPole]
                    CartPoleV1包括一辆载着杆子在轨道上移动的推车。这是一个具有离散动作空间的简单环境。以下是CartPole-有用字段的详细信息:state:车的位置、车的速度、杆的角度、杆尖的速度;action:只能是以下之一,表示向左移动、不移动......
  • RTP封包
    一、前言RTP(Real-timeTransportProtocol),即实时传输协议,RTP协议定义了在网络上传输音频和视频的标准数据包的格式。通常RTP和RTSP协议一起用于流媒体传输系统。RTP标准中包含了两个子协议,RTP和RTCP。当网络为UDP传输方式的时候RTP通常和RTCP协议配合使用,实现流媒体音视频质量......
  • RTP报文头中的SSRC和CSRC
    以下内容转载自http://www.360doc.com/content/11/1009/15/496343_154624612.shtml和https://www.cnblogs.com/yoyotl/p/5650101.html同步信源(SSRC)标识符:占32位,用于标识同步信源。该标识符是随机选择的,参加同一视频会议的两个同步信源不能有相同的SSRC。·特约信源(CSRC)标识......
  • ZLmediakit的TCP主动接收RTP数据
    当我们使用openRtpServer接口的时候,一般都是别人主动向port或者默认端口(默认1000)上推数据;这种属于ZLM的socket被动接收连接(TCP),ZLM的RTPserver作为服务端,监听端口,有别人过来链接之后,握手建立连接,传输数据;如果我们想主动去链接对方,告诉对方给我发数据要怎么处理呢?首先,发送数据端......
  • PCMag评选“小企业优选CRM软件”——Zoho Bigin上榜
     当我们谈论企业怎样选择CRM管理系统时,大型企业、中型企业以及小型或初创等不同规模的企业需求各不相同,很难用一套软件来适配所有公司。以小企业为例,大多面临预算紧张、没有专业的IT部门或支持团队、暂时用不到高级定制功能等现状。基于这个原因,PCMag发起了一项【小企业适合什......
  • How to unlock Nissan Altima 2019-2022 Smart Remote 5 Buttons 433MHz Keys with Sm
    Howtounlock Nissan Altima2019-2022Smart Remote 5Buttons433MHzKeyswithSmartPro5000U-Plusfirst,youneedhavea SmartPro5000U-PlusProgrammer,ifyoudonothaveaSmartPro5000U-Plus,youcanbuyonefromchinaobd2.com.https://www.chinaobd2.co......
  • 流媒体通信中RTP/RTCP在项目中的应用
    一概述:本文档描述RTC通信中RTP/RTCP的应用以及当前项目中的使用策略。二RTP/RTCP协议简介2.1协议标准RTP由IETF(http://www.ietf.org/)定义在RFC3550和3551中。RTP被定义为传输音频、视频、模拟数据等实时数据的传输协议,与传统的注的高可靠的数据传输的运输层协议相比,它......
  • crtp 接口声明
    #include<vector>#include<utility>//对于std::move#include<type_traits>#include<iostream>usingnamespacestd;template<typenameT>structA{A&f(){return*this;}//T&f(){returnstatic_cast<T&a......