当前位置: 首页 > news >正文

从零开始精通RTSP之传输ADPCM等音频流

概述

        在上一篇文章中,我们详细介绍了使用RTP传输AAC音频流的打包方法。除了AAC编码算法外,常用的音频编码算法还有ADPCM、G711A、G711U、G726等。接下来,我们继续介绍RTP传输ADPCM等音频流的打包方法。

封装方法

        RTP封装ADPCM等音频数据时,非常简单,直接将音频数据放入RTP包的Payload中即可。此时,RTP包的结构如下。

+-----------------------------+
| RTP Header (12 Byte)        |
| Audio Data ...              |
+-----------------------------+

        其中,Audio Data为已经编码好的ADPCM、G711A、G711U、G726等音频数据。由于音频帧通常较小,可以直接放入RTP包中,无需分片。RTP包封装好以后,通过UDP或其他适合实时传输的网络协议发送给接收端即可。

ADPCM等的SDP

        在使用ADPCM等编码的音频流时,SDP媒体描述应反映这种封装方式,以便接收端能够正确识别、配置解码器并处理音频流。ADPCM等的SDP与AAC的SDP类似,因此,下面将仅介绍有差异的部分。

        ADPCM的SDP:a=rtpmap行中,ADPCM指定音频编码格式为ADPCM。ADPCM(Adaptive Differential Pulse Code Modulation,自适应差分脉冲编码调制)是一种有损音频压缩技术,主要用于降低数字音频数据的存储空间需求和传输带宽,同时力求保持较高的声音质量。ADPCM通过对原始音频信号进行预测、差分编码、量化和自适应调整等步骤,实现了高效的数据压缩。

m=audio 49250 RTP/AVP 22
a=rtpmap:22 ADPCM/8000/1

        G711A的SDP:G711A的RTP负载类型(Payload Type, PT)通常为8。a=rtpmap行中,PCMA指定音频编码格式为G711 A-law。PCMA是ITU-T G711标准中的一种编码方式,常用于电话系统和其他语音通信应用。8000表示音频采样率为8 kHz,即每秒钟采集并编码8000个音频样本。1表示单声道音频,如果是双声道立体声,这里可能会显示2。

m=audio 49250 RTP/AVP 8
a=rtpmap:8 PCMA/8000/1

        G711U的SDP:G711U的RTP负载类型(Payload Type, PT)通常为0。a=rtpmap行中,PCMU指定音频编码格式为G711 U-law。PCMU是ITU-T G711标准中的另一种编码方式,同样广泛应用于电话系统和语音通信应用。8000表示音频采样率为8 kHz,即每秒钟采集并编码8000个音频样本。1表示单声道音频,如果是双声道立体声,这里可能会显示2。

m=audio 49250 RTP/AVP 0
a=rtpmap:0 PCMU/8000/1

        G726的SDP:G726的RTP负载类型(Payload Type, PT)通常为21。a=rtpmap行中,G726-32指定了音频编码标准为G726,并且使用的是32 kbps的编码速率。G726是ITU-T制定的一种ADPCM语音编码标准,它支持四种不同的比特率:16kbps、24kbps、32kbps、40kbps。这里的“32”,即表明使用的是32 kbps的编码模式。

m=audio 49250 RTP/AVP 21
a=rtpmap:21 G726-32/8000/1

注意事项

        1、在会话建立阶段(通常通过SDP协议),发送端和接收端需协商一致使用哪个PT值(Payload Type)来标识音频数据。比如:G711A通常使用PT值8,但应遵循实际协商结果。

        2、RTP包的时间戳增量应与采样率相匹配。比如:G711A使用8 kHz的采样率,每8个样本代表1毫秒,所以时间戳通常按每个样本的采样时间(125 µs)递增。另外,还需要确保时间戳准确反映音频数据的采样时刻,以便接收端能够正确同步和播放音频流。

        3、ADPCM、G711A等编码的音频帧大小适中,通常一个RTP包可以容纳一个完整的音频帧。如有必要,可以按照RTP的分包机制来处理非常大的音频帧。

        4、考虑到网络条件和接收端处理能力,合理控制RTP包的大小,避免因包过大导致网络拥塞或接收端处理困难。

