CN106534889B - 一种基于环形缓冲的实时流媒体多路转发方法 - Google Patents

一种基于环形缓冲的实时流媒体多路转发方法 Download PDF

Info

Publication number
CN106534889B
CN106534889B CN201611033866.8A CN201611033866A CN106534889B CN 106534889 B CN106534889 B CN 106534889B CN 201611033866 A CN201611033866 A CN 201611033866A CN 106534889 B CN106534889 B CN 106534889B
Authority
CN
China
Prior art keywords
video
client
video data
buffer
channel
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201611033866.8A
Other languages
English (en)
Other versions
CN106534889A (zh
Inventor
赵霞
崔迎宝
刘迎
管文华
赵梦瑶
赵松
陈晨
王宸禹
王雪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Technology and Business University
Original Assignee
Beijing Technology and Business University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Technology and Business University filed Critical Beijing Technology and Business University
Priority to CN201611033866.8A priority Critical patent/CN106534889B/zh
Publication of CN106534889A publication Critical patent/CN106534889A/zh
Application granted granted Critical
Publication of CN106534889B publication Critical patent/CN106534889B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/60Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client 
    • H04N21/63Control signaling related to video distribution between client, server and network components; Network processes for video distribution between server and clients or between remote clients, e.g. transmitting basic layer and enhancement layers over different transmission paths, setting up a peer-to-peer communication via Internet between remote STB's; Communication protocols; Addressing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/65Network streaming protocols, e.g. real-time transport protocol [RTP] or real-time control protocol [RTCP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/70Media network packetisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/75Media network packet handling
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/80Responding to QoS
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/234Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs
    • H04N21/23406Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving management of server-side video buffer
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/44004Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving video buffer management, e.g. video decoder buffer or video display buffer
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/60Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client 
    • H04N21/63Control signaling related to video distribution between client, server and network components; Network processes for video distribution between server and clients or between remote clients, e.g. transmitting basic layer and enhancement layers over different transmission paths, setting up a peer-to-peer communication via Internet between remote STB's; Communication protocols; Addressing
    • H04N21/643Communication protocols
    • H04N21/6437Real-time Transport Protocol [RTP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明公开了一种基于环形缓冲区的实时流媒体多路转发控制方法,该方法包括:1)在服务器端和客户端分别建立环形缓冲及多线程并发的框架结构;2)当客户端要查看视频采样设备的视频时,客户端向服务器端发请求视频的消息;3)服务器端接到消息后向NVR请求视频,由主线程接收NVR发来的视频流,挂接到环形缓冲上,由视频流通道对应子线程向客户端发送视频流;4)客户端主线程接收到视频流后挂接到环形缓冲上,由对应的子线程播放到对应的窗口上。通过改进算法,可优化系统,减少系统资源浪费,提高系统综合性能,改善用户的实时性体验。

Description

