CN110121114B - 发送流数据的方法及数据发送设备 - Google Patents

发送流数据的方法及数据发送设备 Download PDF

Info

Publication number
CN110121114B
CN110121114B CN201810132429.4A CN201810132429A CN110121114B CN 110121114 B CN110121114 B CN 110121114B CN 201810132429 A CN201810132429 A CN 201810132429A CN 110121114 B CN110121114 B CN 110121114B
Authority
CN
China
Prior art keywords
data
queue
frame
threshold
data block
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.)
Active
Application number
CN201810132429.4A
Other languages
English (en)
Other versions
CN110121114A (zh
Inventor
拉胡尔·阿尔温德·贾达夫
曹振
K·安莫尔·曼尼·特杰斯瓦·萨尔玛
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201810132429.4A priority Critical patent/CN110121114B/zh
Priority to PCT/CN2019/073922 priority patent/WO2019154221A1/zh
Publication of CN110121114A publication Critical patent/CN110121114A/zh
Application granted granted Critical
Publication of CN110121114B publication Critical patent/CN110121114B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/568Storing data temporarily at an intermediate stage, e.g. caching
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/568Storing data temporarily at an intermediate stage, e.g. caching
    • H04L67/5682Policies or rules for updating, deleting or replacing the stored data
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • 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/231Content storage operation, e.g. caching movies for short term storage, replicating data over plural servers, prioritizing data for deletion
    • 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/24Monitoring of processes or resources, e.g. monitoring of server load, available bandwidth, upstream requests
    • 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/24Monitoring of processes or resources, e.g. monitoring of server load, available bandwidth, upstream requests
    • H04N21/2401Monitoring of the client 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/433Content storage operation, e.g. storage operation in response to a pause request, caching operations
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computer Security & Cryptography (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

本申请实施例提供了一种发送流数据的方法及数据发送设备,应用于传输控制协议TCP连接的数据发送端,数据发送端的操作系统中运行有应用,包括:将应用下发的数据块存入第一队列,数据块为流数据,第一队列为数据发送端的操作系统的用户态中的队列,第一队列用于放置待发送的流数据的数据块;在第二队列中的数据量满足预设条件的情况下,将第一队列中的至少一个数据块加入第二队列,第二队列为数据发送端的操作系统的内核态中,TCP协议对应的发送缓存队列;数据发送端通过第二队列,向TCP连接的数据接收端发送数据。实施本申请,能够有效减少内核态中流数据的堆积,减少流数据的传输时延,提高了使用TCP协议传输流数据的实时性。

Description

发送流数据的方法及数据发送设备
技术领域
本申请实施例涉及通信技术领域,尤其涉及一种发送流数据的方法及数据发送设备。
背景技术
流式传输分为顺序流式(Progressive Streaming)传输和实时流式(RealtimeStreaming)传输两种传输方式,流式传输所传输的数据可以称为流数据(data stream),广泛适用于例如音视频、网络监控、网络游戏、金融服务等场景。顺序流式传输是顺序下载,例如在下载一音视频文件的同时,用户可以观看该音视频已经下载完成的部分。实时流式传输总是实时传输,例如实时现场直播,这种情况下,往往音视频需要被实时的观看到。因此实时流式传输不能被延迟或过度缓冲,需要应用程序立即处理接收到的数据并呈现给用户。实时流式传输的使用场景包括:网络视频直播、远程桌面共享、视频监控以及视频电话等等。使用实时流式传输来传输音视频文件,用户可以边下载文件边播放,无需下载完整的音视频文件即可观看或者收听,可以节约数分钟甚至数小时的下载时间,对系统缓存容量的需求也会降低。另一方面,通信领域常用的传输控制协议(Transmission ControlProtocol,TCP)也可以用于传输流数据。使用TCP协议的情况下,发送流数据的应用程序(具体可以指实时流媒体应用)将流数据的数据块下发到内核态缓存后,该数据块就位于内核态缓存中,直到发送端确认接收端成功接收该数据块后,该数据块才被从发送端的内核态缓存中删除。这样的处理方式有较长的排队时延(指报文发送前在内核态的发送队列中排队的时间),也拉长了流数据传输的整体的时延,而流数据显然是一种对传输的实时性要求高,对传输时延容忍度小的应用程序使得用TCP协议传输无法满足流数据。例如,在一个移动网络场景下:带宽为10Mbps,待传输的视频流的数据块为4MB,由于4MB等于32Mb,因此,内核态缓存中的视频流的数据块的排队时延可能需要3.2s,这显然对保障流数据传输的实时性影响巨大。所以现有的TCP协议传输方式的传输流数据,不能满足流数据的传输时延的要求。
发明内容
本申请实施例提供了一种发送流数据的方法及数据发送设备,能够有效减少内核态中流数据的堆积,减少流数据的传输时延,提高了使用TCP协议传输流数据的实时性。
第一方面,本申请实施例提供了一种发送流数据的方法,所述方法应用于传输控制协议TCP连接的数据发送端,所述数据发送端的操作系统中运行有应用,所述方法包括:将所述应用下发的数据块存入第一队列,所述数据块为流数据,所述第一队列为所述数据发送端的操作系统的用户态中的队列,所述第一队列用于放置待发送的流数据的数据块;在第二队列中的数据量满足预设条件的情况下,将所述第一队列中的至少一个数据块加入所述第二队列,所述第二队列为所述数据发送端的操作系统的内核态中,TCP协议对应的发送缓存队列;所述数据发送端通过所述第二队列,向所述TCP连接的数据接收端发送数据。实施本申请实施例,通过将应用下发的数据块存入第一队列,然后在第二队列中的数据量满足预设条件的情况下,将第一队列中的至少一个数据块加入第二队列,可以有效减少第二队列中数据块的堆积,从而有效减少了流数据的传输时延,提高了使用TCP协议传输流数据的实时性,提高了流数据传输的效率。
在一个可选的实现方式中,所述预设条件为:所述第二队列中的数据量不超过第二阈值,或者,所述第二队列中的数据量的占用比不超过第三阈值。
在一个可选的实现方式中,所述方法还包括:在所述第二队列中的数据量超过所述第二阈值的情况下,或者,在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,丢弃所述第一队列内优先级较低的数据块。实施本申请实施例,在网络质量不好或网络质量变化剧烈的情况下,第二队列中的数据块可能无法及时发送出去,导致第二队列中的数据量过多,这时会加大数据块在内核态中的排队时延,利用本申请实施例所提供的方法,可以优先将优先级较高的数据块加入第二队列中,丢弃优先级较低的数据块,从而最大限度的满足了流数据的传输时延的要求,减少了流数据的传输时延。
在一个可选的实现方式中,在所述第二队列中的数据量超过所述第二阈值的情况下,或者,在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,所述方法还包括:降低将数据块从所述第一队列加入所述第二队列的速率。实施本申请实施例,在将数据块从第一队列加入第二队列的速率可变的情况下,通过降低将数据块从第一队列加入第二队列的速率,可以有效避免了第二队列中的数据块过多而无法存入导致应用卡顿的现象。
在一个可选的实现方式中,在所述第二队列中的数据量超过所述第二阈值的情况下,所述方法还包括:暂停将所述第一队列中的至少一个数据块加入所述第二队列,直到所述第二队列中的数据量不超过所述第二阈值,继续执行所述将所述第一队列中的至少一个数据块加入所述第二队列。
在一个可选的实现方式中,在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,所述方法还包括:暂停将所述第一队列中的至少一个数据块加入所述第二队列,直到所述第二队列中的数据量的占用比不超过所述第三阈值,继续执行所述将所述第一队列中的至少一个数据块加入所述第二队列。实施本申请实施例,在将数据块从第一队列加入第二队列的速率不变的情况下,通过暂停将第一队列中的数据块加入第二队列,可以有效避免第二队列中的数据块过多,而增加该数据块的传输时延。
在一个可选的实现方式中,所述方法还包括:在所述第一队列中的数据量超过第一阈值的情况下,丢弃所述第一队列内优先级较低的数据块。
在一个可选的实现方式中,所述应用下发的数据块为视频流的数据块,所述视频流的数据块包括双向预测编码B帧,帧间预测编码P帧以及帧内编码I帧;其中,在所述视频流的数据块中,被其他帧引用的次数越多的帧的优先级越高;和/或,在所述视频流的数据块中包括连续多帧未被其他帧引用,则所述连续多帧中的第一帧的优先级最低。实施本申请实施例,通过确定视频流的数据块中各个帧的优先级高低,从而在网络质量不好时,利用上述优先级机制,可以优先的把优先级较高的帧发送出去,丢弃那些优先级较低的帧,保证将重要的帧发送出去,最大限度的保障了通信质量,且不会对视频的播放造成影响,最大限度的提高了用户体验。
在一个可选的实现方式中,在所述B帧、所述P帧和所述I帧被其他帧引用的次数相同的情况下,或者,在所述B帧、所述P帧和所述I帧分别为一组连续多帧中的第一帧的情况下,所述B帧的优先级低于所述P帧的优先级,所述P帧的优先级低于所述I帧的优先级。
在一个可选的实现方式中,所述应用为流媒体应用,所述应用下发的数据块为视频流的数据块;所述第一阈值为由视频比特率、所述TCP连接的速率、所述第一队列中的数据量以及第一调节参数确定的阈值,所述第一调节参数为所述TCP连接能够缓存的视频流的数据块的时长;所述第二阈值为由所述视频比特率以及第二调节参数确定的阈值,所述第二调节参数为延迟参数,所述延迟参数用于表征所述流媒体应用可容忍的延迟程度。实施本申请实施例,通过视频比特率、TCP连接的速率、第一队列中的数据量以及第一调节参数来设置第一阈值,从而避免由于第一阈值设置为固定值,而导致无法有效利用第一队列的情况;以及通过视频比特率以及第二调节参数来设置第二阈值,动态地调整第二队列的数据量的占用阈值,从而可以综合判断第二队列的数据量的占用情况,提高第二队列的空间利用率。
在一个可选的实现方式中,所述将所述应用下发的数据块存入第一队列包括:通过调用目标应用程序编程接口API将所述应用下发的数据块存入所述第一队列。
在一个可选的实现方式中,所述将所述应用下发的数据块存入第一队列包括:通过所述应用的代理将所述应用下发的数据块存入所述第一队列,所述代理为运行在所述操作系统的用户态的一个进程。
第二方面,本申请实施例还提供了一种数据发送设备,所述数据发送设备为应用传输控制协议TCP的设备,所述数据发送设备的操作系统中运行有应用,所述数据发送设备包括:存入单元,用于将所述应用下发的数据块存入第一队列,所述数据块为流数据,所述第一队列为所述数据发送设备的操作系统的用户态中的队列,所述第一队列用于放置待发送的流数据的数据块;加入单元,用于在所述第二队列中的数据量满足预设条件的情况下,将所述第一队列中的至少一个数据块加入所述第二队列,所述第二队列为所述数据发送设备的操作系统的内核态中,TCP协议对应的发送缓存队列;发送单元,用于通过所述第二队列,向所述TCP连接的数据接收设备发送数据。
在一个可选的实现方式中,所述预设条件为:所述第二队列中的数据量不超过第二阈值,或者,所述第二队列中的数据量的占用比不超过第三阈值。
在一个可选的实现方式中,所述数据发送设备还包括:丢弃单元,用于在所述第二队列中的数据量超过所述第二阈值的情况下,或者,在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,丢弃所述第一队列内优先级较低的数据块。
在一个可选的实现方式中,所述数据发送设备还包括:降低速率单元,用于在所述第二队列中的数据量超过所述第二阈值的情况下,或者,在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,降低将数据块从所述第一队列加入所述第二队列的速率。
在一个可选的实现方式中,所述数据发送设备还包括:暂停单元,用于在所述第二队列中的数据量超过所述第二阈值的情况下暂停将所述第一队列中的至少一个数据块加入所述第二队列;所述加入单元,还用于在所述第二队列中的数据量不超过所述第二阈值的情况下,继续执行所述将所述第一队列中的至少一个数据块加入所述第二队列。
在一个可选的实现方式中,所述数据发送设备还包括:暂停单元,用于在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,暂停将所述第一队列中的至少一个数据块加入所述第二队列;所述加入单元,还用于在所述第二队列中的数据量的占用比不超过所述第三阈值的情况下,继续执行所述将所述第一队列中的至少一个数据块加入所述第二队列。
在一个可选的实现方式中,所述丢弃单元,还用于在所述第一队列中的数据量超过第一阈值的情况下,丢弃所述第一队列内优先级较低的数据块。
在一个可选的实现方式中,所述应用下发的数据块为视频流的数据块,所述视频流的数据块包括双向预测编码B帧,帧间预测编码P帧以及帧内编码I帧;其中,在所述视频流的数据块中,被其他帧引用的次数越多的帧的优先级越高;和/或,在所述视频流的数据块中包含连续多帧未被其他帧引用,则所述连续多帧中的第一帧的优先级最低。
在一个可选的实现方式中,在所述B帧、所述P帧和所述I帧被其他帧引用的次数相同的情况下,或者,在所述B帧、所述P帧和所述I帧分别为一组连续多帧中的第一帧的情况下,所述B帧的优先级低于所述P帧的优先级,所述P帧的优先级低于所述I帧的优先级。
在一个可选的实现方式中,所述应用为流媒体应用,所述应用下发的数据块为视频流的数据块;所述第一阈值为由视频比特率、所述TCP连接的速率、所述第一队列中的数据量以及第一调节参数确定的阈值,所述第一调节参数为所述TCP连接能够缓存的视频流的数据块的时长;所述第二阈值为由所述视频比特率以及第二调节参数确定的阈值,所述第二调节参数为延迟参数,所述延迟参数用于表征所述流媒体应用可容忍的延迟程度。
在一个可选的实现方式中,所述存入单元,具体用于通过调用目标应用程序编程接口API将所述应用下发的数据块存入所述第一队列。
在一个可选的实现方式中,所述存入单元,具体用于通过所述应用的代理将所述应用下发的数据块存入所述第一队列,所述代理为运行在所述操作系统的用户态的一个进程。
第三方面,本申请实施例还提供了一种数据发送设备,所述数据发送设备为应用传输控制协议TCP的设备,所述数据发送设备的操作系统中运行有应用,所述数据发送设备包括:处理电路、存储介质和收发器;其中,所述处理电路、所述存储介质和所述收发器通过线路互联,所述存储介质中存储有程序指令;所述程序指令被所述处理电路执行时,使所述处理电路执行以下操作:将所述应用下发的数据块存入第一队列,所述数据块为流数据,所述第一队列为所述数据发送端的操作系统的用户态中的队列,所述第一队列用于放置待发送的流数据的数据块;在第二队列中的数据量满足预设条件的情况下,将所述第一队列中的至少一个数据块加入所述第二队列,所述第二队列为所述数据发送端的操作系统的内核态中,TCP协议对应的发送缓存队列;所述收发器,用于通过所述第二队列,向所述TCP连接的数据接收设备发送数据。
在一个可选的实现方式中,所述预设条件为:所述第二队列中的数据量不超过第二阈值,或者,所述第二队列中的数据量的占用比不超过第三阈值。
在一个可选的实现方式中,所述处理电路,还用于在所述第二队列中的数据量超过所述第二阈值的情况下,或者,在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,丢弃所述第一队列内优先级较低的数据块。
在一个可选的实现方式中,所述处理电路,还用于在所述第二队列中的数据量超过所述第二阈值的情况下,或者,在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,降低将数据块从所述第一队列加入所述第二队列的速率。
在一个可选的实现方式中,所述处理电路,还用于在所述第二队列中的数据量超过所述第二阈值的情况下,暂停将所述第一队列中的至少一个数据块加入所述第二队列,直到所述第二队列中的数据量不超过所述第二阈值,继续执行所述将所述第一队列中的至少一个数据块加入所述第二队列。
在一个可选的实现方式中,所述处理电路,还用于在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,暂停将所述第一队列中的至少一个数据块加入所述第二队列,直到所述第二队列中的数据量的占用比不超过所述第三阈值,继续执行所述将所述第一队列中的至少一个数据块加入所述第二队列。
在一个可选的实现方式中,所述处理电路,还用于在所述第一队列中的数据量超过第一阈值的情况下,丢弃所述第一队列内优先级较低的数据块。
在一个可选的实现方式中,所述应用下发的数据块为视频流的数据块,所述视频流的数据块包括双向预测编码B帧,帧间预测编码P帧以及帧内编码I帧;其中,在所述视频流的数据块中,被其他帧引用的次数越多的帧的优先级越高;和/或,在所述视频流的数据块中包括连续多帧未被其他帧引用,则所述连续多帧中的第一帧的优先级最低。
在一个可选的实现方式中,在所述B帧、所述P帧和所述I帧被其他帧引用的次数相同的情况下,或者,在所述B帧、所述P帧和所述I帧分别为一组连续多帧中的第一帧的情况下,所述B帧的优先级低于所述P帧的优先级,所述P帧的优先级低于所述I帧的优先级。
在一个可选的实现方式中,所述应用为流媒体应用,所述应用下发的数据块为视频流的数据块;所述第一阈值为由视频比特率、所述TCP连接的速率、所述第一队列中的数据量以及第一调节参数确定的阈值,所述第一调节参数为所述TCP连接能够缓存的视频流的数据块的时长;所述第二阈值为由所述视频比特率以及第二调节参数确定的阈值,所述第二调节参数为延迟参数,所述延迟参数用于表征所述流媒体应用可容忍的延迟程度。
在一个可选的实现方式中,所述处理电路,具体用于通过调用目标应用程序编程接口API将所述应用下发的数据块存入所述第一队列。
在一个可选的实现方式中,所述处理电路,具体用于通过所述应用的代理将所述应用下发的数据块存入所述第一队列,所述代理为运行在所述操作系统的用户态的一个进程。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被数据发送设备的处理电路执行时,使所述数据发送设备的处理电路执行上述第一方面或者第一方面的任意一种可能实现方式所描述的方法。
第五方面,本申请实施例还提供了一种计算机程序产品,当所述计算机程序产品在数据发送设备上运行时,使第一方面或第一方面的任意一种可能的实现方式得以实现。
附图说明
为了更清楚地说明本申请实施例或背景技术中的技术方案,下面将对本申请实施例或背景技术中所需要使用的附图进行说明。
图1A是本申请实施例提供的一种远程桌面共享的场景示意图;
图1B是本申请实施例提供的一种视频监控的场景示意图;
图2A是本申请实施例提供的视频编解码示意图;
图2B是本申请实施例提供的一种系统架构示意图;
图3是本申请实施例提供的一种发送流数据的方法的流程示意图;
图4是本申请实施例提供的一种数据优化架构的示意图;
图5A是本申请实施例提供的一种数据优化架构的部署方式;
图5B是本申请实施例提供的另一种数据优化架构的部署方式;
图6是本申请实施例提的另一种发送流数据的方法的流程示意图;
图7是本申请实施例提供的又一种发送流数据的方法的流程示意图;
图8A是本申请实施例提供的实时视频采集设备处理流数据的过程示意图;
图8B是本申请实施例提供的一种发送流数据的方法的具体场景示意图;
图8C是本申请实施例提供的远程控制设备处理流数据的过程示意图;
图9A是本申请实施例提供的一种数据发送设备的结构示意图;
图9B是本申请实施例提供的另一种数据发送设备的结构示意图;
图10是本申请实施例提供的又一种数据发送设备的结构示意图;
图11是本申请实施例提供的一种终端设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图对本申请实施例中技术方案进行描述。
以下将具体介绍本申请实施例中用到的技术术语。
内核态:运行在内核地址空间的进程,也可以称运行在内核地址空间的进程为处于内核态;本申请实施例中,称处于操作系统的内核态中,与TCP协议对应的发送缓存队列为第二队列。应理解,一种实现方式下,一个TCP连接对应一个发送缓存队列。
用户态:运行在用户地址空间的进程,也可以称运行在用户地址空间的进程为处于用户态;本申请实施例中,称操作系统的用户态中的队列为第一队列。
数据块:一组或几组按顺序连续排列在一起的记录;本申请实施例中,数据块为流数据的数据块,其中,流式传输所传输的数据称为流数据(data stream),因此不应将本申请中的数据块理解为具有限定意义。
I(Instantaneous Decode Refresh)帧:I帧又称帧内编码帧,是一种自带全部信息的独立帧,无需参考其他帧便可独立进行解码,可以简单理解为一张静态画面。视频序列中的第一个帧始终都是I帧,或者,也可以称I帧为关键帧。
P(Predicted)帧:P帧又称帧间预测编码帧,需要参考前面的I帧才能进行编码。表示的是当前帧画面与前一帧(前一帧可能是I帧也可能是P帧)画面的差别。解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。与I帧相比,P帧通常占用更少的数据位,但不足是,由于P帧对前面的P参考帧和I参考帧有着复杂的依耐性,因此对传输错误非常敏感。
B(Bidirectional Predicted)帧:B帧又称双向预测编码帧,B帧记录的是本帧与前后帧的差别。也就是说要解码B帧,不仅要解码之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是对解码性能要求较高。
视频比特率:视频比特率是视频流正常播放所需的网络比特率。视频比特率可以是恒定比特率(constant bit rate,CBR)或动态比特率(variable bit rate)等。在使用CBR的情况下,视频在一段时间内的平均比特率保持不变;在使用VBR的情况下,比特率可以随时间变化。在压缩时根据视频流数据确定使用什么视频比特率,这是以质量为前提兼顾文件大小的方式。
在具体实现中,流式传输又分为顺序流式传输和实时流式传输,顺序流式传输场景下,用户可以边下载边观看,如用户在使用终端设备时,可以通过下载控件来下载视频,在终端设备下载视频的同时,用户还可以观看该视频。
实时流式传输总是实时传输,例如实时现场直播。其中,实时流式传输的场景至少包括:网络视频直播、远程桌面共享、视频监控以及视频电话等等。参见图1A,图1A是本申请实施例提供的一种远程桌面共享的场景示意图,在该远程桌面共享场景下,终端设备120与其他远程终端连接,并将远程终端的桌面显示到终端设备120,该场景下,需要实时地将远程终端的桌面显示到终端设备120,因此通信需要实时的,且是基于TCP传输的。
参见图1B,图1B是本申请实施例提供的一种视频监控的场景示意图。图1B示出了一种典型的视频实时流式传输如视频监控的场景,该视频监控的场景下,用户可以通过智能手机130中的应用程序或浏览器连接到摄像机,应用程序或浏览器连接到摄像机上的超文本传输协议(Hyper Text Transfer Protocol,HTTP)服务器,并获取设备列表,从而获得监控设备,这样用户就可以获取监控设备获得的实时视频,同时该监控设备所获取的实时视频流数据块是实时的,基于TCP传输。
可以理解的是,实时流式传输所包含的场景不限于图1A和图1B,图1A和图1B仅为示例,不应理解为具有限定意义。图1A中的远程终端以及图1B中的监控设备可以理解为本申请实施例中的数据发送设备。
其中,传输完整的视频画面时,数据量非常大,对现有的网络和存储来说是不可接受的。为了能够使视频便于传输和存储,通常采用压缩和编解码的方式,将重复信息在发送端去掉,在接收端恢复出来,这样将大大减少视频数据文件的大小。
压缩:大多数流行的视频编解码器允许空间(帧内)压缩以及时间(帧间)压缩。压缩算法可能会发生变化,但所有视频编解码器都遵循类似的压缩方案。
编解码:编码器将多张图像进行编码后生成一段段的图像群组(Group OfPictures,GOP),解码器在播放时则是读取一段段的GOP进行解码后再渲染显示。GOP是一组连续的画面,由一张I帧和数张B/P帧组成,是视频图像编码器和解码器存取的基本单位,它的排列顺序将会一直重复到视频结束。I帧是内部编码帧(也称为关键帧),P帧是前向预测帧(前向参考帧),B帧是双向内插帧(双向参考帧)。简单地讲,I帧是一个完整的画面,而P帧和B帧记录的是相对于I帧的变化。如果没有I帧,P帧和B帧就无法解码。参见图2A,图2A是本申请实施例提供的视频编解码示意图。可以理解的是,图2A所示的视频流编解码仅为一种示例,不应理解为对本申请实施例具有限定意义。
传输控制协议(Transmission Control Protocol,TCP)是当前互联网中广泛支持的传输协议,同时大多数应用程序将数据承载在TCP协议之上进行传输。
其中,使用TCP作为传输协议的流式传输示例:
1、远程桌面共享使用远程帧缓冲(Remote Frame Buffer,RFB)协议,通过TCP协议传输。例如远程桌面共享应用:RealVNC,TightVNC,TigerVNC,TeamViewer。
2、视频监控:在超文本传输协议(Hyper Text Transfer Protocol,HTTP)浏览器中观看实时视频监控的应用。
3、视频通话:虽然大多数视频通话使用用户数据报协议(User DatagramProtocol,UDP)作为传输层协议,但是在网络地址转换(Network Address Translation,NAT)阻止UDP流量的情况下,实时流媒体应用都会回退到使用TCP协议。如应用程序网络电话Skype,瓦次普(WhatsAppmessenger,WhatsApp)。
4、其他通用实时流式传输协议通常使用的是:1)、动态码率自适应技术(HTTPLiveStreaming,HLS);2)、基于HTTP的动态自适应流(Dynamic Adaptive Streaming overHTTP,DASH);3)、实时消息传输协议(Real Time Messaging Protocol,RTMP)。
基于以上所介绍的TCP协议,在实时流媒体应用使用内核TCP协议栈传输实时视频流数据时,会面临以下重要的技术问题:
一、内核态缓存过度使用造成延迟较高,Linux内核中默认的TCP内核态缓存大小约为4MB。对于非实时业务,缓存能够有效地减少应用程序和Linux系统的交互,提高吞吐量。但是对于实时业务,如实时流式传输,过大的缓存会造成排队时延过长,产生一定的负作用。
二、无线链路的影响,如果网络链路不好,那么待传输的数据将在内核态缓存中开始缓存和排队,等待发送。如果待传输的数据为实时流数据,那么实时流数据的缓存将引入延迟,从而影响用户体验,如造成卡顿,影响用户观看等。
基于上述介绍,参见图2B,图2B是本申请实施例提供的一种系统架构示意图。套接字(Socket)是端口的意思,也即建立网络通信连接至少需要一对端口号,具体地,socket本质是应用程序编程接口(Application Programming Interface,API),在具体工作需要调用库(lib),由于API是函数库,用于定义函数的运算逻辑,用户态里运行着应用,因此,socket衔接用户态和内核态。
其中,套接字应用程序(Socket Application):用于使用套接字编程接口开发网络通信的应用程序;
套接字应用程序编程接口(socket API):即socket编程接口;
套接字接口实现:用于套接字编程接口的内部实现;
传输层与网络层的协议实现:用于传输层与网络层的协议实现;
数据链路层协议实现:用于数据链路层协议实现,如以太网协议或WIFI协议等;
在具体实现中,数据发送设备中的应用程序调用套接字API,通过该套接字API创建套接字,从而通过协议栈实现建立与数据接收设备的TCP连接,建立TCP连接之后,数据发送设备通过该TCP连接发送流数据或接收流数据。
在图2B所示的系统架构下,本申请实施例提供了一种数据处理方法,以下将具体介绍本申请实施例所提供的数据处理方法。
参见图3,图3是本申请实施例提供的一种发送流数据的方法的流程示意图,该发送流数据的方法可应用于数据发送设备,该数据发送设备可包括手机、平板电脑、笔记本电脑、掌上电脑、移动互联网设备(英文:mobile internet device,简称:MID)等,可选地,该数据发送设备还可以包括网络摄像头和媒体直播客户端等等,以及该数据发送设备还可以包括采集视频信息的服务器和传输实时流数据的网络中间设备等等,本申请实施例对于数据发送设备不作限定。具体地,该发送流数据的方法应用于TCP连接的数据发送端,该数据发送端的操作系统中运行有应用,该数据发送端的操作系统中运行的应用可以包括流媒体应用等等,本申请实施例不作唯一性限定。其中,该数据发送端为本申请实施例中的数据发送设备。如图3所示,该发送流数据的方法至少包括以下步骤:
301、将应用下发的数据块存入第一队列,上述数据块为流数据,上述第一队列为上述数据发送端的操作系统的用户态中的队列,上述第一队列用于放置待发送的流数据的数据块;
其中,流数据可以包括视频流数据,如在实时流式传输的场景为视频监控或视频通话的情况下,该流数据可以为由摄像头采集的视频流数据。该流数据还可以包括图像流数据,如在实时流式传输的场景为远程桌面共享的情况下,该流数据可以为数据发送设备采集的图像流数据。也就是说,本申请实施例中,数据块可以为视频流的数据块,还可以为图像流数据的数据块等。
302、在第二队列中的数据量满足预设条件的情况下,将上述第一队列中的至少一个数据块加入上述第二队列,上述第二队列为上述数据发送端的操作系统的内核态中,TCP协议对应的发送缓存队列;
其中,预设条件为与第二队列中的数据量相关的条件,具体地,上述预设条件为:上述第二队列中的数据量不超过第二阈值,或者,上述第二队列中的数据量的占用比不超过第三阈值。
其中,第二阈值为动态的衡量第二队列中的数据量阈值,也可以称该第二阈值为动态的衡量第二队列中的数据量的大小的阈值。该第二阈值可以为由视频比特率以及第二调节参数确定的阈值,上述第二调节参数为延迟参数。具体地,该第二调节参数可以用于表征流媒体应用可容忍的延迟程度。也就是说,第二调节参数为流媒体应用可容忍的延迟参数。其中,不同的流媒体应用可容忍的延迟程度可能不同,因此不同的流媒体应用可能对应不同的第二调节参数;相应地,不同的流媒体应用也可能对应相同的第二调节参数,本申请实施例不作限定。
举例来说,根据视频比特率VBR和一个可调节参数alpha来综合确定第二队列中的数据量阈值,其中,alpha值反映了流媒体应用可容忍的延迟。例如假设视频比特率VBR=4Mbps,流媒体应用为对时延极度敏感的实时视频通话,最大容忍延迟alpha等于100ms,那么第二阈值等于VBR*alpha=4Mbps*0.1s=50KB。而如果该流媒体应用为对实时性要求较小的应用,例如直播或者需要容忍内容审查延迟的应用,那么alpha值可以等于5s,可计算出第二阈值等于2M。依据本申请实施例所提供的确定第二阈值的方法,可以有效的防止第二队列中的数据量阈值设置为固定值的种种弊端。如若将第二队列中的数据量阈值设置为固定值,且该固定值较小,那么一旦设置了较小的阈值,则在网络质量良好的情况下,很可能会降低视频的清晰度,以及可能导致网络带宽利用率低下的现象。
可以理解的是,本申请实施例对于第二调节参数如何设置以及该第二调节参数为多少不作限定。如第二调节参数可以根据用户明显能够感觉到卡顿的时间来确定,又如该第二调节参数还可以依据经验值来确定等等。
其中,第三阈值可以用来衡量第二队列中的数据量的占用比,如该第三阈值为80%,即表示第二队列中的数据量占用了第二队列的总数据量的80%。可选的,第三阈值可以还可以为其他值,本申请实施例不作限定。
303、上述数据发送端通过上述第二队列,向上述TCP连接的数据接收端发送数据。
实施本申请实施例,通过将应用下发的数据块存入第一队列,然后在第二队列中的数据量满足预设条件的情况下,再将第一队列中的至少一个数据块加入第二队列,可以有效减少第二队列中数据块的堆积,避免了第二队列中的数据量过多而无法存入造成卡顿的现象,而且还有效减少了数据的传输时延,提高了使用TCP协议传输数据的实时性,提高了数据传输的效率。
可选的,在网络质量不好或网络质量变化剧烈的情况下,为了进一步降低数据发送前在第二队列中的排队的时间,本申请实施例还提供了一种流数据发送的方法,可以保证优先发送优先级较高的数据块,即保留第一队列中优先级较高的数据块,而丢弃一些优先级较低的数据块。因此,基于图3所描述的数据处理方法,上述方法还包括:
在上述第二队列中的数据量超过上述第二阈值的情况下,或者,在上述第二队列中的数据量的占用比超过上述第三阈值的情况下,丢弃上述第一队列内优先级较低的数据块。
本申请实施例中,优先级较低的数据块可以为第一队列中优先级最低的数据块,也可以为第一队列中除优先级最高的数据块之外的数据块等,本申请实施例对于具体丢弃多少数据块不作限定。
具体地,在上述应用下发的数据块为视频流的数据块的情况下,上述视频流的数据块包括B帧、P帧和I帧,由此本申请实施例还提供了一种确定数据块的优先级的方法,如下所示:
在上述视频流的数据块中,被其他帧引用的次数越多的帧的优先级越高;和/或,在上述视频流的数据块中包括连续多帧未被其他帧引用,则上述连续多帧中的第一帧的优先级最低。
本申请实施例中,可以依据引用次数来确定优先级,也可以在包含连续多帧未被其他帧引用的情况下,依据连续多帧中的第一帧的优先级最低来确定优先级,以上两种实现方式本申请实施例不作唯一性限定。可选的,本申请实施例可以使用帧与帧之间引用的次数来衡量优先级,即被其他帧引用的次数越多的帧的优先级越高。在该优先级规则下,未被其他帧引用的帧的优先级最低,若视频流的数据块中包含有连续多帧未被其他帧引用,则该连续多帧的优先级最低,若丢弃该连续多帧,则很可能会导致视频播放质量的下降,因此,在视频流的数据块中包含连续多帧未被其他帧引用,则该连续多帧中的第一帧的优先级最低。
进一步地,在依据上述优先级规则确定各个帧的优先级后,还可能会出现优先级相同的情况,因此,在上述B帧、上述P帧和上述I帧被其他帧引用的次数相同的情况下,或者,在上述B帧、上述P帧和上述I帧分别为一组连续多帧中的第一帧的情况下,
上述B帧的优先级低于上述P帧的优先级,上述P帧的优先级低于上述I帧的优先级。
可选的,数据发送设备可以为每帧流数据初始分配一个优先级,然后基于上述优先级规则分配优先级,即如果帧被其他帧引用,则该帧的优先级增加(如0.1),帧优先级可以与其他帧的引用数成正比。
可以理解的是,数据发送设备可以将应用下发的数据块存入第一队列后,为每帧数据分配优先级,也可以在将应用下发的数据块存入第一队列时,为每帧数据分配优先级等,本申请实施例对于该数据发送设备何时分配优先级不作唯一性限定。
实施本申请实施例,在网络质量不好或网络质量变化剧烈的情况下,第二队列中的数据量可能会很多,利用本申请实施例所提供的方法,可以将优先级较高的数据块发送出去,丢弃优先级较低的数据块,从而最大限度的保障了通信质量,减少了数据在内核态的发送队列中的排队时间。
可选的,在具体实现中,常常会出现网络质量不好或者网络质量变化剧烈的情况,该情况下,第二队列中的数据量可能已经足够多了,这时若再将第一队列中的数据块加入第二队列,则会严重影响数据块在内核态的发送队列中的排队时间,因此,基于上述所描述的发送流数据的方法,本申请实施例还提供了一种发送流数据的方法,如下所示:
在上述第二队列中的数据量超过上述第二阈值的情况下,或者,在上述第二队列中的数据量的占用比超过上述第三阈值的情况下,上述方法还包括:
降低将数据块从上述第一队列加入上述第二队列的速率。
可选的,在上述第二队列中的数据量超过上述第二阈值的情况下,上述方法还包括:
暂停将上述第一队列中的至少一个数据块加入上述第二队列,直到上述第二队列中的数据量不超过上述第二阈值,继续执行上述将上述第一队列中的至少一个数据块加入上述第二缓存。
可选的,在上述第二队列中的数据量的占用比超过上述第三阈值的情况下,上述方法还包括:
暂停将上述第一队列中的至少一个数据块加入上述第二队列,直到上述第二队列中的数据量的占用比不超过上述第三阈值,继续执行上述将上述第一队列中的至少一个数据块加入上述第二队列。
本申请实施例中,若将数据块从第一队列加入第二队列的速率可变,则在第二队列的数据量超过第二阈值的情况下,或者,在第二队列中的数据量的占用比超过第三阈值的情况下,数据发送设备便可以降低该速率,从而进一步减少加入第二队列的数据块。可以理解的是,本申请实施例中,可以设置一个阈值来衡量第二队列中的数据量,如第二阈值或第三阈值,也可以同时通过第二阈值和第三阈值来衡量第二队列中的数据量。举例来说,在同时通过第二阈值和第三阈值衡量第二队列中的数据量的情况下,只要第二队列中的数据量满足其中一个条件,该数据发送设备便可以降低将第一队列中的数据块加入第二队列的速率;而若第二队列中的数据量不超过第二阈值或该第二队列中的数据量的占用比不超过第三阈值,则该数据发送设备便可以以正常的速率将第一队列中的数据块加入第二队列。又或者,第二队列中的数据量不超过第二阈值,且该第二队列中的数据量的占用比不超过第三阈值,则该数据发送设备以正常的速率将第一队列中的数据块加入第二队列。
而若将数据块从第一队列加入第二队列的速率不可变,则在第二队列的数据量超过第二阈值的情况下,数据发送设备便可以停止将数据块从第一队列加入第二队列,直到第二队列中的数据量不超过该第二阈值,则该数据发送设备便可以继续将第一队列中的数据块加入第二队列。或者,在第二队列中的数据量的占用比超过第三阈值的情况下,该数据发送设备也可以停止将数据块从第一队列加入第二队列,直到第二队列中的数据量的占用比不超过第三阈值,则该数据发送设备可以继续将第一队列中的数据块加入第二队列。可以理解的是,本申请实施例中,可以仅仅设置一个阈值,如第二阈值或第三阈值,也可以同时设置第二阈值和第三阈值来衡量第二队列的数据量情况等,本申请实施例不作限定。具体可参考上述描述,这里不再赘述。
实施本申请实施例,可以有效避免第二队列中的数据块过多而无法存入,导致应用卡顿;以及有效避免了第二队列中的数据块过多而增加数据块的传输时延的情况。
可选的,在网络质量不好的情况下,第一队列中的数据量可能也会很多,该情况下,基于上述所描述的数据处理方法,本申请实施例还提供了一种发送流数据的方法,如下所示:
在上述第一队列中的数据量超过第一阈值的情况下,丢弃上述第一队列内优先级较低的数据块。
具体地,第一阈值为动态的衡量第一队列的数据量阈值,该第一阈值可以为由视频比特率、上述TCP连接的速率、上述第一队列中的数据量以及第一调节参数确定的阈值,上述第一调节参数为上述TCP连接能够缓存的视频流的数据块的时长。其中,不同的流媒体应用可能会对应不同的第一调节参数,相应地,不同的流媒体应用也可能对应相同的第一调节参数,本申请实施例不作限定。
应理解,本申请并不限定上述的第一阈值和下述的第二阈值的计算方式,或者取值规则,本申请中记载的具体计算方式仅为举例说明。
举例来说,根据视频比特率VBR,TCP连接的速率link-rate,一个可调节的参数beta以及第一队列的数据量(user-space-bufsize)来综合确定当前第一队列的数据量阈值。可选的,本申请实施例中第一阈值可以通过min[max(VBR,link-rate)*beta,user-space-bufsize]来计算,该第一阈值反映了当前link-rate下最大能够缓冲beta时间长度的视频流的数据块,保证在当前TCP连接下不发生等待,同时第一阈值不能超过第一队列的总数据量,例如,VBR=4Mbps,beta=1s,link-rate=10Mbps,user-space-bufsize=10MB,那么第一阈值等于1.25MB。
可选的,本申请实施例中,在数据发送设备将应用下发的数据块存入第一队列后,该数据发送设备可以依据第一队列中的数据量大小,来决定是否丢弃该第一队列内优先级较低的数据块;或者,该数据发送设备将应用下发的数据块存入第一队列后,该数据发送设备可以依据第一队列中的数据量大小以及第二队列中的数据量大小,来决定是否丢弃该第一队列内优先级较低的数据块。
实施本申请实施例,在网络质量不好或网络质量变化剧烈的情况下,第二队列中的数据量可能会非常多,以及第一队列中的数据量可能也会非常多,利用本申请实施例所提供的方法,通过将优先级较高的数据块发送出去,丢弃优先级较低的数据块,从而能够有效保证将最重要的数据块发送出去,最大限度的保障了通信质量,减少了数据块在内核态的发送队列中排队的时间。
基于图3所描述的发送流数据的方法,参见图4,图4是本申请实施例提供的一种数据优化架构的示意图,该数据优化架构可应用于数据发送设备,具体地,可应用于数据发送设备的用户态中,如图4所示,该数据优化架构400至少可包括:
联合调度模块401、用户态缓存模块402和内核态缓存控制模块403;
具体地,该联合调度模块401,可用于获取流媒体应用下发的数据块,然后该数据块经过该联合调度模块401,将该数据块存入第一队列,具体地,该联合调度模块401可以控制将该数据块存入用户态缓存模块402;以及,该联合调度模块401还可以在第二队列中的数据量超过第二阈值的情况,或者,该第二队列中的数据量的占用比超过第三阈值的情况下,控制丢弃第一队列中内优先级较低的数据块;或者,该联合调度模块401还可以在第一队列中的数据量超过第一阈值的情况下,控制丢弃第一队列中优先级较低的数据块;或者,该联合调度模块401还可以在第一队列中无法存入数据块的情况下,控制将数据块直接存入第二队列等。
用户态缓存模块402,也可以理解为基于优先级的用户态缓存的管理模块,数据块经由联合调度模块401进入该用户态缓存模块402,经由该用户态缓存模块402进行调度,然后按照优先级策略传输数据块。
内核态缓存控制模块403,用于动态调整第二队列的数据量阈值,具体地第二队列的数据量阈值可依据图3所描述的方法来设置。其中,若流媒体应用对实时性要求较高,则该第二队列中的数据量阈值如第二阈值可以设置较小;若流媒体应用对实时性要求较低,则该第二队列中的数据量阈值如第二阈值可以设置较大。具体地,该内核态缓存控制模块403,还可以控制将数据块从第一队列加入第二队列中。
本申请实施例中的数据优化架构400部署在用户态,独立于操作系统内核。在流媒体应用完成数据块的采集之后,以及通过TCP连接发送数据块之前。具体地,流媒体应用通过调用套接字API创建套接字,并建立与数据接收设备的TCP连接后,数据发送设备便可以通过该TCP连接发送流数据的数据块。更具体地,在向数据接收设备发送流数据的数据块之前,该流数据的数据块可依次通过该数据优化架构400中的联合调度模块401以及用户态缓存模块402,从而通过用户态(如图2B中的协议栈实现)发送给TCP连接的数据接收设备。
该数据优化架构400通过获取流媒体应用下发的数据块,建立用户态的数据缓存,对数据进行分析和处理。在网络状态不好或变化频繁的场景下,降低数据块在内核态的发送队列中排队的时间,提升用户体验。本申请实施例使用用户态缓存与内核态缓存两级缓冲管理,允许在用户态缓存中对数据块进行缓冲,以及在用户态缓存中对数据块进行优化处理。可以理解的是,任何其他流媒体都可以替代视频流数据,以获得类似的效果。例如在远程桌面场景下,在发送视频流数据的同时,也会发送的控制命令的流数据。这些控制命令的流数据可以在用户态进行缓冲,以实现网络恶化时,根据优先级对数据进行排序和丢弃。
基于图4所提供的数据优化架构400,本申请实施例提供了两种架构部署方式,如图5A和图5B所示。
第一种架构部署方式,参见图5A,通过库(动态库或静态库)和API的方式。流媒体应用通过调用本申请实施例提供的数据优化架构400的API,直接将数据块发送至数据优化架构400,由数据优化架构400对数据块进行处理后,发送到操作系统内核。但是该种情况下的部署方式需要应用程序替换原有的系统调用。也就是说,使用图5A所提供的部署方式时,该流媒体应用可以由数据优化架构400的开发商来开发。
因此,该情况下,图3所描述的发送流数据的方法中,将上述应用下发的数据块存入第一队列包括:
通过调用目标应用程序编程接口API将上述应用下发的数据块存入上述第一队列。
第二种架构部署方式,参见图5B,通过代理的方式。本申请实施例中的数据优化架构400作为一个单独的进程运行在用户态之中,通过配置应用程序的代理(如使用iptables将流媒体应用下发的数据块全部导入到指定的进程),将所有数据块截获到本申请实施例中的数据优化架构400,处理完成之后,再将数据块发送到操作系统内核。该情况下的部署方式不需要修改原有应用程序即可使用。也就是说,使用图5B所提供的部署方式时,该流媒体应用可以不由数据优化架构400的开发商来开发。
因此,该情况下,图3所描述的发送流数据的方法中,上述将上述应用下发的数据块存入第一队列包括:
通过上述应用的代理将上述应用下发的数据块存入上述第一队列,上述代理为运行在上述操作系统的用户态的一个进程。
为了更形象地描述本申请实施例所提供的发送流数据的方法,以下将结合具体的实施例来说明该发送流数据的方法。以下方法均应用于TCP连接的数据发送设备,该数据发送设备的操作系统中运行有应用。
参见图6,图6是本申请实施例提供的另一种发送流数据的方法的流程示意图,该发送流数据的方法基于图3进一步得到,如图6所示,该发送流数据的方法至少包括以下步骤:
601、数据发送设备将应用下发的数据块存入第一队列;
其中,该数据块为流数据,该第一队列为数据发送设备的操作系统的用户态中的队列,该第一队列用于放置待发送的流数据的数据块。
602、检测第二队列中的数据量是否超过第二阈值,若是,则执行603;否则,执行604;
603、丢弃第一队列内优先级较低的数据块;
604、将第一队列中的至少一个数据块加入第二队列;
可选的,在第二队列中的数据量超过第二阈值的情况下,该数据发送设备不仅可以丢弃第一队列内优先级较低的数据块,该数据发送设备还可以降低将数据块从第一队列加入第二队列的速率,或者,该数据发送设备还可以暂停将第一队列中的至少一个数据块加入第二队列,直到第二队列中的数据量不超过第二阈值,继续执行将第一队列中的至少一个数据块加入第二队列。具体地,如在数据发送设备丢弃第一队列内优先级较低的数据块,以及该数据发送设备还降低将数据块从第一队列加入第二队列的速率的情况下,本申请实施例中,该数据发送设备可以同时执行丢弃第一队列内优先级较低的数据块的步骤以及执行降低将数据块从第一队列加入第二队列的速率的步骤,或者,该数据发送设备也可以以先后顺序执行丢弃第一队列内优先级较低的数据块的步骤以及执行降低将数据块从第一队列加入第二队列的速率的步骤等,本申请实施例不作限定。
605、通过第二队列,向TCP连接的数据接收设备发送数据。
其中,在数据发送设备中的用户态空间很大的情况下,可以执行图6所描述的发送流数据的方法。可选的,在数据发送设备中的用户态空间不是很大的情况下,本申请实施例还提供了一种发送流数据的方法,如下所示:
参见图7,图7是本申请实施例提供的又一种发送流数据的方法的流程示意图,该发送流数据的方法基于图3进一步得到。如图7所示,该发送流数据的方法至少包括以下步骤:
701、数据发送设备获取应用下发的数据块;其中,数据块为流数据;
702、检测第一队列内的数据量是否超过第一阈值,若否,则执行703;若是,则执行704;
可选的,在数据发送设备检测第一队列内的数据量是否超过第一阈值之前,该数据发送设备还可以先获取该第一队列内的数据量,然后再检测该第一队列内的数据量是否超过了第一阈值。
本申请实施例中,数据发送设备可以实时地或以固定频率检测第一队列内的数据量,也可以在数据发送设备获得应用下发的数据块的情况下,来检测第一队列内的数据量等。其中,在数据发送设备获得应用下发的数据块的情况下,该数据发送设备检测第一队列内的数据量是否超过第一阈值,可以减少数据发送设备的功耗,避免实时检测或以固定频率检测而消耗数据发送设备的功耗。
703、将数据块存入第一队列;
其中,第一队列为数据发送设备的操作系统的用户态中的队列,该第一队列用于放置待发送的流数据的数据块。
704、检测第二队列中的数据量是否超过第二阈值,若是,则执行705;否则,执行706;
可选的,在数据发送设备检测第二队列中的数据量是否超过第二阈值之前,该数据发送设备还可以先获取该第二队列中的数据量,然后再检测该第二队列中的数据量是否超过了第二阈值。
705、丢弃第一队列内优先级较低的数据块;
可以理解的是,在丢弃第一队列内优先级较低的数据块的过程中,该数据发送设备还可以降低将数据块从第一队列加入第二队列的速率,或者,该数据发送设备还可以暂停将第一队列中的至少一个数据块加入第二队列,直到第二队列中的数据量不超过第二阈值,继续执行将第一队列中的至少一个数据块加入第二队列。或者,该数据发送设备还可以暂停将第一队列中的至少一个数据块加入第二队列,直到该第二队列中的数据量不超过第二阈值,且该第一队列内的数据量不超过第一阈值,继续执行将第一队列中的至少一个数据块加入第二队列,具体地,如在数据发送设备丢弃第一队列内优先级较低的数据块,以及该数据发送设备还降低将数据块从第一队列加入第二队列的速率的情况下,本申请实施例中,该数据发送设备可以同时执行丢弃第一队列内优先级较低的数据块的步骤以及执行降低将数据块从第一队列加入第二队列的速率的步骤,或者,该数据发送设备也可以以先后顺序执行丢弃第一队列内优先级较低的数据块的步骤以及执行降低将数据块从第一队列加入第二队列的速率的步骤等,本申请实施例不作限定。
706、将第一队列中的至少一个数据块加入第二队列;
其中,该第二队列为数据发送设备的操作系统的内核态中,与TCP协议对应的发送缓存队列。
707、通过第二队列,向TCP连接的数据接收设备发送数据。
实施本申请实施例,在网络质量不好或网络质量变化剧烈的情况下,可以有效地利用宝贵的内核态发送缓存,避免数据块在内核态中的堆积。
可以理解的是,以上各个实施例中所描述的实现方式各有侧重,未详尽描述的实现方式,还可以参考其他实施例。
为了更形象地描述图3、图6以及图7所描述的发送流数据的方法,以下将结合具体的场景来说明。
以实时视频监控为例,移动视频采集设备通过TCP实时传递视频流数据给远端监控节点,具体可包括动态巡检,或者无人机的巡检等。该情况下,对于视频流数据的实时性要求较高,以便于远端监控节点能够及时响应。同时由于移动视频采集设备在不断地移动,且网络环境也可能会不断地发生变化,因此如何能够保证实时视频流数据的传输尤为重要。因此通过在该移动视频采集设备上应用本申请实施例所提供的数据处理方法,能够很好地保障实时视频流数据的传输,提高业务的整体体验。
如图8A所示,图8A是本申请实施例提供的实时视频采集设备处理流数据的过程示意图。可以理解的是,在图8A所示的示意图中,实时流媒体数据为本申请实施例中所描述的流数据,移动视频采集设备可为本申请实施例中所描述的数据发送设备,远端监控节点可为本申请实施例中所描述的接收设备。
其中,实时流媒体数据被实时视频采集设备所获取,以及该实时流媒体数据被存入用户态缓存中,该用户态缓存通过进行优先级管理,从而得到实时流媒体数据的优先级。如图8A所示,假设用户态缓存中所存储的流数据包括F1、F2、F3、F4、F5和F6,则该实时视频采集设备通过对该F1、F2、F3、F4、F5和F6进行优先级管理,可分别得到该F2、F3、F4、F5和F6的优先级。
在本申请实施例中,关于第一阈值和第二阈值的设置如下所示:
第一阈值的设置,如视频比特率VBR=4Mbps,beta=2s,link-rate当前为10Mbps,user-space-bufsize等于20MB,则依据min[max(VBR,link-rate)*beta,user-space-bufsize]的计算方式,可得到第一阈值等于20Mb,即该第一阈值等于2.5MB。
第二阈值的设置,如视频比特率VBR=4Mbps,alpha=100ms,则VBR*alpha=4Mbps*0.1s=400Kbit=50KB。
如图8A所示,内核态缓存的存储空间的占用大小阈值可设置为50KB,假设网络质量变差,内核态缓存的存储空间的占用大小50KB全部被占满,则该实时视频采集设备便可以按照优先级进行丢包操作,如图8A所示,可丢弃F2,以及按照优先级顺序依次发送F1、F5、F4、F3和F6。
又举例来说,若实时视频采集设备监控到当前链路速率link-rate下降,例如进入弱覆盖时,link-rate为2Mbps,这时该实时视频采集设备可以动态修改为对应的计算值0.1MB(min[max(VBR,link-rate)*beta,user-space-bufsize])。可以理解的是,该计算值仅为一种示例,不应将其理解为对本申请实施例具有限定意义。可以理解的是,链路速率可以理解为TCP连接的数据发送设备与数据接收设备之间的链路的速率。
具体地数据处理方法可如图8B所示,图8B中是以第一阈值为2.5MB,第二阈值为50KB为例来说明本申请实施例的数据处理方法。数据处理方法可如下所示:
801、实时视频采集设备采集实时流媒体数据的数据块;
802、根据内核态缓存的数据量情况和用户态缓存的数据量情况,判断是否执行丢包操作;若须丢包,则执行806;否则执行803;
其中,根据内核态缓存的存储空间的占用情况和用户态缓存的存储空间的占用情况,判断执行丢包操作,具体可以为若内核态缓存的存储空间的占用大小超过50KB,以及用户态缓存的存储空间的占用大小超过2.5MB的情况。而若用户态缓存的存储空间的占用大小不超过2.5MB,则可以执行步骤603。
803、将实时流媒体数据的数据块存到用户态缓存;
804、获取内核缓存的数据量情况,并判断该内核态缓存的数据量是否小于50KB,若是,则执行807;否则,执行805;
805、停止将用户态缓存中的实时流媒体数据的数据块加入内核态缓存中;
806、丢弃用户态缓存中优先级低的实时流媒体数据的数据块;
807、写入内核态缓存中,把实时流媒体数据的数据块交给内核协议栈处理。
本申请实施例中,通过设置多级缓冲机制,即将用户态缓存与内核态缓存相结合的实时流式传输的缓冲管理,可以有效避免内核态缓存中的数据块的排队的时间;同时依据网络质量以及视频比特率来决定内核态缓存的占用大小以及用户态缓存的占用大小,可以充分根据网络质量来调整实时流式传输的速率,避免排队的时间过长,以及有效避免了实时流媒体数据传输的整体的时延。
可以理解的是,图8B所示的发送流数据的方法仅仅为一种示例,因此未详尽描述的实现方式,还可以参考前述实施例,这里不再一一赘述。
如图8C所示,图8C是本申请实施例提供的远程控制设备处理流数据的过程示意图。其中,实时控制命令可以为本申请实施例中所描述的流数据,该远程控制设备可以为本申请实施例中所描述的数据发送设备。如图8C,以远程桌面场景为例,远程控制设备需要通过用户界面(User Interface,UI)远程操作桌面操作系统,在网络时延较大的情况下,鼠标的操作会出现时滞,这个时候,可以把最实时的控制命令发送给接收设备,而把前序排队的报文(优先级较低)丢弃,提高用户感受。具体可如下所示:
远程控制设备接收用户输入的三条控制指令,如图8C所示,该三条控制指令可为:
1.Move window<ABC>location<X1,Y1>;
2.Move window<ABC>location<X2,Y2>;
3.Move window<ABC>location<X3,Y3>;
其中,在网络出现排队时延高于一个阈值(500ms),该远程控制设备检测到内核态缓存的占用大小较高(大于VBR*100ms),该远程控制设备可将用户态缓存中优先级较低的控制指令丢弃,而把最紧迫的当前命令3存储到内核态缓存中,从而将该控制指令3优先发送给接收设备,提高用户的实时性感受。
以上介绍了本申请实施例所提供的发送流数据的方法,以下将具体介绍本申请实施例所提供的数据发送设备。
参见图9A,图9A是本申请实施例提供的一种数据发送设备的结构示意图,该数据发送设备可用于执行前述各个实施例所描述的发送流数据的方法,该数据发送设备为应用于TCP协议的设备,且该数据处理设备的操作系统中运行有应用。如图9A所示,该数据发送设备至少包括:
存入单元901,用于将上述应用下发的数据块存入第一队列,上述数据块为流数据,上述第一队列为上述数据发送设备的操作系统的用户态中的队列,上述第一队列用于放置待发送的流数据的数据块;
加入单元902,用于在上述第二队列中的数据量满足预设条件的情况下,将上述第一队列中的至少一个数据块加入第二队列,上述第二队列为上述数据发送设备的操作系统的内核态中,TCP协议对应的发送缓存队列;
发送单元903,用于通过上述第二队列,向上述TCP连接的数据接收设备发送数据。
具体地,上述预设条件为:上述第二队列中的数据量不超过第二阈值,或者,上述第二队列中的数据量的占用比不超过第三阈值。
实施本申请实施例,通过将应用下发的数据块存入第一队列,然后在第二队列中的数据量满足预设条件的情况下,将第一队列中的至少一个数据块加入第二队列,可以有效减少第二队列中数据块的堆积,从而有效减少了流数据的传输时延,提高了使用TCP协议传输流数据的实时性,提高了流数据传输的效率。
可选的,如图9B所示,该数据发送设备还包括:
丢弃单元904,用于在上述第二队列中的数据量超过上述第二阈值的情况下,或者,在上述第二队列中的数据量的占用比超过上述第三阈值的情况下,丢弃上述第一队列内优先级较低的数据块。
可选的,如图9B所示,该数据发送设备还包括:
降低速率单元905,用于在上述第二队列中的数据量超过上述第二阈值的情况下,或者,在上述第二队列中的数据量的占用比超过上述第三阈值的情况下,降低将数据块从上述第一队列加入上述第二队列的速率。
可选的,如图9B所示,上述数据发送设备还包括:
暂停单元906,用于在上述第二队列中的数据量超过上述第二阈值的情况下,暂停将上述第一队列中的至少一个数据块加入上述第二队列;
上述加入单元902,还用于在上述第二队列中的数据量不超过上述第二阈值的情况下,继续执行上述将上述第一队列中的至少一个数据块加入第二队列。
可选的,暂停单元906,还用于在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,暂停将所述第一队列中的至少一个数据块加入所述第二队列;
上述加入单元902,还用于在上述第二队列中的数据量的占用比不超过第三阈值的情况下,继续执行上述将上述第一队列中的至少一个数据块加入上述第二队列。
具体地,上述丢弃单元904,还用于在上述第一队列中的数据量超过第一阈值的情况下,丢弃上述第一队列内优先级较低的数据块。
具体地,上述应用下发的数据块为视频流的数据块,上述视频流的数据块包括双向预测编码B帧,帧间预测编码P帧以及帧内编码I帧;其中,
在上述视频流的数据块中,被其他帧引用的次数越多的帧的优先级越高;和/或,在上述视频流的数据块中包含连续多帧未被其他帧引用,则上述连续多帧中的第一帧的优先级最低。
其中,在上述B帧、上述P帧和上述I帧被其他帧引用的次数相同的情况下,或者,在上述B帧、上述P帧和上述I帧分别为一组连续多帧中的第一帧的情况下,
上述B帧的优先级低于上述P帧的优先级,上述P帧的优先级低于上述I帧的优先级。
具体地,上述应用为流媒体应用,上述应用下发的数据块为视频流的数据块;
上述第一阈值为由视频比特率、上述TCP连接的速率、上述第一队列中的数据量以及第一调节参数确定的阈值,上述第一调节参数为上述TCP连接能够缓存的视频流的数据块的时长;
上述第二阈值为由视频比特率以及第二调节参数确定的阈值,上述第二调节参数为延迟参数,该延迟参数用于表征上述流媒体应用可容忍的延迟程度。
具体地,上述存入单元901,具体用于通过调用目标应用程序编程接口API将上述应用下发的数据块存入上述第一队列。
具体地,上述存入单元901,具体用于通过上述应用的代理将上述应用下发的数据块存入上述第一队列,上述代理为运行在上述操作系统的用户态的一个进程。
可以理解的是,图9A和图9B所示的数据发送设备还用于执行第一实施例(图3)、第二实施例(图6)、第三实施例(图7)以及第四实施例(图8B)所描述的实现方式,各个单元的具体实现方式,这里不再一一详述。
本申请实施例中,图4所提供的数据优化架构400中的联合调度模块401可具体用于控制存入单元901将应用下发的数据块存入第一队列,其中,第一队列相当于图4中的用户态缓存模块402,内核态缓存控制模块403可用于控制加入单元902将第一队列中的至少一个数据块加入第二队列。
请参见图10,图10是本申请实施例提供的又一种数据发送设备的结构示意图,该数据发送设备为应用于TCP协议的设备,该数据发送设备的操作系统中运行有应用,以及该数据发送设备的操作系统的用户态中的队列称为第一队列,该数据发送设备的操作系统的内核态中,与TCP协议对应的发送缓存队列称为第二队列。
如图10所示,该数据发送设备至少包括处理电路1001、存储介质1002和收发器1003,处理电路1001、存储介质1002和收发器1003通过总线1004相互连接。
存储介质1002包括但不限于是随机存储记忆体(random access memory,RAM)、只读存储器(read-only memory,ROM)、可擦除可编程只读存储器(erasable programmableread only memory,EPROM)、或便携式只读存储器(compact disc read-only memory,CD-ROM),该存储介质1002用于相关指令及数据。
收发器1003用于接收和发送数据。具体地,该收发器1003可以包括网卡,或天线等,本申请实施例中,处理电路1001通过该收发器1003,执行通过第二队列,向TCP连接的数据接收设备发送数据的步骤,该数据具体可为数据块,该数据块为流数据。
处理电路1001可以是一个或多个中央处理器(central processing unit,CPU),或者,该处理电路1001可以是一个或多个网络处理器(Network Processor,NP),或者,该处理电路1001还可以是一个或多个应用处理器(Application Processor,AP),或者,该处理电路1001还可以是CPU与NP的组合等,或者,该处理电路1001还可以是CPU与AP的组合等等,本申请实施例不作限定。可选的,该处理电路1001还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。
该数据发送设备中的处理电路1001用于读取上述存储介质1002中存储的程序代码,执行以下操作:
将上述应用下发的数据块存入第一队列,上述数据块为流数据,上述第一队列为上述数据发送设备的操作系统的用户态中的队列,上述第一队列用于放置待发送的流数据的数据块;
在第二队列中的数据量满足预设条件的情况下,将上述第一队列中的至少一个数据块加入上述第二队列,上述第二队列为上述数据发送端的操作系统的内核态中,TCP协议对应的发送缓存队列;
通过上述第二队列,向上述TCP连接的数据接收端发送数据。
其中,通过上述第二队列,向上述TCP连接的数据接收端发送数据,具体可以理解为利用收发器通过上述第二队列,向上述TCP连接的数据接收端发送数据。
具体地,上述预设条件为:上述第二队列中的数据量不超过第二阈值,或者,上述第二队列中的数据量的占用比不超过第三阈值。
可选的,该数据发送设备中的处理电路1001还用于读取上述存储介质1002中存储的程序代码,执行如下操作:
在上述第二队列中的数据量超过上述第二阈值的情况下,或者,在上述第二队列中的数据量的占用比超过上述第三阈值的情况下,丢弃上述第一队列内优先级较低的数据块。
可选的,在上述第二队列中的数据量超过上述第二阈值的情况下,或者,在上述第二队列中的数据量的占用比超过上述第三阈值的情况下,该数据发送设备中的处理电路1001还用于读取上述存储介质1002中存储的程序代码,执行如下操作:
降低将数据块从上述第一队列加入上述第二队列的速率。
可选的,在上述第二队列中的数据量超过上述第二阈值的情况下,该数据发送设备中的处理电路1001还用于读取上述存储介质1002中存储的程序代码,执行如下操作:
暂停将上述第一队列中的至少一个数据块加入上述第二队列,直到上述第二队列中的数据量不超过上述第二阈值,继续执行上述将上述第一队列中的至少一个数据块加入上述第二队列。
可选的,在上述第二队列中的数据量的占用比超过上述第三阈值的情况下,该数据发送设备中的处理电路1001还用于读取上述存储介质1002中存储的程序代码,执行如下操作:
暂停将上述第一队列中的至少一个数据块加入上述第二队列,直到上述第二队列中的数据量的占用比不超过上述第三阈值,继续执行上述将上述第一队列中的至少一个数据块加入上述第二队列。
可选的,该数据发送设备中的处理电路1001还用于读取上述存储介质1002中存储的程序代码,执行如下操作:
在上述第一队列中的数据量超过第一阈值的情况下,丢弃上述第一队列内优先级较低的数据块。
具体地,上述应用下发的数据块为视频流的数据块,上述视频流的数据块包括双向预测编码B帧,帧间预测编码P帧以及帧内编码I帧;其中,
在上述视频流的数据块中,被其他帧引用的次数越多的帧的优先级越高;和/或,在上述视频流的数据块中包括连续多帧未被其他帧引用,则上述连续多帧中的第一帧的优先级最低。
具体地,在上述B帧、上述P帧和上述I帧被其他帧引用的次数相同的情况下,或者,在上述B帧、上述P帧和上述I帧分别为一组连续多帧中的第一帧的情况下,
上述B帧的优先级低于上述P帧的优先级,上述P帧的优先级低于上述I帧的优先级。
具体地,上述应用为流媒体应用,上述应用下发的数据块为视频流的数据块;
上述第一阈值为由视频比特率、上述TCP连接的速率、上述第一队列中的数据量以及第一调节参数确定的阈值,上述第一调节参数为上述TCP连接能够缓存的视频流的数据块的时长;
上述第二阈值为由上述视频比特率以及第二调节参数确定的阈值,上述第二调节参数为延迟参数,上述延迟参数用于表征上述流媒体应用可容忍的延迟程度。
具体地,上述处理电路1001将上述应用下发的数据块存入第一队列包括:
通过调用目标应用程序编程接口API将上述应用下发的数据块存入上述第一队列。
具体地,上述处理电路1001上述将上述应用下发的数据块存入第一队列包括:
通过上述应用的代理将上述应用下发的数据块存入上述第一队列,上述代理为运行在上述操作系统的用户态的一个进程。
需要说明的是,各个操作的实现还可以对应参照前述实施例所示的方法实施例的相应描述。
在图10所描述的数据发送设备中,处理电路1001还可用于执行图9A和图9B所示的存入单元901和加入单元902所执行的操作,或者,该处理电路1001还可用于执行图4所示的联合调度模块401和内核态缓存控制模块403所执行的操作。
本申请实施例还提供一种计算机可读存储介质,上述计算机可读存储介质中存储有计算机程序,该计算机程序包括程序指令,该程序指令当被数据发送设备的处理电路执行时,使处理电路执行前述实施例所示的方法流程。
具体地,上述程序指令可被处理电路执行,实现:
将上述应用下发的数据块存入第一队列,上述数据块为流数据,上述第一队列为上述数据发送设备的操作系统的用户态中的队列,上述第一队列用于放置待发送的流数据的数据块;
在第二队列中的数据量满足预设条件的情况下,将上述第一队列中的至少一个数据块加入上述第二队列,上述第二队列为上述数据发送端的操作系统的内核态中,TCP协议对应的发送缓存队列;
通过上述第二队列,向上述TCP连接的数据接收端发送数据。
上述计算机可读存储介质可以是数据发送设备的内部存储单元,例如硬盘或内存。或者上述计算机可读存储介质也可以是上述数据发送设备的外部存储设备,例如数据发送设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等等。
本申请实施例还提供一种计算机程序产品,当上述计算机程序产品在数据发送设备上运行时,使前述实施例所示的方法流程得以实现。
参见图11,图11是以数据发送设备为终端设备为例提供的一种实现方式的结构框图,如图11所示,终端设备110可包括:应用芯片110、存储器115(一个或多个计算机可读存储介质)、射频(RF)模块116、外围系统117。这些部件可在一个或多个通信总线114上通信。
外围系统117主要用于实现终端设备110和用户/外部环境之间的交互功能,主要包括输入输出装置。具体实现中,外围系统117可包括:触摸屏控制器118、摄像头控制器119、音频控制器120以及传感器管理模块121。其中,各个控制器可与各自对应的外围设备(如触摸屏123、摄像头124、音频电路125以及传感器126)耦合。在一些实施例中,触摸屏123可以配置有自电容式的触控面板的触摸屏,也可以是配置有红外线式的触控面板的触摸屏。在一些实施例中,摄像头124可以是3D摄像头。需要说明的,外围系统117还可以包括其他I/O外设。本申请实施例中,该终端设备可以通过摄像头124获得视频流数据,或者,通过音频电路125获得待音频流数据等等。
应用芯片110可集成包括:一个或多个处理器111、时钟模块112以及电源管理模块113。集成于应用芯片110中的时钟模块112主要用于为处理器111产生数据传输和时序控制所需要的时钟。集成于应用芯片110中的电源管理模块113主要用于为处理器111、射频模块116以及外围系统提供稳定的、高精确度的电压。可以理解的是,该终端设备除了应用芯片之外,还可以包括其他芯片,如基带芯片等。
射频(RF)模块116用于接收和发送射频信号,主要集成了接收器和发射器。射频(RF)模块116通过射频信号与通信网络和其他通信设备通信。具体实现中,射频(RF)模块116可包括但不限于:天线系统、RF收发器、一个或多个放大器、调谐器、一个或多个振荡器、数字信号处理器、CODEC芯片、SIM卡和存储介质等。在一些实施例中,可在单独的芯片上实现射频(RF)模块116。
存储器115与处理器111耦合,用于存储各种软件程序和/或多组指令。具体实现中,存储器115可包括高速随机存取的存储器,并且也可包括非易失性存储器,例如一个或多个磁盘存储设备、闪存设备或其他非易失性固态存储设备。存储器115可以存储操作系统(下述简称系统),例如ANDROID,IOS,WINDOWS,或者LINUX等嵌入式操作系统。存储器115还可以存储网络通信程序,该网络通信程序可用于与一个或多个附加设备,一个或多个终端设备,一个或多个网络设备进行通信。存储器115还可以存储用户接口程序,该用户接口程序可以通过图形化的操作界面将应用程序的内容形象逼真的显示出来,并通过菜单、对话框以及按键等输入控件接收用户对应用程序的控制操作。本申请实施例中,存储器115中还可以存储视频流数据或音频流数据或控制命令等等。
存储器115还可以存储一个或多个应用程序。如图11所示,这些应用程序可包括:社交应用程序(例如Facebook),图像管理应用程序(例如相册),地图类应用程序(例如谷歌地图),浏览器(例如Google Chrome)等等。
应当理解,终端设备110仅为本申请实施例提供的一个例子,并且,终端设备110可具有比示出的部件更多或更少的部件,可以组合两个或更多个部件,或者可具有部件的不同配置实现。
在具体实现中,图11所示的终端设备还可以用于执行本申请实施例所提供的终端设备的显示方法,如该终端设备可以用于执行如图3所示的方法,以及其他实施例的实现方式,这里不再一一详述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:ROM或随机存储记忆体RAM、磁碟或者光盘等各种可存储程序代码的介质。