相关文章:

从零开始精通RTSP之传输ADPCM等音频流

概述 在上一篇文章中,我们详细介绍了使用RTP传输AAC音频流的打包方法。除了AAC编码算法外,常用的音频编码算法还有ADPCM、G711A、G711U、G726等。接下来,我们继续介绍RTP传输ADPCM等音频流的打包方法。 封装方法 RTP封装ADPCM等音频数据时&am…...

box-decoration-break 使用介绍

box-decoration-break属性的使用 一、定义 box-decoration-break是CSS片段模块(CSS Fragmentation Module Level 3)中的一个属性,主要用于指定背景(background)、内边距(padding)、边框&#…...

技术分享 | 京东商品API接口|京东零售数据可视化平台产品实践与思考

导读 本次分享题目为京东零售数据可视化平台产品实践与思考。 主要包括以下四个部分: 1.京东API接口介绍 2. 平台产品能力介绍 3. 业务赋能案例分享 01 京东API接口介绍 02 平台产品能力介绍 1. 产品矩阵 数据可视化产品是一种利用数据分析和可视化技术&…...

OpenHarmony鸿蒙蓝牙BLE调试app

OpenHarmony蓝牙模块提供了ble的功能,本篇提供一个简单的app供测试时使用。代码使用API10,对应4.0Release版本固件。 1.开启BLE 开启BLE前,先在设置界面中打开蓝牙开关。 openBle()函数负责打开ble扫描,并打印扫描结果。主要代…...

HackMyVM-VivifyTech

目录 信息收集 arp nmap nikto whatweb WEB web信息收集 wpscan feroxbuster hydra 提权 系统信息收集 横向渗透 git提权 get root 信息收集 arp ┌──(root㉿0x00)-[~/HackMyVM] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 08:00:27:9d:6d:7b, …...

将unity中相机位置保存为json 文件或者 发送给后端

将unity中相机位置保存保存到服务器 ///相机的位置public Transform cameraTransform;void Start(){// SaveCameraPosition("sd");// ("{\"name\":\"sd\",\"position\":\"(0.00, 5.00, -12.00)\",\"rotation\&qu…...

vue2-表单组件封装

创建组件 components/test/index.vue <template><el-form :model"formData">// <!-- 具名插槽 --><slot name"header" /><el-form-itemv-for"(item, index) in formItem":key"index":label"item.la…...

智能家居4 -- 添加接收消息的初步处理

这一模块的思路和前面的语言控制模块很相似&#xff0c;差别只是调用TCP 去控制 废话少说&#xff0c;放码过来 增添/修改代码 receive_interface.c #include <pthread.h> #include <mqueue.h> #include <string.h> #include <errno.h> #include <…...

Python selenium

1.搭建环境 1.安装&#xff1a; pip install msedge-selenium-tools 不要使用pip install selenium&#xff0c;我的电脑上没法运行 2.下载驱动 Microsoft Edge WebDriver |Microsoft Edge 开发人员 edge浏览器点设置---关于即可找到版本号&#xff0c;一定要下载对应版…...

Python内置函数next()详解

Python的next()函数是一个内置函数&#xff0c;用于从迭代器中获取下一个元素。如果迭代器耗尽&#xff0c;则抛出StopIteration异常。 函数定义 next()函数的基本语法如下&#xff1a; next(iterator[, default])iterator&#xff1a;一个迭代器对象。default&#xff1a;可…...

初识指针(1)<C语言>

前言 指针是C语言中比较难的一部分&#xff0c;大部分同学对于此部分容易产生“畏难情结”&#xff0c;但是学习好这部分对C语言的深入很大的帮助&#xff0c;所以此篇主要以讲解指针基础为主。 指针概念 变量创建的本质就是在内存中申请空间&#xff0c;找到这个变量就需要地址…...

uniapp使用vconsole调试 兼容App

前言&#xff1a;引入vconsole发现uniapp打出来的包里&#xff0c;看不到vconsole&#xff0c;uniapp开发的h5需要使用vconsole真机调试&#xff0c;如果直接在main.ts引入&#xff0c;打包后整个项目会页面空白&#xff0c;经实验在单个页面引入可解决&#xff0c;以下是解决方…...

