CN102630007B - 一种处理tcp视频数据流的方法 - Google Patents
一种处理tcp视频数据流的方法 Download PDFInfo
- Publication number
- CN102630007B CN102630007B CN201210094893.1A CN201210094893A CN102630007B CN 102630007 B CN102630007 B CN 102630007B CN 201210094893 A CN201210094893 A CN 201210094893A CN 102630007 B CN102630007 B CN 102630007B
- Authority
- CN
- China
- Prior art keywords
- node
- data
- write
- read
- video
- 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
Links
Landscapes
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
本发明提供了一种处理TCP视频数据流的方法,该方法适用于流媒体视频服务器软件设计,支持MJEGP、MPEG4、H.264等主流视频编码方式。方法包括创建连续缓冲区和环形处理节点队列、视频数据接收处理和识别、数据读取和写入并行互斥。该方法一次性从网络驱动层中拷贝视频数据到连续缓冲中,通过处理节点索引连续缓冲中的视频帧,并提供数据读写互斥,增强视频处理的实时性和稳定性,提高了系统的运行效率。
Description
技术领域
本发明涉及数字视频监控领域,具体地说是一种处理TCP视频数据流的方法。
背景技术
进入第三代视频监控系统以后,数字视频监控的应用越来广泛,随着监控系统中监控点位的数量逐渐扩大,网络监控前端的类型也越来越多,由于视频编码流的传输协议并没有统一的规范,所以大部分的网络监控前端,对于上位机的视频数据请求,都使用TCP/IP协议直接传输编码后的视频帧序列,这些视频帧序列是由监控前端使用图像编码算法(如MJPEG、MPEG4和H.264等)将视频原始数据编码压缩后生成,对于每一个视频帧,遵循一定的编码格式,并提供相对应的起始码供上位机对视频帧进行识别和解码。
发明内容
本发明的目的是提供一种处理TCP视频数据流的方法,能够规避在视频数据流接收处理过程中的海量数据拷贝,同时提供读写并行访问机制,极大的提高对TCP视频数据流的处理效率。
本发明一种处理TCP视频数据流的方法是:创建一段连续缓冲区和一个环形的处理节点队列,连续缓冲区,用于存放TCP视频流数据,环形的处理节点队列,用于动态索引连续缓冲区中的视频帧,并实现读写访问互斥,数据接收模块在队列中获取可写入节点,根据收到数据的长度,更新其后若干个节点的有效性,通过节点写入地址将TCP视频数据流写入到连续缓冲区中,然后对写入数据进行识别,完成后更新该节点的互斥信息和下一个节点的索引信息,数据读取模块在队列中获取可读取节点,更新该节点的互斥信息后,通过该节点的索引完成对视频缓冲中视频数据的读取。
具体内容包括如下:
1)数据接收区设置:包括一段连续缓冲区和一个环形的处理节点队列,连续缓冲区为系统初始时申请的大容量连续内存空间,用于顺序存放从网络驱动层拷贝出来的TCP视频数据流。处理节点队列中每一个节点包括以下属性:节点序号、读写状态、数据指针、写入偏移、帧类型和帧长度。其中数据指针指向连续缓冲区中的某一视频帧起始位置,写入偏移的基址为该起始位置。连续缓冲区的大小必须大于队列节点数量*码率/帧率。
2)数据接收:从处理节点队列中获取可写入节点,默认从序号为0的节点开始。如果节点状态为“读取中”,则将该节点状态修改为“已跨越”,尝试下一个节点直至成功。将节点状态置为“写入中”,根据接收到的TCP视频数据长度,覆盖上一轮的时间最早的处理节点,将TCP视频流数据拷贝到节点数据指针指向地址,对拷贝的数据进行识别。
3)数据识别:以识别码为基准字对刚写入的数据执行查询,识别码长度为N,则查询起始地址应为写入偏移-N-1。查询成功后,设置本节点的读写状态为“已准备”,写入偏移清零,更新帧类型和帧长度,如果识别出来的帧是基准帧,记录该节点为最前基准节点。获取下一个节点,将其数据指针值为查询成功的识别码起始处,从该处向后偏移N个字节开始再次执行数据识别。
4)数据读取:从处理节点队列中获取可读取节点,默认从序号为0的节点开始。如果节点读写状态为“写入中”,则读取模块挂起一段时间后重新尝试。设置该节点的读写状态为“读取中”。从该节点的数据指针指向的位置开始读取数据,读取长度为帧长度。读取完成后,判断读写状态,如果为“被跨越”,将本节点状态设置为“已准备”,获取最前基准节点作为下一个节点;否则,将该节点状态设置为“已准备”,根据序列号获取下一个节点。
本发明一种处理TCP视频数据流的方法的优点是:
1) TCP是一种面向连接的、基于字节流的通讯协议,将字节流的接收和识别串行处理,有效减少了数据的拷贝次数。
2) 使用动态的处理节点队列,可根据实际运行环境,调整队列中的节点数量,在内存中缓存数秒到数十秒的视频流,以实现特定的应用,比如:报警提前录像。
3) 使用连续缓冲区和环形的处理节点队列,相比申请固定大小的环形缓冲节点队列,大大减少了对内存大小的要求。
4) 使用标志位方式实现了多个数据读取模块与数据接收处理模块的异步访问,相比使用操作系统的互斥资源实现异步读写,大大提升了处理的效率。
5) 对基准帧进行了标示,对于新加入的读取模块,读取到的第一帧为基准帧,不需要再做容错处理。
附图说明
图1是数据接收区示意图;
图2是视频数据接收处理的流程图;
图3是视频数据读取的流程图。
具体实施方式
以下结合图对本发明进行进一步的详细说明。
根据图1-图3所示本发明一种处理TCP视频数据流的方法,其步骤如下:
1数据接收区设置如图1所示,初始化详细步骤如下:
第1步:初始化节点队列。使用共享内存方式创建处理节点队列,队列中节点数量a取决于取决于缓存时长b和视频流帧率c,计算方法为a= 。节点i记为Ni,每一个节点包括以下属性:节点序号(记为Ii)、读写状态(记为Si)、数据指针(记为Ai)、写入偏移(记为Wi)、帧类型(记为Fi)和帧长度(记为Li)。Ii从0顺序下排,将所有节点的读写状态Si设置为“无数据”,数据指针Ai、写入偏移Wi、帧类型Ti和帧长度Li置零。
第2步:初始化连续缓冲。使用共享内存方式申请一段内存空间作为连续缓冲区,连续缓冲区的大小d取决于队列节点数量a、视频流码率e和帧率c,建议取值:d=。将节点N0的数据指针A0置为连续缓冲区起始地址。
第3步:初始化全局变量。设置全局变量最前基准帧f,存放最靠前的基准帧所在的节点序号,初始值置零。设置全局变量可写入节点序号g,初始值置零。
2视频数据接收如图2所示,详细步骤如下:
第1步:获取写入节点Ni。根据全局变量可写入节点序号g,取节点Ni为Ng。判断节点状态Si,如果为“写入中”,直接进入第3步;如果为“已准备”,置节点状态Si为“写入中”,进入第2步;如果为其他值,则修改Si为“被跨越”,顺序判断下一个节点Ni+1直到其节点状态S为“已准备”(当 i=a-1时,设置i=0使节点队列形成环路),进入第2步。
第2步:设置节点写入地址Ai。根据最大数据帧长度LMAX,判断节点Ni+1至Na,找到节点Ni+n,使其数据指针地址Ai+n>Ai+Wi+LMAX。若节点N i+1至Ni+n不存在节点Nk,其Sk为“读取中”,Ai值保持不变。否则,顺序查找下一个节点,直到数据指针地址Ai+n>Ak+Lk+LMAX,取Ai为Ak+Lk。将Si+1至Si+n-1设置为“无效”,Wi+1至Wi+n-1置零。
第3步:TCP数据接收。从网络驱动层数据拷贝TCP视频数据流到节点Ni标识的写入位置Ai+Wi。
3 数据识别,详细步骤如下:
视频流识别码长度为Lk,以识别码为关键字对Ai+Wi-Lk+1执行查询,查询长度为LR+Lk-1。查询成功:查找到的识别码偏移量为Wf,设置Si为“已准备”,Wi置零,更新帧类型Fi和帧长度Li。如果i=a-1,设置全局变量可写入节点序号g=0,否则设置g=i+1。如果Fi为基准帧,设置全局最前基准节点f=i。重复第4步,获取写入节点Ni,置写入位置Ai+1=Ai+Wf+Lk,从地址Ai+1+Lk处再次执行数据识别。查询失败:置Wi = Wi +LR。
4视频数据读取如图3所示,详细步骤如下:
第1步:获取读取节点Ni。如果读取模块为新加入,其读取节点为全局变量最前基准帧节点Nf.,否则从上一次读取的Ni-1顺序获取到Ni。如果Si取值为“写入中”,说明读取模块访问速度过于频繁,已经超过了数据接收模块,需挂起一段时间后重新尝试判断Si直至Si值为“读取中”或者“已准备”。
第2步:读取视频数据流。执行第1步获取读取节点Ni,读取从Ai起Li长度的数据作为一个完整的视频帧进行处理。处理完成后,判断Si取值,如果为“被跨越”或者“无效”,说明读取模块处理过慢,已被写入模块超越,下一个读取节点取Nf,保证读取模块能够读取到正确的视频帧。
本发明可针对服务器、工作站或者嵌入式设备等硬件平台实施,支持的操作系统包括Windows和Linux系列,建议实现编程语言为C或者C++,支持TCP和TCP以上所有网络协议的视频数据流传输。数据读取模块可为存储、解码或转发模块。主要应用于视频服务器上的软件开发。
以上所述,仅为本发明的较佳实施例,并非用于限定本发明的保护范围,本发明应根据所附的权利要求进行解释。
Claims (1)
1.一种处理TCP视频数据流的方法,其特征在于:其步骤如下:
创建1)数据接收区设置;2)数据接收;3)数据识别;4)数据读取;
所述的数据接收区设置包括:申请一段连续缓冲区和一个环形的处理节点队列,连续缓冲区为系统初始时申请的大容量连续内存空间,用于顺序存放从网络驱动层拷贝出来的TCP视频数据流;处理节点队列中每一个节点包括以下属性:节点序号、读写状态、数据指针、写入偏移、帧类型和帧长度;其中数据指针指向连续缓冲区中的某一视频帧起始位置,写入偏移的基址为该起始位置,连续缓冲区的大小必须大于队列节点数量*码率/帧率;
所述的数据接收包括:从处理节点队列中获取可写入节点,默认从序号为0的节点开始;如果节点状态为“读取中”,则将该节点状态修改为“已跨越”,尝试下一个节点直至成功,将节点状态置为“写入中”,根据接收到的TCP视频数据长度,覆盖上一轮的时间最早的处理节点,将TCP视频流数据拷贝到节点数据指针指向地址,对拷贝的数据进行识别;
所述的数据识别包括:以识别码为基准字对刚写入的数据执行查询,识别码长度为N,则查询起始地址应为写入偏移-N-1;查询成功后,设置本节点的读写状态为“已准备”,写入偏移清零,更新帧类型和帧长度,如果识别出来的帧是基准帧,记录该节点为最前基准节点,获取下一个节点,将其数据指针值为查询成功的识别码起始处,从该处向后偏移N个字节开始再次执行数据识别;
所述的数据读取包括:从处理节点队列中获取可读取节点,默认从序号为0的节点开始,如果节点读写状态为“写入中”,则读取模块挂起一段时间后重新尝试,设置该节点的读写状态为“读取中”,从该节点的数据指针指向的位置开始读取数据,读取长度为帧长度,读取完成后,判断读写状态,如果为“被跨越”,将本节点状态设置为“已准备”,获取最前基准节点作为下一个节点;否则,将该节点状态设置为“已准备”,根据序列号获取下个节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210094893.1A CN102630007B (zh) | 2012-03-31 | 2012-03-31 | 一种处理tcp视频数据流的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210094893.1A CN102630007B (zh) | 2012-03-31 | 2012-03-31 | 一种处理tcp视频数据流的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102630007A CN102630007A (zh) | 2012-08-08 |
CN102630007B true CN102630007B (zh) | 2015-07-22 |
Family
ID=46588153
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210094893.1A Expired - Fee Related CN102630007B (zh) | 2012-03-31 | 2012-03-31 | 一种处理tcp视频数据流的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102630007B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103581611A (zh) * | 2013-11-19 | 2014-02-12 | 北京兆维电子(集团)有限责任公司 | 基于路由服务器音视频录制的实现方法及路由服务器 |
CN103716588A (zh) * | 2013-12-25 | 2014-04-09 | 惠州市伟乐科技有限公司 | 一种基于视频监控的多画面轮巡的方法 |
CN104795081A (zh) * | 2015-04-23 | 2015-07-22 | 天脉聚源(北京)教育科技有限公司 | 一种读写pcm缓存中pcm数据的方法及装置 |
CN105245912B (zh) * | 2015-10-21 | 2019-05-31 | 东方网力科技股份有限公司 | 一种缓存视频数据及读取视频数据的方法及装置 |
CN106658171A (zh) * | 2016-12-22 | 2017-05-10 | 北京元心科技有限公司 | 视频解码数据传输方法及装置 |
CN111061434B (zh) * | 2019-12-17 | 2021-10-01 | 人和未来生物科技(长沙)有限公司 | 基因压缩多流数据并行写入及读取方法、系统及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101202920A (zh) * | 2007-12-19 | 2008-06-18 | 北京创毅视讯科技有限公司 | 一种广播系统中的数据发送、传输方法、发射系统和终端 |
CN101521813A (zh) * | 2009-04-17 | 2009-09-02 | 杭州华三通信技术有限公司 | 一种处理媒体流的方法和装置 |
CN101783941A (zh) * | 2009-09-15 | 2010-07-21 | 上海海事大学 | 一种基于ip网络的实时视频传输方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7720065B2 (en) * | 2008-02-29 | 2010-05-18 | Lockheed Martin Corporation | Method and apparatus for biasing of network node packet prioritization based on packet content |
-
2012
- 2012-03-31 CN CN201210094893.1A patent/CN102630007B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101202920A (zh) * | 2007-12-19 | 2008-06-18 | 北京创毅视讯科技有限公司 | 一种广播系统中的数据发送、传输方法、发射系统和终端 |
CN101521813A (zh) * | 2009-04-17 | 2009-09-02 | 杭州华三通信技术有限公司 | 一种处理媒体流的方法和装置 |
CN101783941A (zh) * | 2009-09-15 | 2010-07-21 | 上海海事大学 | 一种基于ip网络的实时视频传输方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102630007A (zh) | 2012-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102630007B (zh) | 一种处理tcp视频数据流的方法 | |
EP3093849B1 (en) | Devices and methods for video storage | |
JP2002541698A (ja) | バッファ・リードおよびライト同期機能を備えたストリーミング情報機器 | |
CN102741830A (zh) | 用于多媒体流的客户机侧远程呈现的系统和方法 | |
CN107484011B (zh) | 一种视频资源解码方法及装置 | |
WO2012162995A1 (zh) | 传输流媒体的方法及设备 | |
CN103152606A (zh) | 视频文件处理方法及装置、系统 | |
CN105245939A (zh) | 基于http代理的移动流媒体离线缓存系统及方法 | |
KR101668930B1 (ko) | 비디오 분석 인코딩 | |
CN107801044B (zh) | 后向适应装置与相关方法 | |
CN105488108A (zh) | 一种多个视频文件高速并行存储的方法及装置 | |
CN103947193A (zh) | 摄像装置、影像记录装置、影像显示装置、影像监视装置、影像监视系统以及影像监视方法 | |
CN103577119A (zh) | 用于下一代固态硬盘控制器中乱序传输数据的系统和方法 | |
EP2947629A1 (en) | Method for object-based coding of video information | |
CN110049133B (zh) | 一种dns区文件全量下发的方法和装置 | |
KR102375144B1 (ko) | 블록체인을 이용하여 개인키를 관리하는 장치, 방법, 시스템 및 컴퓨터 판독가능 저장 매체 | |
JP2012151622A (ja) | 受信端末、パケットデータ受信方法、送信端末、送受信システム、中継端末およびパケットデータの中継方法 | |
WO2015030717A1 (en) | Consolidating operations associated with a plurality of host devices | |
WO2019047059A1 (zh) | 无线数据传输方法和设备 | |
CN109491620B (zh) | 存储数据重写方法、装置、服务器及存储介质 | |
TWI552573B (zh) | 具有初始化片段之視訊及音訊之寫碼 | |
CN105487811A (zh) | 一种基于缓冲对齐的文件读写方法及系统 | |
CN110096624A (zh) | 一种编解码方法、装置、计算机设备及存储介质 | |
CN109035122A (zh) | 水印图像的处理方法 | |
CN103747253A (zh) | 一种基于fifo的视频编码数据传输方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150722 Termination date: 20160331 |