一种基于环形缓冲的实时流媒体多路转发方法
技术领域
本发明涉及实时视频流媒体多路转发软件,具体涉及一种基于环形缓冲区管理视频数据包的实时流媒体多路转发控制方法,属于实时流媒体软件领域。
背景技术
流媒体是指在网络上以流式传输方式传送的视频数据,传输的视频数据采用编码压缩以便减少传输的数据量,目前采用以H.264编码标准进行压缩,用户通过解码设备解码压缩的数据流即可播放视频。
实时流式传输是流媒体中的一种传输方式,主要是保证传输的流媒体数据与网络传输性能相匹配,使用户体验实时性能为主旨,更强调实时性。实时流式传输需要专用的流媒体服务器与传输协议,专用的流媒体服务器有QuickTime Streaming Server、WindowsMedia Server等;专用的传输协议有RTSP(Real-time Streaming Protocol)或MMS(Microsoft Media Server)等。
流媒体在网络上以包传输方式进行断续传输,其中TCP协议是可保证包顺序的可靠传输,对于连续的流媒体视频数据流,简单采用TCP协议即可保证其顺序性。由于网络是动态变化的,而采集得到的视频流数据是连续的均速获取的,必须保证二者的速度匹配以达到实时预览效果。用户要控制视频采样设备时,需要实时反馈控制后的视频图像,因此也要求控制的实时性能。
H.264编码标准是目前普遍应用于视频压缩领域的编码标准,是适合实时视频通信的编码规范,其以高压缩高质量和支持多种网络流媒体为主要特征。在H.264协议里定义了三种帧,完整编码的帧叫I帧,参考之前的I帧生成的只包含差异部分编码的帧叫P帧,还有一种参考前后帧编码的帧叫B帧。IDR帧是即时解码刷新帧,是I帧中的一种,为区分首个I帧和其他I帧,把第一个I帧定义为IDR帧。IDR帧的作用是立刻刷新,使错误不致传播,播放器收到IDR帧则立刻播放IDR帧,抛弃IDR帧之前所有的历史帧。
本发明公开了一种基于环形缓冲区的实时流媒体多路转发控制方法,服务器端与客户端各自采用多线程并发及缓冲技术改进转发视频的实时性能,改进服务器端和客户端的接收和发送效率。主要包括:(1)在服务器端和客户端分别建立环形缓冲及多线程并发的框架结构;(2)当客户端的用户要求查看某路视频采样设备ID的视频时,客户端向服务器端发请求视频的消息;(3)服务器端接到请求视频消息后,向NVR请求视频,由主线程接收NVR发来的视频流,挂接到环形缓冲上,由视频流通道对应的子线程向客户端发送视频流;(4)客户端的主线程接收到视频流后,挂接到环形缓冲上,由视频流通道对应的子线程播放到对应的窗口上。通过改进算法,可优化系统,减少系统资源浪费,提高系统综合性能,改善用户的实时性体验。
发明内容
本发明的目的在于实现一种基于H.264编码的实时流媒体多路转发控制方法,客户端申请实时视频后以最小延时播放视频;客户端云控视频采样设备后,使客户端以最小延时代价播放云控后的视频画面,从而改善用户实时性体验。
具体来说,本发明的方法包括下列内容:
A.在服务器端和客户端分别建立基于环形缓冲区的多线程并发的框架结构,具体实现步骤如下:
A1.服务器端为每个通道创建一个环形缓冲区和一个子线程,每个通道对应于一路视频采样设备;
A1.1所述的环形缓冲区由一个环形数组和若干个视频数据缓冲区组成,数组的每个节点指向从NVR接收到的视频数据缓冲区(Video Data Buffer,简称VDB);
A1.2环形缓冲区包含但不限于以下成员:
-视频流头指针head,指向要转发的一个视频数据缓冲区,初值为-1;
-视频流尾指针tail,指向从视频采样设备上新获取的一个视频数据缓冲区,初值为-1;
-未来IDR帧指针FutureIDR,指向未来要转发的关键帧的视频数据缓冲区,初值为-1;
-已转发IDR帧指针LastIDR,指向已转发的关键帧的视频数据缓冲区,初值为-1;
-当前正在转发的数据帧nCurP,指向当前正在转发的视频数据缓冲区,初值为-1;
A1.3所述的视频数据缓冲区包含但不限于以下成员:
-通道号nID,视频采样设备的编号;
-关键帧标志nIDR,表示是否为关键帧,1为关键帧,0为非关键帧;
A1.4服务器端的主线程负责将从NVR收到的VDB放到通道号对应的环形缓冲区上;
每个通道对应子线程负责从环形缓冲区摘取视频数据缓冲区,并将视频数据缓冲区发送给客户端;
A1.5每个通道有一个端口号数组,及对应的转发标志位SocFlag数组;端口号数组的每个单元里保存一个客户端的socket,转发标志位SocFlag数组的每个单元与端口号数组里的每个单元对应,表示该是否给该客户端转发视频;-1表示不转发,并删除客户端对应的socket;0表示转发;1表示暂停,用于轮巡;
A2.与服务器端类似,客户端为每个通道创建一个环形缓冲区和一个子线程;
A2.1环形缓冲区和视频数据缓冲区的结构与服务器端类似;
A2.2客户端的主线程负责将从服务器端收到的VDB放到通道号对应的环形缓冲区上;
每个通道对应的子线程负责从环形缓冲区摘取视频数据缓冲区,并进行播放;
A2.3每个通道有一个窗口号数组,记录需要播放视频的窗口号nPort,用以支持在多个窗口播放同一路视频;
B.当客户端的用户要求查看某路视频采样设备的视频时,客户端向服务器端发请求视频的消息,具体步骤如下:
B1.当客户端的用户要求在某个窗口上查看某路视频采样设备的视频时,客户端查看本地是否有所要求的视频采样设备对应的通道及其环形缓冲区;
B2.如果没有,则向服务器端发送请求视频流的消息;如果有,则不发送视频请求,而是将新窗口号加入该通道的窗口号数组;
C.服务器端接到请求视频消息后,转发所要求的视频数据给该客户端;具体实现步骤如下:
C1.服务器端接到请求视频消息后,检查本地是否有客户端所要求的通道及其环形缓冲区,
-如果没有,则为该视频采样设备建立相应的通道并启动一个子线程;然后向NVR发送请求视频流的消息;
-如果有,将客户端的socket加入到该通道的端口号数组里,并将SocFlag标志置为-1;
C2.服务器的主线程接收到NVR发来的视频数据,将其挂接到环形缓冲区上,具体步骤如下:
C2.1如果系统初次接收到视频数据,则将head和tail都置为0,并将视频数据缓冲区挂接到tail所指的数组单元上;
C2.2否则,将tail加1,进行下述处理:
C2.2.1如果环形缓冲区不满,则清除tail所指的视频数据缓冲,并将新接收的视频数据缓冲区挂接到tail所指的数组单元上;
C2.2.2如果环形缓冲区满,则进行下述处理:
-如果tail等于LastIDR,则将LastIDR置为-1;
-如果tail等于head,并且FutureIDR不为-1,则将head置为FutureIDR;
-清除tail所指的视频数据缓冲,将新接收的视频数据缓冲区挂接到tail所指的数组单元上;
C2.3如果新加的数据帧为关键帧,将tail的值赋给FutureIDR;
C3.服务器上该通道的子线程执行一个永真循环,从环形缓冲区上取视频数据缓冲区,发送给对应的客户端;具体实现步骤如下:
C3.1子线程将head指针的值赋给nCurP;
C3.2如果nCurP为-1或者等于tail(表示环形缓冲区上没有可以发送的视频数据缓冲区),则子线程睡眠100秒之后,重新开始循环;
C3.3如果该通道有可发送的视频数据缓冲区,则子线程将nCurP所指的视频数据缓冲区发送给各个客户端,具体实施步骤如下:
C3.3.1如果某个客户端的转发标志位SocFlag值为-1,则不转发给该客户端,并断开与该客户端的网络连接;
C3.3.2如果SocFlag值为0,则转发给对应的客户端;
C3.4如果该转发的视频数据为关键帧,则将nCurP的值赋给LastIDR;如果nCurP与FutureIDR相等,则将FutureIDR置为-1;
C3.5如果head的值没有被主线程改变,则将head加1,指向下一个要发送的视频数据缓冲区,然后回到循环起始点;否则直接回到循环起始点;
D.客户端的主线程接收到视频流后,由视频流通道对应的子线程播放到对应的窗口上,具体实现步骤如下:
D1.客户端的主线程接收到服务器端发来的视频流,将视频数据缓冲区挂接到该通道对应的环形缓冲区上,具体步骤与C2类似;
D2.客户端各个通道上的子线程执行一个永真循环,从环形缓冲区里摘取视频数据缓冲区,在指定的窗口上解码并播放视频,具体实施步骤如下:
D2.1将nCurP赋值为head,指向要播放的视频数据缓冲区;
D2.2获取要播放该通道视频的窗口号nPort,并在各个窗口中播放视频;
D2.3如果当前正在播放的视频为关键帧,则按照C3.4和C3.5的步骤更新LastIDR、FutureIDR及head的值。
本发明的优点是从服务器端和客户端两个进程分别做基于H.264编码的视频转发及控制的实行性能改善,利用实时应用需求,适当时机抛弃影响实时性能的历史视频数据,从而改善客户端用户的实时性能体验,因此该方法具有良好的应用前景和市场价值。
附图说明
图1:方法流程图
具体实施方式
下面结合附图,通过一套已经部署实现的系统实施改进实例,对本发明作进一步描述。该部署实现的系统配置是:
名称 设备型号 数量
海康NVR DSA-7300 1
视频采样设备 枪球一体机、网络球机,半球机 4
服务器 Windows server 2008R2、Access 2007 1
客户端 OS:windows XP 2
下面结合系统实例对本发明作进一步描述:
服务器端:(1)服务器端的主线程接收客户端请求视频的消息,消息中包含视频采样设备ID;(2)检查本地是否有视频采样设备ID所对应的通道的视频流,如果没有,则为该视频采样设备ID建立相应的通道,向NVR发送请求视频流的消息;2.1建立环形缓冲区;2.2启动一个子线程负责从环形缓冲上取视频流,发送给对应的客户端(3)主线程接收到NVR发来的视频流,将视频数据缓冲区挂接到该通道对应的环形缓冲上;(4)各个通道上的子线程从环形缓冲区里摘取视频数据缓冲区,通过socket发送给客户端;
客户端:(1)当用户要求查看某路视频采样设备ID的视频时,客户端首先查看本地环形缓冲是否有所要求的视频采样设备ID对应的通道的视频流,如果没有,则向服务器端发送请求视频流的消息;(2)客户端的主线程接收到服务器端发来的视频流,将视频数据缓冲区挂接到该通道对应的环形缓冲上;(3)客户端各个通道上的子线程从环形缓冲区里摘取视频数据缓冲区,在指定的窗口上解码并显示视频流。
具体实施步骤如下:
A在服务器端和客户端分别建立基于环形缓冲区的多线程并发的框架结构,具体实现步骤如下:
A1.服务器端为编号为22号的视频采样设备建立通道,通道ID为22;为该通道创建一个环形缓冲区和一个子线程;环形缓冲区包含:视频流头指针m_nHead,初值为-1;视频流尾指针m_nTail,初值为-1;未来IDR帧指针m_nFutureIDR,初值为-1;已转发IDR帧指针m_nLastIDR,初值为-1;当前正在转发的数据帧nCurP,初值为-1;视频数据缓冲区包含:通道号nID为22;关键帧标志nIDR,初值为0;
服务器端的主线程负责将从NVR收到的VDB放到通道号对应的环形缓冲区上;子线程T1负责从环形缓冲区摘取视频数据缓冲区,并将视频数据缓冲区发送给客户端;
22号通道有一个端口号数组,及对应的转发标志位SocFlag数组;端口号数组的每个单元里保存一个客户端的socket,转发标志位SocFlag数组的每个单元与端口号数组里的每个单元对应,初值为0;
A2.与服务器端类似,客户端为22号通道创建一个环形缓冲区和一个子线程;环形缓冲区和视频数据缓冲区的结构与服务器端类似;客户端的主线程负责将从服务器端收到的VDB放到22号通道对应的环形缓冲区上;22号通道上的子线程T2负责从环形缓冲区摘取视频数据缓冲区,并进行播放;22号通道有一个窗口号数组,记录需要播放视频的窗口号nPort,用以支持在多个窗口播放同一路视频;
B.当客户端的用户User1第一次要求在窗口1上查看22号视频采样设备的视频时,客户端查看本地没有对应的22号通道及其环形缓冲区,就向服务器端发送请求视频流的消息;当用户想再次在另一2号窗口上查看22号视频采样设备的视频时,此时客户端本地已经存在22号通道及其环形缓冲区,不再发送视频请求,只将新窗口号2加入到22号通道的窗口号数组;
C.服务器端接到请求视频消息后,转发所要求的视频数据给该客户端;具体实现步骤如下:
C1.当服务器端初次接到请求视频消息,本地没有客户端所要求的22号通道及其环形缓冲区,则为22号视频采样设备建立相应的22号通道并启动子线程T1,然后向NVR发送请求视频流的消息;当服务器端再次接到请求22号通道视频的消息时,此时已经存在相应的通道及其子线程T1,直接将客户端的socket加入到通道的端口号数组里,并将SocFlag标志置为-1;
C2.服务器的主线程接收到NVR发来的视频数据,将其挂接到环形缓冲区上,具体步骤如下:
C2.1当系统初次接收到视频数据,先将m_nHead和m_nTail都置为0,并将视频数据缓冲区挂接到m_nTail=0所指的数组单元上;当新加的数据帧为关键帧,将m_nTail的值赋给m_nFutureIDR,令m_nFutureIDR=0;
C2.2当m_nTail=60,m_nLastIDR=61时,系统再次接收到视频数据,将m_nTail加1,变61,此时m_nTail=m_nLastIDR,环形缓冲区已满,则令m_nLastIDR=-1,并清除m_nTail=61所指的视频数据缓冲区,将新接收的视频数据缓冲区挂接到m_nTail=61所指的数组单元上;
当m_nTail=70,m_nHead=71时,系统再次接收到视频数据,将m_nTail加1,变71,此时m_nTail=m_nHead,环形缓冲区已满,并且m_nFutureIDR不为-1,则将m_nHead置为m_nFutureIDR,并清除m_nTail=71所指的视频数据缓冲区,将新接收的视频数据缓冲区挂接到m_nTail=71所指的数组单元上;
当m_nTail=91,m_nHead=73,m_nLastIDR=50时,系统再次接收到视频数据,将m_nTail加1,变92,此时环形缓冲区未满,清除m_nTail=92所指的视频数据缓冲,将新接收的视频数据缓冲区挂接到m_nTail=92所指的数组单元上;此时新加的数据帧为关键帧,将m_nTail的值92赋给m_nFutureIDR;
C3.服务器上22号通道的子线程执行一个永真循环,从环形缓冲区上取视频数据缓冲区,发送给对应的客户端;具体实现步骤如下:
当m_nHead=-1时,将m_nHead的值-1赋给nCurP,此时环形缓冲区上没有可以发送的视频数据缓冲区,则子线程睡眠100秒之后,重新开始循环;
当m_nHead=17,m_nTail=17时,将m_nHead的值17赋给nCurP;此时nCurP=m_nTail,环形缓冲区上没有可以发送的视频数据缓冲区,则子线程睡眠100秒之后,重新开始循环;
当m_nHead=35,m_nTail=68,m_nFutureIDR=35时,将m_nHead的值35赋给nCurP;此时环形缓冲区上有可以发送的视频数据缓冲区,则子线程将nCurP所指的视频数据缓冲区发送给各个客户端;当该转发的视频数据为关键帧,则将nCurP的值35赋给m_nLastIDR;此时m_nHead=m_nFutureIDR,将m_nFutureIDR置为-1;
当m_nHead的值没有被主线程改变,仍为35时,将m_nHead加1,变为36,指向下一个要发送的视频数据缓冲区,然后回到循环起始点;否则直接回到循环起始点;
D.客户端的主线程接收到视频流后,由视频流通道对应的子线程T2播放到对应的窗口上,具体实现步骤如下:
D1.客户端的主线程接收到服务器端发来的视频流,将视频数据缓冲区挂接到22号通道对应的环形缓冲区上,具体步骤与C2类似;
D2.客户端22号通道上的子线程T2执行一个永真循环,从环形缓冲区里摘取视频数据缓冲区,在指定的窗口上解码并播放视频,具体实施步骤如下:
当m_nHead=25时,将m_nHead的值25赋给nCurP,指向要播放的视频数据缓冲区;
获取要播放22号通道视频的窗口号1,并在1号窗口中播放视频;
当正在播放的视频为关键帧,则按照C3的步骤更新m_nLastIDR、m_nFutureIDR及m_nHead的值。
最后需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