Claims (24)

1.一种发送流数据的方法,其特征在于,所述方法应用于传输控制协议TCP连接的数据发送端,所述数据发送端的操作系统中运行有应用,所述方法包括:
将所述应用下发的数据块存入第一队列,所述数据块为流数据,所述第一队列为所述数据发送端的操作系统的用户态中的队列,所述第一队列用于放置待发送的流数据的数据块;
在第二队列中的数据量满足预设条件的情况下,将所述第一队列中的至少一个数据块加入所述第二队列,所述第二队列为所述数据发送端的操作系统的内核态中,TCP协议对应的发送缓存队列;
所述数据发送端通过所述第二队列,向所述TCP连接的数据接收端发送数据。
2.根据权利要求1所述的方法,其特征在于,所述预设条件为:所述第二队列中的数据量不超过第二阈值,或者,所述第二队列中的数据量的占用比不超过第三阈值。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在所述第二队列中的数据量超过所述第二阈值的情况下,或者,在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,丢弃所述第一队列内优先级较低的数据块。
4.根据权利要求2或3所述的方法,其特征在于,在所述第二队列中的数据量超过所述第二阈值的情况下,或者,在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,所述方法还包括:
降低将数据块从所述第一队列加入所述第二队列的速率。
5.根据权利要求2或3所述的方法,其特征在于,在所述第二队列中的数据量超过所述第二阈值的情况下,所述方法还包括:
暂停将所述第一队列中的至少一个数据块加入所述第二队列,直到所述第二队列中的数据量不超过所述第二阈值,继续执行所述将所述第一队列中的至少一个数据块加入所述第二队列。
6.根据权利要求2或3所述的方法,其特征在于,在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,所述方法还包括:
暂停将所述第一队列中的至少一个数据块加入所述第二队列,直到所述第二队列中的数据量的占用比不超过所述第三阈值,继续执行所述将所述第一队列中的至少一个数据块加入所述第二队列。
7.根据权利要求1至3任意一项所述的方法,其特征在于,所述方法还包括:
在所述第一队列中的数据量超过第一阈值的情况下,丢弃所述第一队列内优先级较低的数据块。
8.根据权利要求1至3任意一项所述的方法,其特征在于,所述应用下发的数据块为视频流的数据块,所述视频流的数据块包括双向预测编码B帧,帧间预测编码P帧以及帧内编码I帧;其中,
在所述视频流的数据块中,被其他帧引用的次数越多的帧的优先级越高;和/或,在所述视频流的数据块中包括连续多帧未被其他帧引用,则所述连续多帧中的第一帧的优先级最低。
9.根据权利要求8所述的方法,其特征在于,在所述B帧、所述P帧和所述I帧被其他帧引用的次数相同的情况下,或者,在所述B帧、所述P帧和所述I帧分别为一组连续多帧中的第一帧的情况下,
所述B帧的优先级低于所述P帧的优先级,所述P帧的优先级低于所述I帧的优先级。
10.根据权利要求1至3任意一项所述的方法,其特征在于,所述将所述应用下发的数据块存入第一队列包括:
通过调用目标应用程序编程接口API将所述应用下发的数据块存入所述第一队列。
11.根据权利要求1至3任意一项所述的方法,其特征在于,所述将所述应用下发的数据块存入第一队列包括:
通过所述应用的代理将所述应用下发的数据块存入所述第一队列,所述代理为运行在所述操作系统的用户态的一个进程。
12.一种数据发送设备,其特征在于,所述数据发送设备为应用传输控制协议TCP的设备,所述数据发送设备的操作系统中运行有应用,所述数据发送设备包括:
存入单元,用于将所述应用下发的数据块存入第一队列,所述数据块为流数据,所述第一队列为所述数据发送设备的操作系统的用户态中的队列,所述第一队列用于放置待发送的流数据的数据块;
加入单元,用于在第二队列中的数据量满足预设条件的情况下,将所述第一队列中的至少一个数据块加入所述第二队列,所述第二队列为所述数据发送设备的操作系统的内核态中,TCP协议对应的发送缓存队列;
发送单元,用于通过所述第二队列,向所述TCP连接的数据接收设备发送数据。
13.根据权利要求12所述的数据发送设备,其特征在于,所述预设条件为:所述第二队列中的数据量不超过第二阈值,或者,所述第二队列中的数据量的占用比不超过第三阈值。
14.根据权利要求13所述的数据发送设备,其特征在于,所述数据发送设备还包括:
丢弃单元,用于在所述第二队列中的数据量超过所述第二阈值的情况下,或者,在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,丢弃所述第一队列内优先级较低的数据块。
15.根据权利要求13或14所述的数据发送设备,其特征在于,所述数据发送设备还包括:
降低速率单元,用于在所述第二队列中的数据量超过所述第二阈值的情况下,或者,在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,降低将数据块从所述第一队列加入所述第二队列的速率。
16.根据权利要求13或14所述的数据发送设备,其特征在于,所述数据发送设备还包括:
暂停单元,用于在所述第二队列中的数据量超过所述第二阈值的情况下,暂停将所述第一队列中的至少一个数据块加入所述第二队列;
所述加入单元,还用于在所述第二队列中的数据量不超过所述第二阈值的情况下,继续执行所述将所述第一队列中的至少一个数据块加入所述第二队列。
17.根据权利要求13或14所述的数据发送设备,其特征在于,所述数据发送设备还包括:
暂停单元,用于在所述第二队列中的数据量的占用比超过所述第三阈值的情况下,暂停将所述第一队列中的至少一个数据块加入所述第二队列;
所述加入单元,还用于在所述第二队列中的数据量的占用比不超过所述第三阈值的情况下,继续执行所述将所述第一队列中的至少一个数据块加入所述第二队列。
18.根据权利要求14所述的数据发送设备,其特征在于,
所述丢弃单元,还用于在所述第一队列中的数据量超过第一阈值的情况下,丢弃所述第一队列内优先级较低的数据块。
19.根据权利要求12至14任意一项所述的数据发送设备,其特征在于,所述应用下发的数据块为视频流的数据块,所述视频流的数据块包括双向预测编码B帧,帧间预测编码P帧以及帧内编码I帧;其中,
在所述视频流的数据块中,被其他帧引用的次数越多的帧的优先级越高;和/或,在所述视频流的数据块中包含连续多帧未被其他帧引用,则所述连续多帧中的第一帧的优先级最低。
20.根据权利要求19所述的数据发送设备,其特征在于,在所述B帧、所述P帧和所述I帧被其他帧引用的次数相同的情况下,或者,在所述B帧、所述P帧和所述I帧分别为一组连续多帧中的第一帧的情况下,
所述B帧的优先级低于所述P帧的优先级,所述P帧的优先级低于所述I帧的优先级。
21.根据权利要求12至14任意一项所述的数据发送设备,其特征在于,
所述存入单元,具体用于通过调用目标应用程序编程接口API将所述应用下发的数据块存入所述第一队列。
22.根据权利要求12至14任意一项所述的数据发送设备,其特征在于,
所述存入单元,具体用于通过所述应用的代理将所述应用下发的数据块存入所述第一队列,所述代理为运行在所述操作系统的用户态的一个进程。
23.一种数据发送设备,其特征在于,所述数据发送设备为应用传输控制协议TCP的设备,所述数据发送设备的操作系统中运行有应用,所述数据发送设备包括:处理电路、存储介质和收发器;其中,所述处理电路、所述存储介质和所述收发器通过线路互联,所述存储介质中存储有程序指令;所述程序指令被所述处理电路执行时,使所述处理电路执行如权利要求1到11任意一项所述的方法。
24.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被数据发送设备的处理电路执行时,使所述处理电路执行权利要求1至11任意一项所述的方法。
CN201810132429.4A 2018-02-07 2018-02-07 发送流数据的方法及数据发送设备 Active CN110121114B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201810132429.4A CN110121114B (zh) 2018-02-07 2018-02-07 发送流数据的方法及数据发送设备
PCT/CN2019/073922 WO2019154221A1 (zh) 2018-02-07 2019-01-30 发送流数据的方法及数据发送设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810132429.4A CN110121114B (zh) 2018-02-07 2018-02-07 发送流数据的方法及数据发送设备

