live555传输Speex音频详解一:Speex over RTP

article/2025/10/8 2:13:23
1. RTP Speex 头部

RTP头部在[RFC3550]中定义。本文定义RTP头部中各字段的用法。

Payload Type (PT): 本格式的负责类型号。

Marker (M) bit: 此位被用来标志一段无声后有声的开始。打在 有声数据的第一个包上。 Speex支持声音检测,可以在无声时不 产生帧数据。所以包可能是非连续传输的。

Extension (X) bit: 见RTP的规定。

Timestamp: 一个32位的整数,表示一个包中第一帧的采样时间。

2. Speex的RTP负载格式

Speex的RTP负载如图1所示。本格式没有附加的头部,所以只什用标准的RTP头部   头部之后是一个或多个负载数据库(speex帧)。包尾部可能需要一些填补数据。


图 1: Speex的RTP负载

3. Speex 负载

为了把编码后的数据打包进RTP,我们只需要考虑Speex编码器输出的比特流必须 以相同的顺序出现在解码端。此处所说的负载格式保持了这个顺序。

一个典型的Speex帧,最大编码码率大约是110个字节。一个包中所有的Speex帧的 总字节数应小用路径MTU以避免被分割。Speex帧绝不能被分割!

必须按时间序把帧打到包里。

一个RTP包中可能包含相同码率的帧也可能包含不同码率的帧。然而码率是在带内 传送的,每帧中包含了自己的码率,所以打包时不必在意它。

编码和解码算法可以以20毫秒的帧为边界改变码率。 码率改变的通知是在带内传 送的。每个帧都包含采样率(窄带, 宽带, 或 超宽带)和"模式"(码率)信息。所以 不需要带外数据通知解码器处理那些变化。

采样率必须是8000 Hz, 16000 Hz, 或 32000 Hz之一。

RTP负载必须被填补数据以保证能提供整数个字节的数据,这些填补位是LSB(最 低有效位)-对齐的并且按网络字节序放置,它是由一个0跟着一群1组成的。填补 数据仅被包中最后一个帧所需要。并且仅仅为了保证一个包的内容按字节边界结束。

4. Speex RTP包的例子

下面的示例中,我们的包中一个Speex帧,还有5位的填补数据来保证包的大小是字 节对齐的。

   

5. 多Speex帧的RTP包

下面的例子演示的是一个RTP包中有两个Speex帧。这个例子中的Speex帧的长度是 字节对齐的,所以不需要填补数据。

Speex解码器可以从负载侦测码率,并负责在各帧之间检查20毫秒的的帧界限。

   

6. 媒体类型


媒体类型名字: audio

媒体字类型名字: speex

所需参数:
rate: RTP 时间戳时钟频率,等于采样率Hz。采样率必须是8000, 16000, 或 32000。

可选的参数:

ptime: 必须能被20毫秒整除 [RFC4566]

maxptime: 必须能被20毫秒整除 [RFC4566]

vbr: 可变码率 - 可为 'on', 'off', 或 'vad' (默认是'off')。如果是'on', 可变码率被使用。如果是 'off',则不被使用。如果是'vad',那么固定码率被 使用,但是无声时段将被编码为特殊的短帧来表明那段时间没有声音。这个参数
用于编码器。

cng: 产生舒适噪音 - 可为 'on' 或 'off' (默认是'off')。如果为 'off', 无声帧就是无声,如果为'on',那么这些帧将被以舒适噪音填充。此参数被用于 编码器。

mode: 以逗号分隔的多个speex支持的解码模式,按优先度排列。第一个具有最 优先级,剩余的依次排列。对于窄带和宽带可用的模式值不一样,见以下定义:

* {1,2,3,4,5,6,7,8,any} 用于窄带

* {0,1,2,3,4,5,6,7,8,9,10,any} 用于宽带

mode'参数可能包含多个值。这此情况下,远端的编码器必须被配置成能支持 模式列表中的第一个值。 当 'any' 被使用时,表明自己支持所有的解码模式。 'mode' 参数必须永远有值。如果'mode' 没有出现,那么mode的值被置为:在

窄带下是'mode="3,any"',在宽带和超宽带下是'mode="8,any"' 。注意每个包含mode(或码率)的Speex帧必须被解码。因此,一个应用程序必须能解码任何Speex帧,除非在SDP中明确指明某些模式不被支持(例如,不含'mode="any"')。

解码端指定支持哪些模式意味着编码端也支持那些模式。


下节预告:Speex使用SDP。


http://chatgpt.dhexx.cn/article/Nl3LkvUN.shtml

相关文章

Speex的使用

Downloads Speex是一套主要针对语音的开源免费,无专利保护的音频压缩格式。Speex工程着力于通过提供一个可以替代高性能语音编解码来降低语音应用输入门槛 。另外,相对于其它编解码器,Speex也很适合网络应用,在网络应用上有着自己…

网络测速服务器OpenSpeedTest

什么是 OpenSpeedTest ? OpenSpeedTest 是一个跨平台的互联网速度测试应用程序。因此,您可以在不同操作系统中的各种网络浏览器中测试您的互联网速度,而无需安装任何其他应用程序或插件(无需 Flash 或 Java)。这意味着…

【SpeechX—统一高性能语音部署工具】SpeechX Custom ASR

(以下内容搬运自 PaddleSpeech) 在一些场景中,识别系统需要高精度的识别一些稀有词,例如导航软件中地名识别。而通过定制化识别可以满足这一需求。 相关demo: https://github.com/PaddlePaddle/PaddleSpeech/tree/develop/demos/custom_streaming_asr …