Claims (1)

1.一种基于环形缓冲的实时流媒体多路转发方法,其步骤包括:
A.在服务器端和客户端分别建立基于环形缓冲区的多线程并发的框架结构,具体实现步骤如下:
A1.服务器端为每个通道创建一个环形缓冲区和一个子线程,每个通道对应于一路视频采样设备;
A1.1所述的环形缓冲区由一个环形数组和若干个视频数据缓冲区组成,数组的每个节点指向从NVR接收到的视频数据缓冲区;
A1.2环形缓冲区包含但不限于以下成员:
-视频流头指针head,指向要转发的一个视频数据缓冲区,初值为-1;
-视频流尾指针tail,指向从视频采样设备上新获取的一个视频数据缓冲区,初值为-1;
-未来IDR帧指针FutureIDR,指向未来要转发的关键帧的视频数据缓冲区,初值为-1;
-已转发IDR帧指针LastIDR,指向已转发的关键帧的视频数据缓冲区,初值为-1;
-当前正在转发的数据帧nCurP,指向当前正在转发的视频数据缓冲区,初值为-1;
A1.3所述的视频数据缓冲区包含但不限于以下成员:
-通道号nID,视频采样设备的编号;
-关键帧标志nIDR,表示是否为关键帧,1为关键帧,0为非关键帧;
A1.4服务器端的主线程负责将从NVR收到的VDB放到通道号对应的环形缓冲区上;每个通道对应子线程负责从环形缓冲区摘取视频数据缓冲区,并将视频数据缓冲区发送给客户端;
A1.5每个通道有一个端口号数组,及对应的转发标志位SocFlag数组;端口号数组的每个单元里保存一个客户端的socket,转发标志位SocFlag数组的每个单元与端口号数组里的每个单元对应,表示该是否给该客户端转发视频;-1表示不转发,并删除客户端对应的socket;0表示转发;1表示暂停,用于轮巡;
A2.与服务器端类似,客户端为每个通道创建一个环形缓冲区和一个子线程;
A2.1环形缓冲区和视频数据缓冲区的结构与服务器端类似;
A2.2客户端的主线程负责将从服务器端收到的VDB放到通道号对应的环形缓冲区上;每个通道对应的子线程负责从环形缓冲区摘取视频数据缓冲区,并进行播放;
A2.3每个通道有一个窗口号数组,记录需要播放视频的窗口号nPort,用以支持在多个窗口播放同一路视频;
B.当客户端的用户要求查看某路视频采样设备的视频时,客户端向服务器端发请求视频的消息,具体步骤如下:
B1.当客户端的用户要求在某个窗口上查看某路视频采样设备的视频时,客户端查看本地是否有所要求的视频采样设备对应的通道及其环形缓冲区;
B2.如果没有,则向服务器端发送请求视频流的消息;如果有,则不发送视频请求,而是将新窗口号加入该通道的窗口号数组;
C.服务器端接到请求视频消息后,转发所要求的视频数据给该客户端;具体实现步骤如下:
C1.服务器端接到请求视频消息后,检查本地是否有客户端所要求的通道及其环形缓冲区,
-如果没有,则为该视频采样设备建立相应的通道并启动一个子线程;然后向NVR发送请求视频流的消息;
-如果有,将客户端的socket加入到该通道的端口号数组里,并将SocFlag标志置为-1;
C2.服务器的主线程接收到NVR发来的视频数据,将其挂接到环形缓冲区上,具体步骤如下:
C2.1如果系统初次接收到视频数据,则将head和tail都置为0,并将视频数据缓冲区挂接到tail所指的数组单元上;
C2.2否则,将tail加1,进行下述处理:
C2.2.1如果环形缓冲区不满,则清除tail所指的视频数据缓冲,并将新接收的视频数据缓冲区挂接到tail所指的数组单元上;
C2.2.2如果环形缓冲区满,则进行下述处理:
-如果tail等于LastIDR,则将LastIDR置为-1;
-如果tail等于head,并且FutureIDR不为-1,则将head置为FutureIDR;
-清除tail所指的视频数据缓冲,将新接收的视频数据缓冲区挂接到tail所指的数组单元上;
C2.3如果新加的数据帧为关键帧,将tail的值赋给FutureIDR;
C3.服务器上该通道的子线程执行一个永真循环,从环形缓冲区上取视频数据缓冲区,发送给对应的客户端;具体实现步骤如下:
C3.1子线程将head指针的值赋给nCurP;
C3.2如果nCurP为-1或者等于tail(表示环形缓冲区上没有可以发送的视频数据缓冲区),则子线程睡眠100秒之后,重新开始循环;
C3.3如果该通道有可发送的视频数据缓冲区,则子线程将nCurP所指的视频数据缓冲区发送给各个客户端,具体实施步骤如下:
C3.3.1如果某个客户端的转发标志位SocFlag值为-1,则不转发给该客户端,并断开与该客户端的网络连接;
C3.3.2如果SocFlag值为0,则转发给对应的客户端;
C3.4如果该转发的视频数据为关键帧,则将nCurP的值赋给LastIDR;如果nCurP与FutureIDR相等,则将FutureIDR置为-1;
C3.5如果head的值没有被主线程改变,则将head加1,指向下一个要发送的视频数据缓冲区,然后回到循环起始点;否则直接回到循环起始点;
D.客户端的主线程接收到视频流后,由视频流通道对应的子线程播放到对应的窗口上,具体实现步骤如下:
D1.客户端的主线程接收到服务器端发来的视频流,将视频数据缓冲区挂接到该通道对应的环形缓冲区上,具体步骤与C2类似;
D2.客户端各个通道上的子线程执行一个永真循环,从环形缓冲区里摘取视频数据缓冲区,在指定的窗口上解码并播放视频,具体实施步骤如下:
D2.1将nCurP赋值为head,指向要播放的视频数据缓冲区;
D2.2获取要播放该通道视频的窗口号nPort,并在各个窗口中播放视频;
D2.3如果当前正在播放的视频为关键帧,则按照C3.4和C3.5的步骤更新LastIDR、FutureIDR及head的值。
CN201611033866.8A 2016-11-15 2016-11-15 一种基于环形缓冲的实时流媒体多路转发方法 Expired - Fee Related CN106534889B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611033866.8A CN106534889B (zh) 2016-11-15 2016-11-15 一种基于环形缓冲的实时流媒体多路转发方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611033866.8A CN106534889B (zh) 2016-11-15 2016-11-15 一种基于环形缓冲的实时流媒体多路转发方法

