- 博客(177)
- 收藏
- 关注
原创 一文彻底搞明白mp4录像方案选型!
大家好,我是txp,今天给大家分享的内容是工作当中经常会遇到的一个功能,那就是mp4录像,正确来说,录像功能,录像可以有很多种容器格式,比如:ts、mp4、mkv等,但是由于mp4格式跨平台兼容性和seek操作,比较好,所有我们就以mp4录像来展开讲讲!首先我们在做mp4格式录像,如果自己把整个mp4标准去实现的话,难度会有点大,就算可以,我们时间没有那么多,实现起来考虑没有那么全面,对于我们在企业里面开发项目的时候,不太合适,所以我们就需要去了解很多开源的mp4库,哪种比较合适嵌入式平台上进行。
2025-07-10 20:58:50
353
原创 从零写一个ALSA声卡驱动学习(8)之ALSA如何和procfs进行绑定?
需要注意的是:当调用 snd_pcm_suspend_all() 时,即使没有设置 SNDRV_PCM_INFO_RESUME 标志,也始终会触发带有 SUSPEND 的 trigger 回调。除了 SND_PCM,select 命令还支持以下组件:SND_RAWMIDI、SND_TIMER、SND_HWDEP、SND_MPU401_UART、SND_OPL3_LIB、SND_OPL4_LIB、SND_VX_LIB、SND_AC97_CODEC。在前面的示例中,所有资源的分配和释放都是手动完成的。
2025-06-29 14:35:20
643
原创 从零写一个ALSA声卡驱动学习(7)之ALSA内存管理
由于历史原因,Playback Mask 和 Playback Default 控制项的两种形式都可以在 SNDRV_CTL_ELEM_IFACE_PCM 或 SNDRV_CTL_ELEM_IFACE_MIXER 接口上实现。要创建 SG 缓冲区处理器,可以在 PCM 构造函数中调用 snd_pcm_set_managed_buffer() 或 snd_pcm_set_managed_buffer_all(),并使用 SNDRV_DMA_TYPE_DEV_SG 类型,就像其他 PCI 预分配方式一样。
2025-06-28 17:43:09
323
原创 从零写一个ALSA声卡驱动学习(6)之AC97驱动实现解析
但如果你需要在驱动中修改寄存器值,或者需要对 AC97 编解码器执行挂起/恢复(suspend/resume)操作,那么就需要保留这个指针,以便传递给相应的函数。以下寄存器可用于设置采样率:AC97_PCM_MIC_ADC_RATE、AC97_PCM_FRONT_DAC_RATE、AC97_PCM_LR_ADC_RATE 和 AC97_SPDIF。当一张声卡上有多个编解码器(Codec)时,你需要多次调用 snd_ac97_mixer(),并将 ac97.num 设置为 1 或更大的值。
2025-06-25 21:11:43
479
原创 RTMP协议之控制消息
协议控制消息1,设置块大小,用于通知对等方使用的新的最大块大小。协议控制消息2,中止消息,用于在对方正在等待数据块以完成一条消息时通知对方,然后丢弃通过数据块流部分接收到的消息,并中止处理该消息。对方接收到要丢弃的消息的数据块流ID作为此协议消息的有效载荷。当发送方已经发送了消息的一部分,但想要告诉接收方剩余的消息将不会被发送时,会发送此消息。如果对等方当前的窗口大小与消息中接收到的窗口大小不同,它会发送“窗口确认大小”回去。这个字段保存新的数据块大小,它将被用于此数据块流发送的所有未来数据块。
2025-06-24 21:35:20
587
原创 RTMP协议分块机制学习!
由完全相同大小、流ID和时间间隔的消息组成的流,应该在类型2的块之后的所有块中使用这种类型。如果第一条消息和第二条消息之间的增量与第一条消息的时间戳相同,那么类型3的块将紧随类型0的块,因为不需要类型2的块来注册增量。如果类型3的块跟随类型0的块,那么这个类型3的块的时间戳增量与类型0的块的时间戳相同。对于类型1或类型2的块,前一个块的时间戳与当前块的时间戳之间的差值在这里发送。块有效载荷的长度对于除最后一个块之外的所有块来说是最大的块大小,对于最后一个块来说是剩余部分(对于小消息可能是整个长度)。
2025-06-23 21:13:10
899
原创 从零写一个ALSA声卡驱动学习(5)
一些常用的 info 回调函数已经为你提供,方便使用:snd_ctl_boolean_mono_info() 和 snd_ctl_boolean_stereo_info()。第一部分 SOURCE(来源) 表示该控制项控制的来源,是一个字符串,例如 “Master”(主控)、“PCM”、“CD” 和 “Line”(线路输入)等。snd_ctl_new1() 会分配一个新的 struct snd_kcontrol 实例,而 snd_ctl_add() 则将指定的控件组件添加到声卡(card)中。
2025-06-22 17:50:04
1027
原创 从零写一个ALSA声卡驱动学习(4)
已分配缓冲区的物理地址存储在 runtime->dma_area 中,缓冲区大小和 period 大小则分别存储在 runtime->buffer_size 和 runtime->period_size 中。对于大多数只需要调用 synchronize_irq() 的驱动,还有一个更简单的做法:在不实现 sync_stop 回调(即设置为 NULL)的前提下,驱动在申请中断后将返回的中断号赋值给 card->sync_irq 字段即可。需要注意的是,不要将它与 pcm->private_data 混淆。
2025-06-21 20:34:11
1083
原创 从零写一个ALSA声卡驱动学习(3)
如果两者都支持,也可以同时设置。其他可选的标志还包括 SNDRV_PCM_INFO_PAUSE 和 SNDRV_PCM_INFO_RESUME。当 PCM 子流之间可以同步(通常是播放和录音流的同步启动/停止)时,也可以添加 SNDRV_PCM_INFO_SYNC_START 标志。如果你的芯片支持一些非常规的采样率,还需要添加 SNDRV_PCM_RATE_KNOT 标志,并手动设置相应的硬件约束(后文会详细介绍)。需要注意的是,运行时实例中保存的是描述符的一个副本,而不是对原始描述符的指针。
2025-06-20 21:16:13
968
原创 从零写一个ALSA声卡驱动学习(2)
如果你是通过 request_region() 或 request_mem_region() 手动申请的资源,则可以通过 release_resource() 来释放。但在实际分配之前,需要将该中断号初始化为 -1,因为中断号 0 是合法的。在 PCI 总线上,中断是可以共享的,因此在调用 request_irq() 时需要使用 IRQF_SHARED 作为中断标志。PCI 资源的分配是在 probe 函数中完成的,通常会专门编写一个额外的 xxx_create() 函数来实现这一目的。
2025-06-14 21:42:28
582
原创 rtmp客户端和服务端怎么进行握手?
版本 : 8 bits,在C0中,这个字段标识客户端请求的RTMP版本。32-255是不允许的(以便允许区分RTMP和始终以可打印字符开始的基于文本的协议)。由于每个端点都必须区分它自己发起的握手响应和其对等端发起的握手,因此这个数据应该发送足够随机的内容。客户端(发起连接的端点)和服务器各自发送三个相同的块。它由三个固定大小的块组成,而不是由包含头的可变大小的块组成。这个字段必须包含在S1(对于C2)或C1(对于S2)中由对等端发送的时间戳。这个字段必须包含读取对等端之前发送的包(S1或C1)的时间戳。
2025-06-13 23:10:39
398
原创 从零写一个ALSA声卡驱动学习(1)
不过,至少 ALSA 的内核 API 是一致的,因此本文档在编写这些驱动时仍然具有一定的参考价值。“card” 记录是声卡的核心管理结构,它负责管理该声卡上的所有设备(组件),例如 PCM、混音器(Mixer)、MIDI、合成器等。虽然 Linux 系统本身有标准的 i2c 层,但某些声卡只需要简单的操作,而标准的 i2c API 过于复杂,因此 ALSA 对某些声卡实现了自己的 i2c 代码。在 snd_mychip_probe() 函数中的注释行里标注的数字,对应的是下一节中将详细解释的内容。
2025-06-08 00:01:07
931
原创 RTMP协议基本介绍
当与可靠的传输协议如[TCP]一起使用时,RTMP块流提供了所有消息的保证有序端到端传递,这些消息跨越多个流,并且按照时间戳排序。例如,一个直播视频服务器可能会选择丢弃慢速客户端的视频消息,以确保音频消息能够及时接收,这基于发送每个消息所需的时间或确认每个消息所需的时间。除此之外,就RTMP块流而言,这是一个不透明的值。这篇备忘录描述了实时消息传输协议块流(RTMP块流),这是一种为多路复用和打包多媒体传输流(如音频、视频和交互式内容)而设计的应用程序级协议,它通过合适的传输协议(如TCP)进行传输。
2025-06-07 20:11:27
495
原创 rtp接收端,怎么解包rtp数据包?
如果检测到 DPA 丢失(在考虑了可能的重传和前向纠错(FEC)后),网关可以决定不发送对应的编码片段数据分区 B 和 C,因为对于 H.264 解码器来说,这些分区在没有 DPA 的情况下已经没有意义。如果发现某个 FU 丢失,网关可以决定不发送同一被片段化的 NAL 单元的后续 FU,因为在前面部分丢失的情况下,后续部分对 H.264 解码器已经无意义。对于所有包含同一个 NAL 单元片段的FU-A 包,去封装时,需要按照发送顺序将这些片段拼接起来,恢复成完整的 NAL 单元,再将其传递给解码器。
2025-04-20 11:29:47
402
原创 rtp三种模式传输打包规则:single nalu、non-interleaved、non-interleaved
禁止使用 STAP(单时间聚合包)、MTAP(多时间聚合包)和 FU(分片单元)。● 对于属于同一编码图像(coded picture)的编码切片 NAL 单元(coded slice NAL units)或编码切片数据分区 NAL 单元(coded slice data partition NAL units)(即它们共享相同的 RTP 时间戳), 可以(MAY)以任意顺序发送;序列参数集和图像参数集的 NAL 单元可以被复制,以提高其正确接收的概率,但是,这种复制绝不能改变任何活动参数集的内容。
2025-04-19 16:19:11
782
原创 rtp载荷结构类型:单一NAL单元包、聚合包、分片单元
对于聚合包(Aggregation packets,如 STAP 和 MTAP),RTP 头部中的标记位必须设定为:如果聚合包中最后一个 NAL 单元单独传输时所应具有的标记位的值。例如,在视频编码 profile 允许任意片段顺序(arbitrary slice order)的情况下,同一编码图像的所有编码片段的 NAL 单元可以使用相同的 DON 值。发送端不应发送这些类型的NAL单元(无论是直接作为载荷,还是作为聚合包中的聚合单元,亦或是FU分片包中的分片单元),接收端必须忽略这些类型的NAL单元。
2025-04-12 23:58:25
664
原创 RTP Payload Format for H.264 Vide(1)
● 编码视频序列(coded video sequence):按解码顺序排列的访问单元序列,由一个瞬时解码刷新(IDR)访问单元开始,后面跟着零个或多个非IDR访问单元,直到下一个IDR访问单元(不包括该IDR单元)为止。但在存在错误或丢包的码流中,冗余编码图像的内容可用于解码处理。● 默认子配置(default sub-profile):编码工具的子集,可以是一个profile的全部编码工具,也可以是多个profile共有的编码工具子集,由 profile-level-id 参数指示。
2025-04-09 22:07:17
854
1
原创 rnn的音频降噪背后技术原理
这是一个传统噪声抑制算法的概念图示。2、避免“音乐噪声(musical noise)”伪影: 所谓音乐噪声,是指噪声抑制时只让一个频点通过,而旁边的频点被强烈压制,从而产生类似“哒哒哒”或“嗡嗡嗡”的金属感杂音。如果使用较宽的频带,我们要么让整段频带通过,要么整体压制,这样就不会留下孤立的频点,从而避免这种伪影。此外,我们的目标也和很多使用深度学习做语音降噪的研究不同: 我们关注的是实时通信,而不是语音识别。顾名思义,它的核心思想是:从一个带噪声的信号中尽可能去除噪声,同时对其中的语音内容造成最小的失真。
2025-04-02 19:59:32
746
原创 opus编码控制参数
opus介绍:本文档定义了Opus交互式语音与音频编解码器。Opus专为广泛的实时音频应用场景设计,包括IP语音(VoIP, Voice over IP)、视频会议、游戏内语音聊天,甚至实时分布式音乐演出。其支持的码率范围从6 kbit/s的低比特率窄带语音到510 kbit/s的高质量立体声音乐。Opus结合线性预测(Linear Prediction, LP)与改进的离散余弦变换(Modifi...
2025-02-16 16:02:06
1011
原创 v4l2 controls底层控制功能到底怎么实现?
一、v4l2 controls介绍:V4L2 控制 API 看起来足够简单,但在驱动程序中正确实现时会变得非常困难。然而,处理控制所需的大部分代码实际上并非特定于驱动程序,可以移到 V4L2 核心框架中 。毕竟,驱动开发者关心的唯一部分是:● 1、我如何添加一个控制?● 2、我如何设置控制的值?(即 s_ctrl)偶尔还会有:● 1、我如何获取控制的值?(即 g_volatile_ctrl)● 2...
2025-01-24 12:15:41
788
原创 2024的大变局之年!
前言:大家好,转眼间就到了2025,真的是越长大,时间过得越来越快,快的让人无法喘息呀!回顾2024,不管是个人还是整个社会来说,都是一个新的大变局,那就是ai的横空出世,这里的"横空出世"更加具有影响力,包括学习、生活等各方面都产生了颠覆性的改变,再次让生产力得到了极大提高,但是也会加快对"低端、机械重复"很多产业的淘汰,这也会带来一些问题!但是这都改变不了2024-ai的大浪潮来袭,以及未来的...
2025-01-04 13:23:39
608
原创 rk3568之mpp开发笔记记录之摄像头实时码流获取的神秘面纱
前言:大家好,在上一篇文章里面,我给大家解读了怎么获取imx415-sensor的实时码流的细节,今天开始会解析里面到底是怎么实现的?提前透露一点,整个摄像头驱动框架和上层调用,都会涉及到v4l2的开发使用,所以对于v4l2的掌握非常重要。mpp编码器框架执行流程:整个mpp单路码流测试源码,我们从下面这个接口mpi_enc_test开始解读,一步一步来学习里面的原理和实现:下面是整个代码的执行流...
2024-12-29 13:35:39
1199
原创 rk3568之mpp开发笔记怎么实现mpp编码摄像头实时码流?
前言:大家好,今天给大家分享的内容是在rk3568上,通过mpp来进行实时对摄像头imx415采集的码流数据进行编码成h264或者h265,后期文章,会开发测试一下通过rtsp推流出去,然后电脑端拉流,看一下整个环路的延迟多大,会采用slice的方式去进行编码,mpp编码器有类似的配置。ok,我们开始今天的内容!怎么找到摄像头视频节点?首先要明白为啥要找到摄像头的视频节点,毫无疑问,上层要能够访问...
2024-12-22 00:08:57
1522
原创 rk3568之mpp开发笔记mpp移植到开发板
前言:大家好,今天给大家介绍的内容是rk平台的mpp编解码这块的内容,在rk目前看到有三套框架涉及到编解码内容:1、rkmedia2、rockit3、mpp这三种不同形式的编解码方式,后面再做详细的框架对比,今天我们主要是怎么移植mpp源码到开发板里面去。这里主要是记录一下学习过程!开始移植mpp源码mpp源码一般在对应的sdk里面的external里面也有,我这里不用sdk里面的mpp源码,而是...
2024-12-08 00:20:33
1420
5
原创 到底什么是DRM?
前言:直接渲染管理器(Direct Rendering Manager,DRM)是 Linux 内核的一个子系统,负责与现代显卡的 GPU 进行接口。DRM 提供了一个 API,用户空间程序可以通过这个 API 向 GPU 发送命令和数据,执行如配置显示模式设置等操作。DRM 最初是作为 X 服务器直接渲染基础设施(Direct Rendering Infrastructure,DRI)的内核空间...
2024-12-06 22:54:35
2497
原创 读完曾国藩自传,我泪目了!
前言:大家好,趁着2024还有一个月,记录一下非技术方面的学习:最近看的曾公的自传,里面有很多关于为人处事、子女教育、自身成长相关的很多内容!感想总结:之所以截取这段话出来,自己以前也是这种经历,自己很用功,但是就是拿不到结果,内心很沮丧,感觉自己咋那么笨;不过后面也是由于有前面的积累,找到了适合自己的方法,后面做事情就稍微顺了很多,也就是说:"悬牌批责",从失败中总结,去归纳,找到问题点,然后去...
2024-12-01 00:45:01
236
原创 怎么解决码流多slice场景下的马赛克、绿屏问题?
前言:大家好,在我们平时做视频解码过程中,会经常遇到如下这些问题:花屏、绿屏、抖动、卡顿等问题,应该说这些问题,是很容易遇到的,而且有时候很难解决,同时大部分原因可能是在弱网环境下,导致传输过程中丢数据,进而在解码器拿到码流数据进行解码的时候,就会出现上述描述的问题!而今天我要给大家分享的主题是:没有丢数据的情况,在解码器上进行解码,呈现出花屏或者绿屏的现象,如下下面图片所示:那这种情况到底是什么...
2024-11-09 20:19:31
709
1
原创 rtp协议:rtcp包发送和接收规则和报告!
RTCP Packet Send and Receive Rules:发送和接收 RTCP 包的规则在此列出。允许在多播环境或多点单播环境中运行的实现必须满足第 6.2 节中的要求。这样的实现可以使用本节定义的算法来满足这些要求,或者可以使用其他算法,只要其性能等同或更优即可。在受限于两方单播操作的实现中,仍然应使用 RTCP 传输间隔的随机化,以避免在相同环境中运行的多个实例产生意外的同步,但可...
2024-10-28 00:00:20
972
原创 rtp协议:rtcp包格式和传输间隔
RTP Control Protocol -- RTCP-rtp控制协议实时传输控制协议(RTCP)基于对会话中的所有参与者定期传输控制包,使用与数据包相同的分发机制。底层协议必须提供数据包和控制包的多路复用,例如使用UDP时使用不同的端口号。RTCP执行四种功能:1、其主要功能是提供对数据分发质量的反馈。这是RTP作为传输协议角色的一个不可分割的部分,并且与其它传输协议的流量和拥塞控制功能相关(...
2024-10-27 00:02:46
1257
原创 rtsp协议:响应状态码和请求方法大总结
RTSP 消息 :RTSP 是一种基于文本的协议,使用 UTF-8 编码的 ISO 10646 字符集(RFC 2279 [21])。行以 CRLF 作为结束符,但接收方也应该准备好将 CR 和 LF 单独作为行结束符进行解释。基于文本的协议使得以自描述的方式添加可选参数变得更加容易。由于参数的数量和命令的频率较低,处理效率不是一个问题。基于文本的协议,如果设计得当,还可以轻松地使用诸如 Tcl、...
2024-10-26 10:49:37
1281
原创 rtsp协议:rtsp协议参数介绍
目的:实时流协议(RTSP)用于建立和控制单个或多个时间同步的连续媒体流,例如音频和视频。RTSP 通常不负责实际传输这些连续的媒体流,但可以将连续媒体流与控制流进行交错传输(参见第 10.12 节)。换句话说,RTSP 就像是多媒体服务器的“网络遥控器”。要控制的流集合由呈现描述(presentation description)来定义。本备忘录未定义呈现描述的格式。RTSP 中没有连接的概念;...
2024-10-12 20:16:09
1614
原创 rtp协议:rtp固定头部介绍
前言:大家好,今天开始给大家分享rtp协议的相关详细介绍,关于rtsp的介绍,大家可以暂时看官方的文档:https://datatracker.ietf.org/doc/html/rfc2326本文主要是介绍rtp协议,也就是在开发rtsp过程进行传输实际数据的部分,这部分内容也是参考官方的资料:https://www.rfc-editor.org/rfc/rfc3550介绍:该备忘录指定了实时传...
2024-09-28 19:46:20
1875
原创 深度理解srt协议中的ACK和NAK、丢包重传机制!
SRT Sockets , Send List & Channel:考虑套接字1和套接字2,每个都有自己的发送缓冲区。SndQ包含一个待发送的数据包列表。有一个线程持续检查发送缓冲区。当一个数据包准备好发送时,会创建一个CSnode来标识该数据包所属的套接字,并在SndQ中创建一个对应的对象,该对象将指向发送缓冲区。每个数据包都有一个时间戳,指示何时发送它。SndQ列表按照待处理的时间戳排...
2024-09-22 21:18:33
1489
原创 mipi协议:延迟减少和传输效率(LRTE)
Latency Reduction and Transport Efficiency(LRTE)(延迟减少和传输效率(LRTE)):延迟降低和传输效率(LRTE)是一个可选的CSI-2特性,它有助于最佳传输,以支持一些新兴的成像应用。LRTE有两个部分,将在本节中进一步详细说明:1、包间延迟减少(ILR)2、增强的传输效率。interpacket Latency Reduction (ILR):根...
2024-09-21 10:03:03
1707
原创 嵌入式流媒体SRT协议:send buffer和窗口延迟机制
Handshake Packets:握手控制包(“包类型”位 = 1)用于在点对点的 SRT 会话中建立两个对等体之间的连接。早期版本的 SRT 依赖于握手扩展来在连接建立后立即交换某些参数,但自 1.3 版本起,集成机制确保所有参数作为握手的一部分进行交换。有关详细信息,请参阅本文档后面的握手部分。KM Error Response Packets(key message 错误响应包):密钥消息...
2024-09-16 12:19:33
1401
原创 嵌入式流媒体SRT协议:Packet Structure
SRT协议介绍:SRT(Secure Reliable Transport Protocol)基于UDP数据传输协议派生出的SRT协议,是一个用户级协议,它保留了大部分核心概念和机制,同时引入了一些改进和增强,包括控制包的修改、改进的流控制以处理实时流媒体、增强的拥塞控制,以及加密数据包的机制。他的源码仓库:https://github.com/Haivision/srtSRT是一种传输协议,它能...
2024-09-15 10:09:41
1586
原创 mipi协议:多通道分配和合并
Multi-Lane Distribution and Merging:CSI-2 是一个通道可扩展的规范。对于需要比单个数据通道提供更多带宽的应用,或者那些希望避免高时钟频率的应用,可以通过增加数据通道的数量来扩展数据路径,从而近似线性地提高总线的峰值带宽。为了确保使用多个数据通道的主机处理器和外设之间的兼容性,在更高层数据与串行比特或符号流之间的映射被明确定义。概念上,在物理层和更高功能层之间...
2024-09-07 20:46:28
1557
原创 mipi协议:Camera Control Interface(I3C-SDR)
CCI(I3C SDR) Data Transfer Protocol:CCI(I3C)数据传输协议遵循I3C规范。启动条件(START)、重复启动条件(Repeated START)和停止条件(STOP),以及数据传输协议,都在[MIPI03]中进行了规定。如果支持CCI(I3C),那么必须支持CCI(I3C SDR),而CCI(I3C DDR)则可以选择支持。在进行CCI(I3C)数据传输之前...
2024-09-01 19:17:37
1276
原创 mipi协议:Camera Control Interface(CCI (I2C))
Camera Control Interface(CCI)CCI 是一种用于控制发射器的双线、双向、半双工串行接口。CCI 兼容 I2C 快速模式(Fm)或快速模式增强型(Fm+)[NXP01] 变体,以及 I3C [MIPI03] 接口的单数据速率(SDR)或双数据速率(DDR)协议。CCI 应支持高达 400kbps 的(Fm)操作和 7 位从机地址。此外,CCI 可以选择性地支持高达 1Mb...
2024-08-31 12:09:56
2248
原创 mipi协议:CSI-2总体描述
定义:CCI(I2C):支持I2C的CCI。CCI(I3C):支持I3C的CCI。CCI(I3C SDR)**表示支持I3C SDR的CCI。CCI(I3C DDR)**表示支持I3C DDR的CCI。通道(Lane):一种单向、点对点的2线或3线接口,用于高速串行时钟或数据传输;使用的线数由所用的物理层(PHY)规范决定(即D-PHY或C-PHY)。使用D-PHY物理层的CSI-2摄像头接口由一...
2024-08-28 22:38:19
1278
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人