音视频开发基本概念及工具
文章目录
概述
音、视频编码相关内容,主要侧重IPC的视频格式编码介绍。
音频属性
采样率
一秒钟采取声音的次数,IPC一般为8K或16K(hz)
音频位深/采样值
采样值决定能够采样的振幅的最大个数。
幅度是用来衡量声音波动变化的一个参数。
每个采样数据记录的是振幅,采样精度取决于采样位数的大小:
- 8位:记录256个数,将振幅划分为256级
- 16位:65536个振幅等级,IPC大部分是该采样值
通道
- 单声道:只能使用一个喇叭去播放
- 立体声:使两个喇叭都发声
码率或比特率
指一秒钟传输的数据大小,单位是kbps,kb指千比特或千位,ps指一秒,即一秒传输多少千位数据。
码率计算公式
采样率x位深x通道数
以028为例,码率如下:
16x16x1 = 256kbps
计算音频文件大小
filesize=音频时长x码率/1024/8
以看家视频9s音频为例:
filesize=9x256/1024/8
==>028M
录音流程
采用line-in输入模拟信号给ADC模块,经过ADC转成数字信号后给到主控I2S来编码 成指定的文件格式,从而录音产生相应格式的音频文件,比如wav格式。
上述I2S还可以是:数字音频处理器或其他数字音频设备
播放流程
将音频数据I2S 输出数字信号给DAC模块,经过DAC转成模拟信号后给到功放SPK。
上述I2S还可以是:数字音频处理器或其他数字音频设备
音频专业名词
line-in口
在音频技术中,Line-in(音频输入端口),也称为Aux-in,是一种用于连接音频设备(如CD播放器、手机、MP3播放器等)或电子乐器(如键盘、吉他等)的接口。Line-in端口一般是左右声道的立体声接口,通常标记为蓝色。通过连接音频设备或电子乐器到Line-in端口,用户就可以使用设备或乐器,并将其音频输出信号输入到主机或音频设备中进行处理和录制。
Line-in端口的作用是提供一种高质量的音频输入通道,用户可以通过这个输入通道将外部音频设备的音频信号录制到计算机或音频设备中,进行后续处理或编辑。此外,Line-in端口还可以用于将音频设备或电子乐器的声音通过主机扬声器或耳机进行播放。
在多媒体应用中,Line-in口通常也被用于从外部音频设备中传输音频信号到计算机,以实现如视频会议、音频编辑、语音识别以及网上电话等应用场景。通过Line-in口输入音频信号,可以使这些应用获得更好的音质和更稳定的信号,从而提高应用质量和用户体验。
总之,Line-in端口是音频技术中非常重要的一个接口,它为用户提供了一种高质量的音频输入通道,使用户能够更好地进行音频处理、编辑和录制。
soc声卡
SoC声卡(System on Chip Sound Card)是一种基于片上系统(System on Chip,SoC)架构的声卡设备。它是一种新型的声卡设计,通过将传统声卡设备的各个组件(如Codec、DAI、CPU DAI等)整合在一起,并使用一个统一的总线架构进行接口协议,从而实现了更高效的音频处理和控制。
SoC声卡通常由三部分组成:处理器(如ARM Cortex-M、MIPS或DSP等)、音频Codec、以及相应的声卡驱动程序。其中,音频Codec负责处理声音信号的采集和输出,处理器则负责控制和配置Codec,以及处理和转换音频数据,声卡驱动程序则用于与操作系统进行交互,完成音频输入、处理和输出的控制和配置。
相对于传统的声卡设备,SoC声卡具有以下优点:
整合度高:SoC声卡将传统声卡设备的所有组件整合到一个芯片上,可以大大减少电路板面积,降低成本。
节约功耗:由于各个组件在同一芯片上,所以可以在设置时更加灵活,实现不同的功耗配置,从而可以更好地平衡功耗和性能。
稳定性好:整合的组件在同一片芯片上,不需要频繁地传输数据,因此可以提高通信稳定性,降低信号干扰。
方便使用:通过SoC声卡的接口,可以将音频输入/输出直接连接到片上系统上,没有必要使用传统的外部声卡设备,这使得音频设备更加简单易用。
总之,SoC声卡是一种新型的声卡设计,通过将声卡的各个组件整合在一起,利用芯片上系统的架构优势,可以实现更高效的音频处理和控制,同时可以降低成本、节约功耗,提高稳定性和方便性,具有非常广阔的应用前景。
DAI
在嵌入式系统或移动设备中,DAI (Digital Audio Interface) 代表“数字音频接口”,它是用于数字音频输入输出的接口之一。
在Linux ALSA驱动程序中,DAI是一个核心的概念,表示数字音频编解码器(Codec)、数字音频处理器(DSP)或其他数字音频设备(例如I2S控制器)与SoC(System on Chip)之间的数字音频数据交换接口。也就是说,DAI是硬件电路和软件驱动之间的桥梁。
DAI可以协助音频驱动程序以更高效的方式访问音频设备。它定义了音频设备的音频数据格式、采样率、比特深度、声道格式等参数,还负责音频数据的收发、读写和处理。音频设备通过定义支持的DAI标准,让驱动程序和应用程序可以方便地访问和控制它们的音频数据。
除了Linux ALSA驱动程序中的使用,DAI也广泛应用于其他嵌入式系统和移动设备中,支持多种不同的数字音频协议和接口标准,如I2S、AC’97、SPDIF等,为数字音频传输提供了重要的技术基础。
总之,DAI是数字音频输入输出的一种接口,通过定义音频数据格式、参数和相应的硬件和软件支持,可以更高效地管理和控制音频设备,提高嵌入式系统和移动设备的音频功能性能。
视频属性
分辨率
IPC
- 1080p:1920x1080,高清
- 360p: 640x360,标清
- 720p:1280x720
码率
一秒传输的数据大小,单位kbps,kb:千位,ps:每秒帧率
一秒发送多少帧,IPC:20gop
即I帧间隔,指两个I帧中间间隔多少帧,例GOP为60,则每60帧一个I帧,又因为帧率是20,则得到3S一个I帧。
视频编码
H26x
NAL
在H.264(也称为AVC)编码中,NAL单元是网络抽象层单元(Network Abstraction Layer units)的基本单元,用于封装视频压缩编码后的数据。
NAL单元组成由起始码、NAL头、NAL Payload三部分组成
起始码:3、4字节
NAL头:1字节,按低位到高位:1b 禁止位,2b 重要性指示位,5b nalu类型
禁止位:如果NAL单元有比特错误,其设置为1,以便接收方丢掉该单元
nalu类型: 1~23表示单个NAL包,24~31分包发送
SPS/PPS/SEI
其均为NALU类型,具体如下
SPS:包含的是针对一连续编码视频序列的参数,如标识符seq_parameter_set_id、帧数及POC的约束、参考帧数目、解码图像尺寸和帧场编码模式选择标识等。
PPS:对应的是一个序列中某一副图像或者某几幅图像,参数如标识符pic_parameter_set_id、可选的seq_parameter_set_id、熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识等。
SEI:主要起补充和增强的作用,SEI没有图像数据信息,只是对图像数据信息或者视频流的补充。
如果H.264码流中无PPS或者SPS的话,解码器是无法解析码流数据,自然是无法播放。
参考:http://www.xbhp.cn/news/151446.html,https://blog.csdn.net/thehunters/article/details/127049323
IDR和I帧
IDR属于I帧,I帧不一定是IDR帧。只有IDR帧,才有SPS和PPS。
RBSP
RBSP(Raw Byte Sequence Payload):
RBSP是指NAL单元(Network Abstraction Layer units)的原始字节序列。在H.264编码时,编码器将视频数据编码为一系列的NAL单元,并将每个NAL单元的数据打包成RBSP格式。RBSP是NAL单元的有效负载部分,其中包含了视频编码的所有信息,如图像数据、变换系数、标志位等。
EBSP
EBSP(Encapsulated Byte Stream Packet):
EBSP是指对RBSP进行封装和字节对齐后的数据流。EBSP通过为NAL单元添加起始码(Start Code)或字节对齐字节来标识NAL单元的边界,以及确保数据按字节对齐的要求。EBSP提供了NAL单元数据在存储和传输过程中的封装格式。
在具体实施中,NAL单元从编码器输出的RBSP首先会被封装成EBSP,然后将EBSP进行存储或传输。在解码器端,需要对接收到的EBSP进行解封装和字节对齐操作,提取出RBSP,再进行解码处理来还原视频数据。
视频专有名词
PIR测试
红外测试,主要用于摄像头探测外部红外热源,来识别人体,并进行追踪移动的一种测试。
HDR
全称high dynamis range image,高动态范围图片,能够存储更多的亮度信息。
SWDR
数字宽动态,WDR 是指Wide Dynamic Range ,意为宽动态
OSD
是on-screen display的简称,在视频画面上加上水印、时间戳等信息.
3DNR
是3 Digital Noise Reduction,数字降噪功能,能有效降低边缘噪点,再现平滑的画面
MD
是指Motion Detection 移动侦测
推流
协议
RTP
名词解释
ES-elementary streams(原始流)
直接从编码器出来的数据流,可以是编码过的视频数据流h264、mjpeg、AAC等。ES流经过PES打包器之后,被转换为PES包。
PES-Packetized Elementary streams(打包流)
ES形成的分组称为PES分组,是用来传递ES的一种数据结构。PES由包头和payload组成
PTS、DTS
PTS—PresentationTime Stamp: 表示显示单元出现在系统目标解码器(H.264、MJPEG等)的时间。
DTS—Decoding Time Stamp(解码时间标记)表示将存取单元全部字节从解码缓存器移走的时间。
metadata
rtp、rtsp协议中有一种数据类型为matedata,该数据类型用于描述数据的数据,它提供有关数据的信息和特性。
RTP+PS+H264
首条数据结构
RTP Header + PS Header +(System Header + PSM)+ PES(Header + Payload)
非首条数据结构
RTP Header + PS Header + PES(Header + Payload)
RTP报文
RTP Header:
比较重要的数据有:
PT:7位,负载类型,一般用于区分音频流还是视频流
序列号:16位,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1
SSRC:32位,同步信源标识符,该码流的唯一标识符?
PS数据
PES包含Header,一部分是 Payload
PES Header 用于存储一些描述信息,例如帧的时间戳
IDR帧:
RTP_header PSH SYS PSM PES头部 SPS_nalu PES头部 PPS_nalu PES头部 H264_IDR帧
一般情况下IDR帧很大,超过了RTP的负载长度限制,所以上面这个I帧要拆分成多个RTP包分次发送
第二包如下:
RTP_header h264_IDR剩余部分
而P/B帧,它的报文既没有SYS、PSM,也没有SPS、PPS
RTP_header PSH PES头部 H264_P/B帧
rtp和rtsp区别
RTP(Real-time Transport Protocol)和RTSP(Real Time Streaming Protocol)是在实时流媒体传输领域中扮演不同角色的两种协议,它们在功能和应用上具有一些重要区别。
功能目的:
RTP: RTP是用于实时传输音频和视频数据的传输协议。它提供了数据包的传输和序列化,并且可以确保在网络传输中以实时的方式传送多媒体数据。
RTSP: RTSP是用于控制和管理实时流媒体播放的协议。它允许客户端与流媒体服务器之间进行交互,发送控制指令以及控制播放、暂停、停止等操作。
RTP和RTSP通常结合使用,以实现完整的实时流媒体传输和控制。RTSP负责控制流媒体会话和进行媒体流的选择和控制,并使用RTP来传输实际的多媒体数据。
总的来说,RTP和RTSP在实时流媒体传输中发挥不同的作用。RTP负责传输音频和视频数据,而RTSP负责控制和管理播放、停止、暂停等操作,以及选择和管理不同的媒体流。它们一起组成了实时流媒体传输的整体解决方案。
参考
https://zhuanlan.zhihu.com/p/595923734
音视频开发工具
h264BSAnalyzer
h264数据分析工具
yuvplayer
app应用:用于播放yuv数据
VLC
app应用:用于播放网络串流,例如rtsp,rtmp等
Adobe Audition CS6
处理音频文件、调整音频参数等
作用1:将MP3转换G711A 8K
- 打开mp3文件
- 文件—另存为
- 格式—-libsndfile
- 采样类型:8K HZ,单声道,16位深
- 格式位置
格式:RAW数据;编码:a-law(g711a),u-law(g711u)
6.去掉勾选“包含标记与其他元数据”
勾选会产生很多冗余数据
详细参考:
mp4v2
开源库:用于将h264/h265数据打包成mp4文件
ffmpeg
开源库:能够处理多种格式音视频流数据的转换、及推流
推流示例:
基于ffmpeg库开发的rtsp推流代码
alse-utils
用于音频调试的开源工具包
aplay:播放
aplay -l: 列出设备内可用声卡和spk设备
aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: dummysoundcard [dummy-sound-card], device 0: x1600 i2s pcm snd-soc-dummy-dai-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
可知,card0为网卡设备节点,device0,为可作为录音和播放的设备
aplay -Dplughw:0,0 -f S16_LE -r 44100 /module_driver/up_face_audio.wav
其中-Dplughw后面的0,0:声卡0和spk设备0
-f:音频存储格式,S16:16位; BE: 大端 ; LE: 小端
-r:采样频率
arecord录音
arecord -Dhw:0,0 -f S16_LE -r 44100 -c 2 -t wav -d 10 /tmp/test.wav
-c 指定channel 个数 # 通道数:2
-d 指定录⾳的时⻓,单位时秒 # 录⾳时⻓:10s
zlmediakit
开源流媒体开发工具
- 分享
- 举报
-
浏览量:2056次2020-08-04 20:27:13
-
浏览量:973次2024-01-17 11:25:11
-
浏览量:592次2023-10-24 17:47:15
-
浏览量:3489次2020-08-03 19:28:14
-
浏览量:4405次2021-04-25 16:35:51
-
浏览量:757次2023-10-23 16:21:43
-
浏览量:4925次2021-04-26 17:29:53
-
浏览量:1104次2023-12-21 17:20:27
-
浏览量:7432次2021-07-02 15:09:39
-
浏览量:1041次2023-10-25 14:05:22
-
浏览量:1965次2022-11-21 17:11:41
-
浏览量:4180次2020-11-06 17:11:49
-
浏览量:2870次2020-11-06 17:53:15
-
浏览量:11710次2022-06-10 21:26:04
-
浏览量:684次2023-10-30 15:06:52
-
浏览量:1219次2024-02-22 15:52:02
-
2024-01-17 10:40:55
-
2020-10-21 11:35:55
-
浏览量:3497次2020-10-21 11:25:37
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
阿帅
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明