Publications (2)

Publication Number Publication Date
CN106534889A CN106534889A (zh) 2017-03-22
CN106534889B true CN106534889B (zh) 2019-05-07

Family

ID=58356604

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611033866.8A Expired - Fee Related CN106534889B (zh) 2016-11-15 2016-11-15 一种基于环形缓冲的实时流媒体多路转发方法

Country Status (1)

Country Link
CN (1) CN106534889B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110798734A (zh) * 2018-08-02 2020-02-14 广州视源电子科技股份有限公司 视频帧的缓存和转发方法、装置和计算机设备
CN116069683A (zh) * 2021-11-04 2023-05-05 中兴通讯股份有限公司 媒体文件内存管理方法、装置、计算机设备和可读介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1512808A (zh) * 2002-12-27 2004-07-14 �ʼҷ����ֵ��ӹɷ����޹�˾ 具有智能天线的移动终端及其方法
CN103392314A (zh) * 2010-12-29 2013-11-13 思杰系统有限公司 用于可扩展的n核统计信息聚合的系统和方法
CN103997623A (zh) * 2014-05-06 2014-08-20 四川长虹电器股份有限公司 基于p2p技术的视频监控方法
CN104935958A (zh) * 2015-06-24 2015-09-23 青岛科技大学 一种实时视频传输装置及方法
CN105306959A (zh) * 2015-10-24 2016-02-03 广东医群科技有限公司 一种低延时网络自适应直播系统
CN106060076A (zh) * 2016-07-11 2016-10-26 北京工商大学 一种基于海康设备的实时流媒体多路转发方法及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2010108053A1 (en) * 2009-03-19 2010-09-23 Azuki Systems, Inc. Method for scalable live streaming delivery for mobile audiences

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1512808A (zh) * 2002-12-27 2004-07-14 �ʼҷ����ֵ��ӹɷ����޹�˾ 具有智能天线的移动终端及其方法
CN103392314A (zh) * 2010-12-29 2013-11-13 思杰系统有限公司 用于可扩展的n核统计信息聚合的系统和方法
CN103997623A (zh) * 2014-05-06 2014-08-20 四川长虹电器股份有限公司 基于p2p技术的视频监控方法
CN104935958A (zh) * 2015-06-24 2015-09-23 青岛科技大学 一种实时视频传输装置及方法
CN105306959A (zh) * 2015-10-24 2016-02-03 广东医群科技有限公司 一种低延时网络自适应直播系统
CN106060076A (zh) * 2016-07-11 2016-10-26 北京工商大学 一种基于海康设备的实时流媒体多路转发方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
《基于RTP的H.264视频流实时打包传输的研究》;李校林,刘利权,张杰;《计算机工程与科学》;20120531;第34卷(第5期);全文

