c# 远程监控(4) 接收端 RTP包重组 分屏显示

我们在上一期使用RTP协议,并进行了配置,打包了视频数据,这一期我们就对发送的数据进行重组,并显示在接受端上。最后对其进行扩展,支持多客户端视频发送,并在接收端分屏显示。完成远程监控的模拟。

先来个效果图吧

private bool NewRTPPacket(RTPPacket packet)
        {
            if (!Clients.ContainsKey(packet.SSRC))//如果接受端第一次接受到某源的数据,则加入到
            {
                if (Clients.Count < 4)//如果发送端为4,则丢弃包
                {
                    Clients.Add(packet.SSRC, new List<RTPPacket> {packet});
                    ImagesBoxMapping[ImagesBoxMapping.First(pair => pair.Value == null).Key] = packet.SSRC;
                }
            }
            else
            {
                Clients[packet.SSRC].Add(packet);
            }

            if (packet.Marker)//如果已经发送完毕
            {
                //丢包检测
                var orderPackets = Clients[packet.SSRC].OrderBy(rtpPacket => rtpPacket.SequenceNumber);
                if (Clients[packet.SSRC].Count != (orderPackets.Last().SequenceNumber - orderPackets.First().SequenceNumber + 1))
                {
                    Clients[packet.SSRC].Clear();//清空缓存区
                    return true;
                }

                //1.包重组
                var count = Clients[packet.SSRC].Sum(rtpPacket => rtpPacket.DataSize);//数据总数

                var newData = new byte[count];

                long offSet = 0;
                foreach (var rtpPacket in Clients[packet.SSRC])
                {
                    Array.Copy(rtpPacket.DataPointer, 0, newData, offSet, rtpPacket.DataSize);
                    offSet += rtpPacket.DataSize;
                }
                Clients[packet.SSRC].Clear();//清空缓存区

                var ms = new MemoryStream(newData);
                try
                {
                    var bmp = new Bitmap(Image.FromStream(ms));
                    var img = new Image<Bgr, Byte>(bmp);
                    ImagesBoxMapping.First(pair => pair.Value == packet.SSRC).Key.Image = img;
                }
                catch (Exception)
                {

                }
                finally
                {
                    ms.Close();
                }
            }
            return true;
        }

  完整代码可以到百度云下载:包括发送端和接收端

时间: 2024-10-25 01:56:18

c# 远程监控(4) 接收端 RTP包重组 分屏显示的相关文章

c# 远程监控(1) 大纲

闲得"蛋疼",准备用C# winform做一个远程视频监控,或者说局域网视频会议,也方面这方面的资料一般多,但是都需要整合,最主要没有可以运行的源代码,因此在这里分章节逐渐完善. Summary: 远程监控:获取远程摄像头的实时视频监控数据,并在中央管理PC上显示. 实现过程与方案: 1.前端摄像头 a.使用本地或某本地摄像头模拟远程摄像头,并获取摄像帧数据. 多媒体软件调研,可以调用摄像头 对视频数据进行H.264压缩 获取视频帧数据 b.处理获取到的摄像帧数据,并传输 对帧数据进行

RTP包的结构

live555中数据的发送最后是要使用RTP协议发送的,下面介绍一下RTP包格式. RTP packet RTP是基于UDP协议的,RTP服务器会通过UDP协议,通常每次会发送一个RTP packet.客户端通过解析RTP packet,读取其中的数据然后进行播放了. RTP packet的结构如下: RTP Header:RTP 包的头部 contributing sources:个数为0-n个,所以可以为空.具体定义参考rfc3550 RTP payload:即RTP要传输的数据 RTP H

ZigBee红外远程监控系统设计

现代安防监控越来越受到重视.它一般由图像采集.传输和存储系统组成.采用高精度的摄像头配合先进的图像处理技术和传输技术.其安防监控性能虽然很好,但也存在投资成本大,实时报警性能差.数据量大,隐蔽性差等缺点.鉴于这些不足,某些应用场合也可以用红外监控作为监控手段. 红外探测器自1800年被首次制作出来以后,经过两百多年的发展,技术已经十分成熟.它是指将不可见的红外辐射光探测出来,并且转化为可测量的信号的技术,具有适应性好,隐蔽性好,保密性强,性能稳定等优点.通过对特定波段的红外射线的探测,就可以实现