论文笔记模版

1. 摘要 1.1 背景 1.2 挑战 1.3 提出新方法 1.4 贡献 2. 引言 2.1 背景&#xff08;引出问题&#xff09; ①介绍大背景&#xff1a; ② 应用场景&#xff1a; ③ 介绍主题&#xff1a; 2.2 引出挑战 一般用图表来展现出我们的挑战&#xff08;直观&#xff0c;解决什…...

docker-本地私有仓库、harbor私有仓库部署与管理

一、本地私有仓库&#xff1a; 1、本地私有仓库简介&#xff1a; docker本地仓库&#xff0c;存放镜像&#xff0c;本地的机器上传和下载&#xff0c;pull/push。 使用私有仓库有许多优点&#xff1a; 节省网络带宽&#xff0c;针对于每个镜像不用每个人都去中央仓库上面去下…...

【Go 语言入门专栏】Go 语言的起源与发展

前言 Go 语言是当下最为流行的编程语言之一&#xff0c;大约在 2020、2021 年左右开始于国内盛行&#xff0c;许多大厂很早就将部分 Java 项目迁移到了 Go&#xff0c;足可看出其在性能方面的优越性。 相信各位都知道&#xff0c;在爬虫业务中&#xff0c;并发是一个关键的需…...

发电机组远程管理,提升管控力,降低运维成本

发电机组是指发电机发动机以及控制系统的总称&#xff0c;用来把发动机提供的动能转化为电能。它通常由动力系统、控制系统、消音系统、减震系统、排气系统组成。发电机组远程管理系统利用物联网技术与PLC远程控制模块集成解决方案&#xff0c;在提高发电机组的运行效率、降低运…...

java将文件压缩打包后进行下载

今天受到一个需求&#xff0c;需要查出文件&#xff0c;然后将文件打包后下载。看了下项目里默认代码有压缩功能&#xff0c;以此修改了下&#xff0c;项目使用了hutool。项目是若依项目 定义zip的数据传输对象&#xff0c;ossId可以是文件表的id Data public class SysOssZi…...

【4/26-4/30】 Arxiv安全类文章速览

4/26 标题: Merchants of Vulnerabilities: How Bug Bounty Programs Benefit Software Vendors 作者: Esther Gal-Or, Muhammad Zia Hydari, Rahul Telang摘要: 软件漏洞允许恶意黑客利用&#xff0c;威胁系统和数据安全。本文研究了激励道德黑客发现并负责任地向软件供应商披…...

活动图与状态图:UML中流程图的精细化表达——专业解析系统动态性与状态变迁

流程图是一种通用的图形表示法&#xff0c;用以展示步骤、决策和循环等流程控制结构。它通常用于描述算法、程序执行流程或业务过程&#xff0c;关注于任务的顺序执行。流程图强调顺序、分支和循环&#xff0c;适用于详细说明具体的处理步骤&#xff0c;图形符号相对基础和通用…...

Easy TCP Analysis提供了四大特性,兼顾了TCP数据包分析入门学习到实战问题排查不同阶段用户对工具的需求

一款兼顾TCP数据包分析入门学习和实战不同阶段用户需求的工具 Easy TCP Analysis是一款在线TCP数据包分析工具&#xff0c;致力于让TCP数据包分析变得跟看聊天记录一样简单&#xff01; Easy TCP Analysis提供了四大特性&#xff0c;兼顾了从入门学习到实战分析不同阶段用户对…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…...

CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?

在现代前端开发中&#xff0c;Utility-First (功能优先) CSS 框架已经成为主流。其中&#xff0c;Tailwind CSS 无疑是市场的领导者和标杆。然而&#xff0c;一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…...

WinUI3开发_使用mica效果

简介 Mica(云母)是Windows10/11上的一种现代化效果&#xff0c;是Windows10/11上所使用的Fluent Design(设计语言)里的一个效果&#xff0c;Windows10/11上所使用的Fluent Design皆旨在于打造一个人类、通用和真正感觉与 Windows 一样的设计。 WinUI3就是Windows10/11上的一个…...