Speex for Android

http://blog.csdn.net/chenfeng0104/article/details/7088138 在Android开发中,需要录音并发送到对方设备上。这时问题来了,手机常会是GPRS、3G等方式上网,所以节省流量是非常关键的,使用Speex来压缩音频文件,可以将音…

IOS开发之SDWebImage

SDWebImage 前言:在我们日常的开发中我们通常会使用SDWebImage来实现UIImageView加载来自互联网的远程图片 官方介绍:一个具有缓存支持的异步映像下载程序 功能简介 一个添加了web图片加载和缓存管理的UIImageView分类一个异步图片下载器一个异步的内存…

SDWebImage-解码、压缩图像

一、简单介绍 研究了下SDWebImage的源码,借鉴了别人的一些资料,感觉逐渐的明白的一些原理,现在就来记录下。 在我们使用 UIImage 的时候,创建的图片通常不会直接加载到内存,而是在渲染的时候默认在主线程上再进行解码…

sdwebimage 加载webp图片

sdwebimage加载 webp / git 配置宏 - (void)setUpCusPhoto {_scrollView [UIScrollView new];_scrollView.frame self.view.bounds;[self.view addSubview:_scrollView];//webpUIImageView *view [[UIImageView alloc] init];view.frame CGRectMake(10, 100, 320, 200);NS…

SDWebImage 5.0简介

一、 SDWebImage原理简介 1.结构 (设计思路借鉴:提供多种接口,到底层调用到同一个方法,减少调用方对可选参数的传递) UIImageViewWebCache和UIButtonWebCache直接为表层的 UIKit框架提供接口, SDWebImageManger(SDWebImageManager…

SDWebImage的主流程

SDWebImage提供了UIImageView的分类来实现从网络端下载数据并缓存到内存和磁盘。非常的流行,现在就主流程分析下. 主要的学习链接 :SDWebImage源码解读 - 简书 SDWebImage有如下特点: 提供了UIImageView和UIButton的分类。以支持加载网络图片并缓存…

SDWebImage的缓存策略

SDWebImage 相信对大多数开发者来说,都是一个不陌生的名字。它除了帮助我们读取网络图片,还会处理这些图片的缓存。它的缓存机制到底是什么样的呢,让我给跟大家唠叨唠叨,希望你能有收获。 基本结构 闲言少叙,咱们这就…

SDWebImage源码解析

这段时间研究了一下SDWebImage源码,因个人能力有限,如有不对的地方,请指出或留言,谢谢! SDWebImage是一个开源的第三方库,它提供了UIImageView的一个分类,以支持从远程服务器下载并缓存图片的功…

【iOS】SDWebImage

文章目录 SDWebImage日常使用一些主要功能获取图片缓存 缓存机制独立的异步图像下载独立的异步图像缓存 图片加载全过程 源码分析架构图结构SDWebImageManager1. SDWebImageOptions2. SDWebImageManagerDelegate SDWebImageCompatSDWebImageCompat.hSDWebImageCompat.m sd_imag…

开源框架:SDWebImage

引言: SDWebImage是我搞iOS以来少数佩服的框架,膜拜一下作者.真的写的非常棒! 这套开源框架还是蛮重要的, 涉及到异步加载图片源和自动缓存. 我们如果能够熟练使用其API 就可以实现很多复杂的需求了. 作者依旧在更新,目前3.0 版本已经非常强大! 简化了更多的API接口.加强了…

iOS 第三方框架-SDWebImage解读

在iOS的图片加载框架中,SDWebImage可谓是占据大半壁江山。它支持从网络中下载且缓存图片,并设置图片到对应的UIImageView控件或者UIButton控件。在项目中使用SDWebImage来管理图片加载相关操作可以极大地提高开发效率,让我们更加专注于业务逻…

iOS——SDWebImage解读

前言 在iOS的图片加载框架中,SDWebImage占据了大半壁江山。它提供了UIImageView的一个分类,支持从网络中下载且缓存图片,并设置图片到对应的UIImageView控件或者UIButton控件。在项目中使用SDWebImage来管理图片加载相关操作可以极大地提高开…

SDWebImage异步加载图片及缓存的管理与清理

一、SDWebImage介绍 1、在项目的开发过程中,我们经常会用到异步加载图片的功能,先从网络上异步下载图片,然后通过UIImageView显示在屏幕上。这是一个经常使用的功能,基本上所有的联网应用程序都要用到的功能,现在GitH…

iOS SDWebImage详细介绍

在iOS的图片加载框架中,SDWebImage使用频率非常高。它支持从网络中下载且缓存图片,并设置图片到对应的UIImageView控件或者UIButton控件。在项目中使用SDWebImage来管理图片加载相关操作可以极大地提高开发效率,让我们更加专注于业务逻辑实现…

JNA入门

1,什么是JNA? JNA全称Java Native Access,是一个建立在JNI技术之上的Java开源框架。 2,JNA有什么用? Java开发过程中,有时候会需要和C,C等交互,JNA相当于中间的适配器 3&#xf…

JNA —— Java调用C/C++动态库

工作所需,要使用Java调用c/c的动态库,实现Java程序使用动态库中的函数。 搜索了一番,常用的有JNI、JNA方法。 JNI(Java Native Interface) JNI定义了一种公用的语法,当Java和c/c都遵循这样的语法时就可以互…

关于JAVA中的JNA

1、jna是什么 jna是java native access的简称,用他可以调用C、C代码,特别是windows中强大的库文件(dll,在linux下是so文件),这样java就可以操控底层的一些东西,比如调用加密机、智能卡之类的 2、…