利用VC++实现局域网实时视频传输

利用VC++实现局域网实时视频传输,第1张

利用VC++实现局域网实时视频传输,第2张

提出了一种适用于不同局域网的实时视频传输的通用解决方案。在使用Divx编解码器的基础上,提出了从压缩、成帧、发送到接收、解压的全过程的思路。核心源代码和传输控制策略的具体实现方案和VC++实现有效保证了高质量的实时视频传输。

关键词/服务器;实时视频传输;格式

介绍

局域网中的实时视频传输已经得到了广泛的应用。现在用来传输视频的局域网大多是有线局域网,因为有线局域网技术成熟,传输速度快,稳定性好。但由于视频数据量大,有线网络会工作不稳定,造成数据拥塞,时间长了会导致严重延迟。如果工作环境不固定,需要移动性,那么就应该采用无线网络。现在无线网卡的工作随着环境的变化变得不稳定,会导致视频传输质量明显下降,容易出现重影、抖动、花屏等现象。本文针对不同的局域网,提出了一种实时视频传输的通用解决方案,利用VC++自带的Windows VFW SDK软件开发包进行二次开发。通过Divx编解码,按照既定的传输策略,可以有效解决网络局部不稳定导致的视频图像重影、抖动、花屏等问题。

局域网中实时视频传输的问题

为了在局域网中高效、高质量地传输视频流,需要多种技术的支持,包括视频压缩、编码技术、应用层质量控制技术等。

网络的带宽是有限的,因此需要对视频图像进行压缩和传输。MPEG-4广泛应用于网络环境下的实时视频传输,因为MPEG-4具有以下优点:可以达到很高的压缩比;灵活的编码和解码复杂度;基于对象的编码允许视频和音频对象的交互;它具有容错性强等优点。本文采用Divx编解码器对视频进行编码和压缩。其实Divx=(视频)MPEG-4+(音频)MP3。

应用层质量控制技术现在采用RTP/RTCP协议来保证视频流在网络中的低延时和高质量传输。RTP数据传输协议负责音频和视频数据的流式传输和加载,RTCP负责RTP数据消息的传输控制。在该协议中,客户端(接收方)反馈网络的状态,服务器(发送方)调整信息收集和传输的速度和压缩率。但是对于图像采集的固定速度,需要软件进行压缩和解压缩。调整图像采集的速度会导致采集到的数据没有时间压缩就直接丢弃。调整编码器的压缩率需要重置编码器的参数,重新启动编码器,并调整相应的解码器。这个过程需要很长时间,不能满足实时性的要求。因此,本文不使用RTP/RTCP协议,而是从发送方出发,实时判断网络状态,采用“停止等待”策略进行实时传输。

网络中有两种通信协议,TCP和UDP。UDP更适合网络环境下的视频传输,但它不提供检错纠错功能。一旦网络被阻断,大量的数据信息就会丢失。对于Divx编解码技术,编解码是以帧为单位的,分为关键帧和非关键帧。在传输的过程中,因为压缩率高,一帧中只要有一个比特出错,就会影响到其他几百个甚至上千个比特,直接导致图像模糊、花屏等现象。只有在下一个关键帧到来的时候才有可能恢复图像的清晰度。为了保证传输的正确性,我需要在应用层做一个协议。这样一来,UDP的优势就没有了。因此,本文选择TCP进行网络通信。利用VFW技术、流媒体技术和“停等”控制策略,可以较好地解决局域网内实时视频传输容易出现的重影、抖动和花屏等问题。

实时视频传输的实现

为了实现视频的实时传输,总的思路是发送最少的冗余信息,在一定程度上发送最新的视频。

局域网实时视频传输采用服务器/客户机模式,用VC++实现。工作流程如图1所示。

图1实时视频传输工作流程

视频捕获使用AVICap从视频采集卡中捕获视频图像,并获得位图视频帧,然后由Divx编码器进行压缩。通过Winsock实现局域网内压缩视频数据的实时传输,并将接收到的数据发送到Divx解码器进行解压缩,最终实现视频显示。

VC++中采用VFW技术,客户端通过capSetCallbackOnFrame()注册回调函数。当采集卡采集到一幅图像时,系统会自动调用回调函数,然后在回调函数中使用ICSeqCompressFrame()函数进行压缩。然后压缩后的数据通过Winsock发送到服务器。服务器收到一帧后,交给ICDecompress()进行解压缩,最后用SetDIBitsToDevice()显示图像。

1、视频帧的形成

采集的视频数据为位图视频帧,经Divx编码器压缩后形成帧格式的Mpeg4流。x解码器也以帧格式解压缩。因此,建议以帧为单位发送视频数据流。为了在接收端方便地提取帧,以图2所示的格式构建帧。


帧开始标志

帧大小

帧编号

帧类型
帧数据

一个完整的帧由五个字段组成,每个字段的含义如下:帧开始标志,标志一帧的开始,占用空的4个字节。将其设置为0xffffffff。帧大小,表示整个帧的大小,包括5个场的大小,占用空的4个字节。帧号,表示帧的顺序号,占用空的4个字节。帧的类型,表示该帧是否为关键帧,占用空的1个字节。数据,存储压缩帧的完整数据。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 利用VC++实现局域网实时视频传输

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情