转载:JProfiler远程监控LINUX上的Tomcat过程细讲

来源于xuwanbest的博客 所谓"工欲善其事,必先利其器",好的工具确能起到事半工倍的作用.我用到的最多的就两个JConsole 和JProfiler .JConsole监控系统内存变化情况,如果有内存溢出的话,垃圾回收将会呈现锯齿状.发现问题以后,使用JProfiler,在小压力(或无压力)的情况下监控对象变化,定位内存溢出原因. JProfiler是一款Java的性能监控工具.可以查看当前应用的对象.对象引用.内存.CPU使用情况.线程.线程运行情况(阻塞.等待等),同时可以查

RTP 包格式 详细解析

H.264 视频 RTP 负载格式 1. 网络抽象层单元类型 (NALU) NALU 头由一个字节组成, 它的语法如下: +---------------+      |0|1|2|3|4|5|6|7|      +-+-+-+-+-+-+-+-+      |F|NRI|  Type   |      +---------------+ F: 1 个比特.  forbidden_zero_bit. 在 H.264 规范中规定了这一位必须为 0. NRI: 2 个比特.  nal_ref_idc

FU-A分包方式,以及从RTP包里面得到H.264数据和AAC数据的方法

FU-A分包方式,以及从RTP包里面得到H.264数据和AAC数据的方法 RFC3984是H.264的baseline码流在RTP方式下传输的规范,这里只讨论FU-A分包方式,以及从RTP包里面得到H.264数据和AAC数据的方法. H.264的NAL层处理 H264以NALU(NALunit)为单位来支持编码数据在基于分组交换技术网络中传输. NALU定义了可用于基于分组和基于比特流系统的基本格式,同时给出头信息,从而提供了视频编码和外部事件的接口. H264编码过程中的三种不同的数据形式:S

ActiveMQ实践系列1——远程监控

近期项目中应用到了ActiveMQ,本次和大家分享下ActiveMQ的远程监控,希望对大家有帮助. 情景 因某需求,需要获取一个队列(Queue)下有几个消费者,及每个消费者的使用情况. 折腾过程 找了很久没找到资料,后来发现官方提供的管理界面上有类似功能,真是踏破铁鞋无觅处,问题搞定了哈哈哈 然而--我需要是获取消费者的代码,光有界面有个毛用:然后我想到官方既然提供了界面,那肯定也是个web工程:就在安装目录下有个webapps的项目,就是管理界面的web工程. 导入web项目一番寻找后,终于

异地组网 无网络区域实现远程监控

作为新一代的安防人,成天与监控.门禁打交道,当然还有甲方爷爷,练就了一身强壮的身体,还有一个察言观色的技能,就是甲方爷爷说啥我们这些小喽喽们就得干,基本没啥反抗的,为了赚钱养家,啥事都得自己扛着,哎,说多了都是泪.说正事,最近接了个小活,说是小活也不小,就是给三个山头的临时值班处安装摄像头,其实安装摄像头都是简单的事情,地方也勘察过,去了立一根杆子,摄像头一挂就行了,而且确认现场还有电,他们自己以前为方便做饭已经拉上去了,最大的问题就是没有网,这没网的话就没法实时监控了.我最早给的建议是每个点安

物联网DTU用于空调远程监控的作用

背景 物联网(IoT)正在彻底改变暖通空调行业.连接的加热和冷却系统不仅可以帮助用户控制他们的设备,还可以为空调制造商提供更多的增值服务,包括数据采集和高级分析.随着数万台空调设备的安装,制造商需要实现对分散设备的实时状态监控,接收故障报警并提高效率. 有人物联网为空调制造商提供完整的物联网解决方案,以便从被动维护转变为主动维护,降低成本并提高客户满意度. 要求 ● 易于嵌入的物联网设备,功耗低 ● 网络传输速率低,设备成本低,在高/低温和电磁干扰环境下可靠运行. ● 网络管理功能,用于集中管理