Also Published As

Publication number Publication date
CN106534889A (zh) 2017-03-22

Similar Documents

Publication Publication Date Title
CN108848060B (zh) 一种多媒体文件处理方法、处理系统及计算机可读存储介质
JP3193947B2 (ja) データ送信システム及びデータ送信方法
CN110519177B (zh) 一种网络流量识别方法及相关设备
CN104093088B (zh) 实现自适应流媒体播放控制的系统及方法
CN106488265A (zh) 一种发送媒体流的方法和装置
CN101448072A (zh) 网络视频监控系统的视频查看方法及系统
CN109889373B (zh) 一种告警信息的传输方法、装置和系统
US20180192090A1 (en) Method of implementing audio and video live broadcast and server
CN110113662B (zh) 一种适应多种网络状况的视频监控客户端系统
CN102158690A (zh) 远程多路实时视频监控系统
CN104768026A (zh) 一种多信道音视频转码装置
WO2017084277A1 (zh) 在线媒体服务的码流自适应方法及系统
CN106534889B (zh) 一种基于环形缓冲的实时流媒体多路转发方法
CN102325275A (zh) 一种流媒体播放的丢包方法、装置及服务器
CN108924485A (zh) 客户端实时视频流中断处理方法及系统、监控系统
CN107801049A (zh) 一种实时视频传送、播放方法及装置
WO2015085873A1 (zh) 视频码流的获取方法及装置
CN108810468B (zh) 一种优化显示效果的视频传输装置及方法
CN103929682A (zh) 一种在视频直播系统中设置关键帧的方法及装置
CN110661992A (zh) 数据处理方法和装置
US20220158952A1 (en) Delivery of Multimedia Components According to User Activity
CN104780387B (zh) 一种视频传输方法及系统
CN105306970B (zh) 一种流媒体直播发送速度的控制方法及装置
CN109379553B (zh) 一种音视频数据的展示方法和系统
CN114025171A (zh) 一种视频处理方法、装置、终端设备和存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20190507

Termination date: 20191115

CF01 Termination of patent right due to non-payment of annual fee