Publications (2)

Publication Number Publication Date
CN110121114A CN110121114A (zh) 2019-08-13
CN110121114B true CN110121114B (zh) 2021-08-27

Family

ID=67519674

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810132429.4A Active CN110121114B (zh) 2018-02-07 2018-02-07 发送流数据的方法及数据发送设备

Country Status (2)

Country Link
CN (1) CN110121114B (zh)
WO (1) WO2019154221A1 (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111260760B (zh) * 2020-01-10 2023-06-20 腾讯科技(深圳)有限公司 图像处理方法、装置、电子设备及存储介质
CN111245736B (zh) * 2020-04-28 2020-08-07 上海飞旗网络技术股份有限公司 一种保持应用稳定支付的数据包速率控制方法
CN111813579A (zh) * 2020-07-17 2020-10-23 济南浪潮数据技术有限公司 一种通信方法、装置及可读存储介质,一种文件系统
CN111935497B (zh) * 2020-09-18 2021-01-12 武汉中科通达高新技术股份有限公司 一种用于交警系统的视频流管理方法和数据服务器
CN114371810B (zh) * 2020-10-15 2023-10-27 中国移动通信集团设计院有限公司 Hdfs的数据存储方法及装置
CN112860321A (zh) * 2021-01-29 2021-05-28 上海阵量智能科技有限公司 命令下发方法、处理设备及存储介质
CN112988413A (zh) * 2021-02-07 2021-06-18 杭州复杂美科技有限公司 交易批量广播动态调节方法、计算机设备和存储介质
CN115334156A (zh) * 2021-04-26 2022-11-11 深信服科技股份有限公司 报文的处理方法、装置、设备、存储介质
CN113905196B (zh) * 2021-08-30 2024-05-07 浙江大华技术股份有限公司 视频帧管理方法、视频录像机和计算机可读存储介质
CN114422822B (zh) * 2021-12-27 2023-06-06 北京长焜科技有限公司 一种支持自适应hdmi编码的无人机数图传输控制方法
CN114500403A (zh) * 2022-01-24 2022-05-13 中国联合网络通信集团有限公司 一种数据处理方法、装置及计算机可读存储介质
CN117098191A (zh) * 2023-07-06 2023-11-21 佰路威科技(上海)有限公司 数据流调度控制方法及相关设备
CN118337715B (zh) * 2024-06-12 2024-08-20 江西科晨洪兴信息技术有限公司 一种物联网数据发送方法及系统
CN118503298B (zh) * 2024-07-18 2024-09-24 杭州新中大科技股份有限公司 基于双缓存的数据处理方法、装置、设备及存储介质

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1996271A (zh) * 2006-12-30 2007-07-11 华为技术有限公司 一种数据传输的方法及系统
CN101102281A (zh) * 2007-08-16 2008-01-09 中兴通讯股份有限公司 移动通信系统中大量数据上报时的数据处理方法
CN101616194A (zh) * 2009-07-23 2009-12-30 中国科学技术大学 主机网络性能优化系统及方法
CN101699795A (zh) * 2009-10-29 2010-04-28 中兴通讯股份有限公司 一种报文拥塞处理方法及系统
CN101770412A (zh) * 2010-01-22 2010-07-07 华中科技大学 一种连续数据缓存系统及其数据缓存方法
CN102355462A (zh) * 2011-10-09 2012-02-15 大唐移动通信设备有限公司 一种实现tcp传输的方法及装置
CN102375789A (zh) * 2010-08-09 2012-03-14 上海中标软件有限公司 一种通用网卡非缓存的零拷贝方法及零拷贝系统
CN102819497A (zh) * 2012-05-31 2012-12-12 华为技术有限公司 一种内存分配方法、装置及系统
CN103544324A (zh) * 2013-11-11 2014-01-29 北京搜狐新媒体信息技术有限公司 一种内核态的数据访问方法、装置及系统
CN103905420A (zh) * 2013-12-06 2014-07-02 北京太一星晨信息技术有限公司 一种协议栈和应用程序间传输数据的方法及装置
CN104811391A (zh) * 2014-01-24 2015-07-29 中兴通讯股份有限公司 数据包的处理方法、装置及服务器
WO2015116075A1 (en) * 2014-01-30 2015-08-06 Hewlett-Packard Development Company, L.P. Copy message from application buffer to send buffer within kernel
CN105512286A (zh) * 2015-11-27 2016-04-20 浪潮(北京)电子信息产业有限公司 一种读写数据免拷贝系统与方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104317530A (zh) * 2014-10-21 2015-01-28 浪潮电子信息产业股份有限公司 远程容灾技术中一种数据捕获方法的设计

Patent Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1996271A (zh) * 2006-12-30 2007-07-11 华为技术有限公司 一种数据传输的方法及系统
CN101102281A (zh) * 2007-08-16 2008-01-09 中兴通讯股份有限公司 移动通信系统中大量数据上报时的数据处理方法
CN101616194A (zh) * 2009-07-23 2009-12-30 中国科学技术大学 主机网络性能优化系统及方法
CN101699795A (zh) * 2009-10-29 2010-04-28 中兴通讯股份有限公司 一种报文拥塞处理方法及系统
CN101770412A (zh) * 2010-01-22 2010-07-07 华中科技大学 一种连续数据缓存系统及其数据缓存方法
CN102375789A (zh) * 2010-08-09 2012-03-14 上海中标软件有限公司 一种通用网卡非缓存的零拷贝方法及零拷贝系统
CN102355462A (zh) * 2011-10-09 2012-02-15 大唐移动通信设备有限公司 一种实现tcp传输的方法及装置
CN102819497A (zh) * 2012-05-31 2012-12-12 华为技术有限公司 一种内存分配方法、装置及系统
CN103544324A (zh) * 2013-11-11 2014-01-29 北京搜狐新媒体信息技术有限公司 一种内核态的数据访问方法、装置及系统
CN103905420A (zh) * 2013-12-06 2014-07-02 北京太一星晨信息技术有限公司 一种协议栈和应用程序间传输数据的方法及装置
CN104811391A (zh) * 2014-01-24 2015-07-29 中兴通讯股份有限公司 数据包的处理方法、装置及服务器
WO2015116075A1 (en) * 2014-01-30 2015-08-06 Hewlett-Packard Development Company, L.P. Copy message from application buffer to send buffer within kernel
CN105512286A (zh) * 2015-11-27 2016-04-20 浪潮(北京)电子信息产业有限公司 一种读写数据免拷贝系统与方法

Also Published As

Publication number Publication date
CN110121114A (zh) 2019-08-13
WO2019154221A1 (zh) 2019-08-15

Similar Documents

Publication Publication Date Title
CN110121114B (zh) 发送流数据的方法及数据发送设备
US9585062B2 (en) System and method for implementation of dynamic encoding rates for mobile devices
US9445150B2 (en) Asynchronously streaming video of a live event from a handheld device
EP2785070B1 (en) Method and apparatus for improving quality of experience in sharing screen among devices, and recording medium therefor
JP6169172B2 (ja) 仮想イントラフレームを使用してビデオコンテンツを符号化するためのシステムおよび方法
US10045089B2 (en) Selection of encoder and decoder for a video communications session
US8875208B1 (en) High quality multimedia transmission from a mobile device for live and on-demand viewing
US20200204841A1 (en) Streaming frames of spatial elements to a client device
CN111147606B (zh) 数据传输的方法、装置、终端及存储介质
CN113068001B (zh) 基于级联摄像机的数据处理方法、装置、设备和介质
JP2014519246A (ja) 小待ち時間レート制御システムおよび方法
CN113992967A (zh) 一种投屏数据传输方法、装置、电子设备及存储介质
US20070127437A1 (en) Medium signal transmission method, reception method, transmission/reception method, and device
US20150296054A1 (en) Server apparatus, terminal, thin client system, screen transmission method and program
US20160360220A1 (en) Selective packet and data dropping to reduce delay in real-time video communication
EP2538670B1 (en) Data processing unit
US11134114B2 (en) User input based adaptive streaming
US20210400334A1 (en) Method and apparatus for loop-playing video content
US20170249120A1 (en) Sharing of Multimedia Content
CN106658154A (zh) 一种视频截图方法、装置和设备以及视频处理方法、装置和设备
KR102003044B1 (ko) 복수 개의 단말기들 간의 화면 공유시 QoE(Quality of Experience)를 향상시키기 위한 방법, 장치 및 기록 매체
US11374839B1 (en) Optimizing media streaming by a bitrate-controlling device
Arun et al. Innovative solution for a telemedicine application
KR20140072668A (ko) 네트워크 카메라 서버 및 그의 비디오 스트림 처리 방법
US20240236409A9 (en) Electronic apparatus, server apparatus and control method thereof

Legal Events

Date Code Title Description
PB01 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