首页 > 技术 > 技术文摘 > 基于IP Multicast的传输和实现

基于IP Multicast的传输和实现

2004-06-10 00:00:00   作者:   来源:   评论:0 点击:




  (1)前端监控现场由监控现场主机及一些外围设备组成。外围设备包括摄像机、电动镜头、云台、防护罩、监视器、多功能解码器及报警器。监控现场主机运行客户前端软件,实现视频、音频数据的实时采集、压缩、解压缩(音频)(视频传输 单向的,音频传输是双向的)及打包传送;对压缩的视(音)频数据进行经存储(也可在分近中心进行)。存储方式为循环存储、定时存储、手动存储及运动视频检测启动存储。接收来自分控中心的控制指令(也可在本地实施),对云台动作(上、下、左、右及自动)电动镜头的三可变(光圈、焦距和聚焦)。

可以通过setsocket函数设置套接字的属性,如地址重用,缓冲区是接收还是发送。

  M_localAddr.sin_family = AF_INET;

  M_localAddr.sin_port=m_iPort;//本地端口号

  M_localAddr..sin _addr.S_un.S_addr=m_uLocalIP;//本地IP地址;

  (3)绑定(将新创建的套字节与本地插口地址进行绑定):

  bind(m_socket,(PSOCKADDR)&(m_localAddr),sizeof(m_localAddr);

  (4)设置生存时间(即数据包最多允许路由多少个网段):

  WSAIoctl(m_socket,SIO_MULTICAST_SCOPE,//设置数据报生存时间;

  &iMcastTTL,//生存时间大小;

  sizeof(iMcastTTL),NULL,0,&cbRet,NULL,NULL);

  (5)配置Loopback,以决定组播数据帧是否回送:

  int bLoopback=FALSE;

  WSAIoct(m_socket,SIO_MULTIPOINT_LOOPBACK,//允许或禁止组播数据帧回送;

  &bLoopback,sizeof(bLoopback),NULL,0,&cbRet,NULL,NULL);

  (6)收发数据:

  在发送方(前端、客户端)响应发送的消息函数中调用下面函数:

  WSASendTo (m_socket,&stWSABuf,&cbRet,0,(struct sockaddr*)&stDestAddr,//发送的目的地址;

  sizeof(struct(sockaddr),NULL,NULL);

  在发送方(前端、客户端)响应接收消息函数中调用下面函数:

  WSARecvFrom(m_socket,&stWSABuf,1,& cbRet,&Flag,(struct sockaddr*)&stSrcAddr,//源地址;

  &iLen,NULL,NULL);

  (7)将组播套接字设置为异步I/O工作模式,在该套节字上接收事件为基础的网络事件通知:

  WSAEventSelect(m_socket,m_hNetworkEvent,//网络事件句柄;将此套字节与该事件句柄并联在一起;

  FD_WRITE|FD_READ);//发生此两个事件之一,则将m_hNetworkEvent置为有信号状态;

  (8)在工作线程中设置:

  WSAWaitForMultipleEvent(3,//等待事件的个数);

  p->m_eventArray,//存放事件句柄的数组;

  FALSE,WSA_INFINITE,FALSE);

  (9)关闭组播套字节:

  closesocket(m_socket);

  接收端(后端、服务器端)实现步骤:

  (1)-(3)与发送端(客户端)相同;

  (4)调用WSAJLoinLeaf加入组播组:

  SOCKET NetSock=WSAJoinLeaf(sock,//必须为组播标志进行创建,否则调用失败;

  (PSOCKADDR)&(m_stDestAddr,//组播导址,与发送方的目的地址相同;

  sizeof(m_stDestAddr),UNLL,NULL,NULL,NULL,

  JL_BOTH));//允许接收和发送;

  (5)与客户端(6)相同;(6)与客户端(7)相同;(7)与客户端(8)相同;(8)离开组播组;closesocket(NewSock);//NewSock是调用WSAoinLeaf()返回的套节字。

  2.3 在监控系统中网络传输模块的设计

  网络传输模块流程如图2所示。

  发送端(前端监控现场主机、客户端)监控主机运行客户端程序。在主线程中,启动视同、音频两个线程分别对视频及音频进行采集,放入视(音)频缓冲区;视频在本地回放;同时,监听分控中心的连接请求,收到连接请求,TCP三次握手,建立TCP连接(信令通道);通过信令通道,向分控心发送二组组播地址及端口号(对应视频及音频,音频两个线程;分别在视(音)频线程中完成;利用Winsock2建立视(音)频数据通道(UDP)(源码前已述及);对视(音)频进行压缩编码、组播发送;音频线程接收分控中心的音频数据包,解码并播放;实现视频的单向传输和音频的双向传输。

  接收端(后端分控中心、服务器端)分控中心主机运行服务器端程序,在主线程中向前端监控现场主机发出连接请求(CALL),三次握手建立TCP连接(信令通道);后端接收到组播地址及端口号后,启动视(音)频两个线程,完成;利用Winsock2建立视(音)频数据通道(UDP),加入视(音)频组播组,接收压缩视(音)频包,并解码显示(播放);其中音频线程,还要完成音频数据包解码显示(播放);其中音频线程,还要完成音频数据包的压缩、发送;实现视频的单向传输、音频的双向传输。

  一个后端分控中心可同时监控12路前端视频及音频信号,在设计服务器端监控程序时,采用多线程技术,每建立一对前端监控主机与后端分控中心(服务器)的TCP连接,就开两个接收线程(一个接收视频线程;一个接收音频线程),视频线程接收视频数据包进行解压缩及回放;音频线程接收音频数据包进行解压缩及播放。对云台及摄像机的控制指令通过信令通道传输。

  本系统运行在Win2000平台上,用VC++6.0开发工具开发。

  在远程数字音视频监控系统的传输模块设计中,根据音频频数据传输及控制信号传输的特点,运用IP组播技术极大地减轻了网络负担,避免了资源的浪费,节省了网络带宽;利用TCP/IP协议设计了信令通道(TCP)和数据通道(UDP);运用Windows多线程机制实现了音频数据的实时、多点传输和控制信号的可靠传,提高了程序运行的效率。在该系统的基础上进行改造和扩展,可以应用到远程教学、远程医疗等多种多媒体通信;因此,远程数字音视频监控系统的设计和实现不仅具有监控方面的现实意义,而且对于许多应用都有借鉴和参考价值。

中国通信网(www.c114.net)—电子技术应用

相关阅读:

分享到: 收藏

专题