- 博客(13)
- 收藏
- 关注
原创 工业多路流实时推流存储
首先通过Linux V4L2框架驱动摄像头的MIPI摄像头采集,向上暴露dev/scale0接口,可以进行摄像头数据采集,设置为三个缓冲池用来缓冲摄像头采集后的数据使帧率足够稳定,DMA搬运后的数据,可集成OpenCV智能图像处理,通过MPP进行硬件编码之后再创建一个编码后进行PS格式封装,将PS再封装成RTP格式,最后通国UDP协议传输到指定推流地址。工业摄像头监控是检测采集进程中非常重要的部分,那么如果想要远程通过上位机监控实时画面或者存储能够在后续某个时间段进行观看,就涉及到网络存储。
2026-06-07 14:16:44
336
原创 RTSP协议推流流程详细拆解
通过TCP协议传输时:要进行三次握手且连接端口一般为554,通过UDP协议传输时:直接向指定IP地址加端口进行传输数据;客户端向服务器端发送OPTION询问服务器支持拉流还是推流、服务端会返回一个ANNOUNCE支持推流、客户端ANNOUNCE携带SDP告知服务端编码格式和详细参数、客户端SETUP协商传输通道RTP占用端口和RTCP占用端口、客户端发送RECORD字段开始推流、客户端发送RTP包传输数据、最后客户端发送TEERDOWN进行退出连接、关闭对话。
2026-04-06 22:01:49
131
原创 OpenGL在Qt中的具体使用流程
之后,通过提取frame数据的Y、U、V三分量stride行对齐、纹理宽高(这是防止绿屏的关键),填充到texture三张独立纹理中(CPU处理),再通过片元着色器进行转换成RGB格式并进行渲染显示(GPU处理)。先通过继承QOpenGLWidget和QOpenGLFunctions、初始化initialize(着色器、顶点数据)、配置窗口resizeGL、渲染线程自动回调渲染paintGL(激活纹理、纹理填充、渲染)、渲染到UI界面中。从基础三角形到整张图片渲染,再到实时视频画面输出。
2026-04-06 15:58:48
444
原创 Qt在客户端播放器的作用
1.UI界面由Widget窗口进行布局、Button、Slider控制部件放置并引入信号槽机制、通过Qt中的Connect函数将播放控件发送的信号、函数响应进行绑定、播放控件触发时函数就会响应向中间控制层发送消息;4.信号槽在播放器的作用:解耦三层:UI界面层(按钮/进度条)、中间控制层、播放器内核层;1.UI主线程与音视频子线程严格隔离:子线程直接操作按钮、画布、刷新画面会导致画面崩溃花屏;5.键盘/鼠标事件响应处理逻辑:重写KeyPressEvent空格暂停/播放、上下调节音量、左右seek跳转;
2026-04-05 20:47:51
192
原创 音视频面试总结(基础相关)
必须使用lock成员函数,lock()会尝试提升为shared_ptr,如果资源还在,返回一个有效的shared_ptr,如果资源被释放则返回一个空的shared_ptr。冒泡法、插入排序、快速排序、KMP匹配算法、二分法、哈希表、(队列、互斥锁、条件变量是音视频生产者消费者核心)、二叉树(BST二叉搜索树、红黑树)TCP与UDP的区别:TCP有拥塞控制、丢包重传、字节流传输、面向连接三次握手四次挥手,UDP无面向连接、不安全连接、不丢包重传、数据报、无拥塞控制;计数+1共享,计数归0自动释放;
2026-04-05 19:53:31
372
原创 聚焦播放器全链路优化
采用硬件解码,将解码后的数据通过内存映射到OpenGL硬件渲染,减少内存拷贝、减少渲染延迟。编码参数调整绝不能少,GOP大小、压缩质量(profile)、码率(bitrate)、帧率(fps)、分辨率、编码器缓冲区(level),这些参数是决定低延迟和降低带宽的关键指标。播放器整体优化围绕硬件加速、零拷贝、自适应缓冲区、弱网抗丢包、精准音视频同步展开,从采集到渲染的过程全链路减小延迟、提升并发效率、减少CPU占用率以及提高硬件使用率。视频进行格式转换且需要内存对齐,极大提升渲染性能与稳定性,预防花屏。
2026-03-30 20:32:16
351
原创 二次开发开源ffplay播放器下的seek关键
我的优化方案是seek之后先强制渲染几帧视频,让音频线程有时间完成有效音频帧输出并更新主时钟,只有这样音频时钟动起来,视频才能进行同步,不然视频会卡在那里,主要作用就是防止视频依旧对齐未更新的音频时钟导致一直等待。seek后标志位置为false,当音频输出第一帧更新主时钟时,再置为true,视频渲染线程根据这个标志位为true时再进行音视频同步。视频渲染快,音频播放慢,视频线程会等待音频主时钟,等到音频主时钟推进到pts后,视频才渲染,实现音视频同步。6.初始化音频主时钟,为后续音视频同步做准备。
2026-03-28 14:30:13
488
原创 RV1126实现OSD时间戳叠加
使用OSD硬件进行时间戳添加,几乎不耗CPU,适合安防场景。若想实现占用CPU移植性强轻便,跨平台,不依赖硬件进行时间戳添加的方案,则可采用OpenCV开源库,可通过cv::Mat矩阵进行处理采集的裸数据,通过cv::putText将string时间戳字符串进行添加到cv::Mat矩阵中,完成软件层字符串叠加。第一,时间戳字符串渲染。将时间戳进行字符串处理,使用TTF库进行获取相应字体格式与大小,最后调用TTF_RenderText_Solid将时间戳字符串进行RGB格式上色,此时时间戳就是一个贴图。
2026-03-27 16:15:39
469
原创 TCP/UDP协议机制到底有何区别?
3. 数据报:每个数据报都是一个完整的个体,如果数据过大超过MTU,在应用层手动分片,否则可能导致性能问题或丢包。5. 延迟高,开销大:因为要握手确认,重复核对,控制流量,写满了编号和校验码,首先成本高,送达时间也慢一些。4. 拥塞控制:发完网络层拥塞(造成丢包)时,发送端会主动把发包速度降下来,防止网络层长期堵塞出现问题。2. 不可靠:发送方不保存副本,丢了不重发,收件方收到就是收到,没收到就是没收到。UDP:无连接,不可靠,数据报,速度快,低延迟。4. 速度快/低延迟:没有握手,回执,排队等待。
2026-03-21 20:57:37
310
1
原创 公网部署服务器HttpServer
剩下的就是公网服务器的带宽大小处理,在满足带宽的情况下进行在同一房间内进行音视频流数据交互以及DataChannel数据交互(可以进行文字以及语音信息交互)。没错,如果有人想直播,直接向云服务器进行推流。SFU模式下公网服务器带宽消耗与并发人数正相关,支持多人向云服务器拉流,或者由云服务器SFU进行CDN分发,客户端通过不同拉流地址就近观看。公网,一个公网地址ip+端口号。在搭建这个多人直播间时,用到推流端(使用WHIP协议进行推流到公网服务器),拉流端(使用WHEP协议进行从公网服务器进行订阅拉流)。
2026-03-17 23:10:31
351
1
原创 RTMP推流封装核心奥义
用RTMP协议拉流写入到本地,得加上SPS和PPS以及SEI这类NALU单元。RTMP协议拉流过程分为以下几个部分:同样以视频为例,在同样以RTMP协议进行拉流的情况下,拉流端先进行接受chunk包数据,将chunk组包成rtmpMessage,解封装rtmpMessage获取packet包,将packet放到解码器进行解码获取到frame一帧视频帧数据。关于Annex-B startcode,RTMP在传输时不加startcode,只有在解码器解码时获取NALU单元时才会加上startcode进行解码。
2026-03-16 14:40:15
292
原创 WHIP和WHEP协议的区别
重点还是前面的环境搭建(如单个客户端与服务端进行SDP协商,之后服务端获取推流端candidate,之后服务端才能够独立一个pc进行与其他拉流端建立连接)也是为了单个或多个pc能够独立进行推流,当然服务端也连接着一个或多个拉流客户端的pc,经过SFU模式转发数据到拉流客户端。这个模式类似于rtmp推拉流。拉流的流程就是客户端通过向服务端进行订阅,订阅之后拉流客户端可经SFU模式转发后进行拉流,在拉流客户端(也称之为订阅者),其中订阅的过程就是拉流客户端与服务端建立媒体流通道连接的过程。
2026-03-14 14:26:02
467
原创 WebRTC一对一通话实战讲解
第二步想要传输音视频数据流就得进行建立P2P连接或者通过TURN服务器进行中继转发,其中STUN的作用是为了P2P模式提供可用的公网地址,而TURN中继服务器不依赖STUN的公网地址在P2P连接中ICE打洞失败TURN中继服务器会为客户端分配一个中继地址,这个中继地址是公网可访问的,当然在建立P2P连接中要先进行peerconnection的创建,之后进行SDP协商,之后进行交换candidate进行ICE打洞连接,如果ICE打洞失败那么ICE将进行切换中继模式进行连接。为什么要使用P2P呢?
2026-03-12 19:40:04
968
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