CN109889543B - 视频传输的方法、根节点、子节点、p2p服务器和*** - Google Patents

视频传输的方法、根节点、子节点、p2p服务器和*** Download PDF

Info

Publication number
CN109889543B
CN109889543B CN201910234475.XA CN201910234475A CN109889543B CN 109889543 B CN109889543 B CN 109889543B CN 201910234475 A CN201910234475 A CN 201910234475A CN 109889543 B CN109889543 B CN 109889543B
Authority
CN
China
Prior art keywords
video
frame
sub
node
stream
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
CN201910234475.XA
Other languages
English (en)
Other versions
CN109889543A (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.)
Guangzhou Huaduo Network Technology Co Ltd
Original Assignee
Guangzhou Huaduo Network Technology 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 Guangzhou Huaduo Network Technology Co Ltd filed Critical Guangzhou Huaduo Network Technology Co Ltd
Priority to CN201910234475.XA priority Critical patent/CN109889543B/zh
Publication of CN109889543A publication Critical patent/CN109889543A/zh
Priority to PCT/CN2019/120024 priority patent/WO2020192152A1/zh
Application granted granted Critical
Publication of CN109889543B publication Critical patent/CN109889543B/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
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/40Support for services or applications

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

本公开提供了一种视频传输的方法、根节点、子节点、P2P服务器和***,属于音视频技术领域。所述方法包括:在推送视频帧时,根节点可以接收CDN服务器发送的流媒体FLV整流,将FLV整流中每个视频帧按照预设长度分为多个视频包,子节点可以向根节点发送子流订阅请求,根节点根据接收到的子流订阅请求,在多个视频包中确定每个子流订阅请求对应的视频包,然后对于每个子流订阅请求,向子流订阅请求所属的子节点发送子流订阅请求对应的视频包。采用本公开,可以节约CDN服务器的数据流量花销。

Description

视频传输的方法、根节点、子节点、P2P服务器和***
技术领域
本公开涉及音视频技术领域,特别涉及一种视频传输的方法、根节点、子节点、P2P服务器和***。
背景技术
随着计算机技术和网络技术的发展,越来越多的直播应用程序出现,用户在直播应用程序中观看直播。
相关技术中,主播的音视频流的传输方式可以为:主播终端将音视频流拆分成连续音视频数据包,使用TCP(Transmission Control Protocol,传输控制协议)发送至CDN(Content Delivery Network,内容分发网络)服务器。CDN服务器可以将音视频数据包发送至观众终端,观众终端可以基于接收到的音视频数据包组成音视频流,进行播放。
由于均是从CDN服务器拉取音视频流,所以会导致CDN服务器的数据流量花销比较高。
发明内容
为了解决现有技术的问题,本公开实施例提供了一种视频传输的方法、根节点、子节点、P2P服务器和***。所述技术方案如下:
第一方面,提供了一种视频传输的方法,所述方法包括:
接收内容分发网络CDN服务器发送的流媒体FLV整流;
将所述FLV整流中每个视频帧按照预设长度分为多个视频包;
根据接收到的子流订阅请求,在所述多个视频包中确定每个子流订阅请求对应的视频包;
对于每个子流订阅请求,向所述子流订阅请求所属的子节点发送所述子流订阅请求对应的视频包。
可选的,所述将所述FLV整流中每个视频帧按照预设长度分为多个视频包之后,还包括:
对划分得到的多个视频包依次进行编号且每当划分的视频帧为I帧时,对划分I帧得到的视频包重新进行编号;
所述根据接收到的子流订阅请求,在所述多个视频包中确定每个子流订阅请求对应的视频包,包括:
根据接收到的子流订阅请求和视频包的编号,在所述多个视频包中确定每个子流订阅请求对应的视频包。
可选的,所述子流订阅请求中携带有子流编号和总子流数;
所述根据接收到的子流订阅请求和视频包的编号,在所述多个视频包中确定每个子流订阅请求对应的视频包,包括:
根据接收到的子流订阅请求中的子流编号、总子流数以及视频包的编号,在所述多个视频包中确定每个子流订阅请求对应的视频包。
这样,可以使子节点更快速的恢复出视频帧。
可选的,对于每个视频包,所述视频包还携带有所述视频包所属的视频帧的第一时间戳、所述视频包的帧内包序号、所述所属的视频帧的前一帧视频帧的第二时间戳、所述视频包所属的视频帧包含的视频包的数目。
可选的,所述子流订阅请求中携带有子流编号;
所述方法还包括:
根据接收到的子流订阅请求中的子流编号,如果确定第一子流订阅请求中子流编号是发送音频帧的子流编号,则向所述第一子流订阅请求所属的子节点发送所述FLV整流中的音频帧。
可选的,所述音频帧中还携带有所述音频帧的时间戳、所述音频帧的前一个音频帧的时间戳、音频帧的序号以及所述前一个音频帧之前相邻的连续的预设数目个音频帧的时间戳。
这样,可以更快速的确定出需要重传的音频帧。
可选的,所述方法还包括:
接收子节点切换通知;
如果满足子节点切换条件,则向其它节点订阅子流,并且断开与CDN服务器的连接。
这样,可以动态调整根节点和子节点。
第二方面,提供了一种视频传输的方法,所述方法包括:
向节点发送子流订阅请求,其中,所述子流订阅请求中携带有子流编号和总子流数;
接收所述节点根据所述子流订阅请求确定出的视频包,其中,所述视频包是所述节点将视频帧按照预设长度拆分得到,所述视频帧由所述节点接收自内容分发网络CDN服务器;
根据接收到的视频包,组成视频流,播放所述视频流。
可选的,对于每个视频包,所述视频包还携带有所述视频包所属的视频帧的第一时间戳、所述视频包的帧内包序号、所述所属的视频帧的前一帧视频帧的第二时间戳、所述视频包所属的视频帧包含的视频包的数目;
所述方法还包括:
根据接收到的视频包中携带的所述第一时间戳和所述第二时间戳,如果存在未接收到的第一视频帧和/或第一视频包,则当达到重传间隔时,向重传服务器发送重传请求,其中,如果未接收到所述第一视频帧,则所述重传请求中携带所述第一视频帧的第一时间戳,如果未接收到所述第一视频包,则所述重传请求中携带所述第一视频包所属的视频帧的第一时间戳和所述第一视频包的帧内包序号,如果未接收到所述第一视频帧和所述第一视频包,则所述重传请求中携带所述第一视频帧的第一时间戳、所述第一视频包所属的视频帧的第一时间戳和所述第一视频包的帧内包序号。
这样,可以实现重传。
可选的,所述当达到重传间隔时,向重传服务器发送重传请求,包括:
当达到重传间隔时,如果节点重传未启动,则向重传服务器发送重传请求。
这样,可以实现重传。
可选的,所述方法还包括:
如果节点重传启动,则向发送所述第一视频包的节点和/或发送所述第一视频帧的节点发送重传请求。
这样,可以实现重传。
可选的,所述方法还包括:
如果当前接收到的第二视频包的时间戳与第三时间戳的差值大于第一预设阈值,或者,当前接收到的第二视频包的时间戳与第四时间戳的差值大于第一预设阈值,则将所述第二视频包删除,其中,所述第三时间戳是当前时间点之前的第一预设时长内接收到的视频包的时间戳的最小值,所述第四时间戳是当前时间点之前的所述第一预设时长内接收到的视频包的时间戳的最大值。
这样,可以删除非法的视频包。
可选的,所述根据接收到的视频包,组成视频流,播放所述视频流,包括:
如果当前时间点与最后一次播放视频流中的视频帧的时间点之差达到第二预设阈值,且接收到未送去播放的视频帧的数目超过第三预设阈值,则确定接收到的视频帧中时间戳最小的I帧;
根据所述I帧的视频包及所述I帧之后的视频帧的视频包,组成视频流,播放所述视频流。
这样,可以使播放连续。
可选的,所述方法还包括:
接收音频帧;
所述根据接收到的视频包,组成视频流,播放所述视频流,包括:
根据接收到的视频包的帧内包序号和时间戳,将视频包组成视频帧;
根据所述视频帧的时间戳和所述音频帧的时间戳,将所述视频帧和音频帧组成音视频流;
播放所述音视频流。
这样,可以使用户看到视频。
可选的,所述方法还包括:
如果当前接收到的第一音频帧的时间戳与第五时间戳的差值大于第四预设阈值,或者,当前接收到的第二音频帧的时间戳与第六时间戳的差值大于第四预设阈值,则将所述第二音频帧删除,其中,所述第五时间戳是当前时间点之前的第二预设时长内接收到的音频帧的时间戳的最小值,所述第六时间戳是当前时间点之前的第二预设时长内接收到的音频帧的时间戳的最大值。
这样,可以删除非法的音频帧。
可选的,所述方法还包括:
接收根节点切换通知;
向订阅子流的根节点发送子流退订请求,并且与内容分发网络CDN服务器建立连接;
从所述CDN服务器获取流媒体FLV整流。
这样,可以动态的调整根节点和子节点。
可选的,所述方法还包括:
接收点对点P2P服务器发送的节点列表;
根据与所述节点列表中的节点进行通信,确定所述子流订阅请求发往的节点。
这样,可以使子节点确定出子流订阅请求发往的节点。
第三方面,提供了一种视频传输的方法,所述方法包括:
获取子节点目标预设时长之内的码率;
根据码率范围与总子流数的对应关系,确定所述码率所属的码率范围对应的总子流数;
向所述子节点发送所述总子流数,其中,所述总子流数在所述子节点向节点发送子流订阅请求时,被携带在子流订阅请求中,携带在所述子流订阅请求的总子流数用于所述节点确定发送往所述子节点的视频包,所述视频包是所述节点将视频帧按照预设长度拆分得到,所述视频帧由所述节点接收自内容分发网络CDN服务器。
可选的,所述方法还包括:
在与本设备建立连接的终端中随机确定预设数目个根节点;
向确定出为根节点的FLV节点发送根节点切换通知,并向除所述确定为根节点FLV节点之外的其它节点发送子节点切换通知。
可选的,所述方法还包括:
确定在当前时间点之前相邻的第三预设时长内各节点发送数据的数据量;
如果目标子节点对应的数据量大于或等于预设数值,则向所述目标子节点发送根节点切换通知。
这样,可以动态调整根节点和子节点。
可选的,所述方法还包括:
确定在当前时间点之前相邻的第四预设时长内各节点发送数据的数据量;
如果目标根节点对应的数据量小于预设数值,则向所述目标根节点发送子节点切换通知。
这样,可以动态调整根节点和子节点。
第四方面,提供了一种视频传输的根节点,所述根节点包括:
接收模块,用于接收内容分发网络CDN服务器发送的流媒体FLV整流;
拆分模块,用于将所述FLV整流中每个视频帧按照预设长度分为多个视频包;
确定模块,用于根据接收到的子流订阅请求,在所述多个视频包中确定每个子流订阅请求对应的视频包;
发送模块,用于对于每个子流订阅请求,向所述子流订阅请求所属的子节点发送所述子流订阅请求对应的视频包。
可选的,所述拆分模块,还用于:
将所述FLV整流中每个视频帧按照预设长度分为多个视频包之后,对划分得到的多个视频包依次进行编号且每当划分的视频帧为I帧时,对划分I帧得到的视频包重新进行编号;
所述确定模块,用于:
根据接收到的子流订阅请求和视频包的编号,在所述多个视频包中确定每个子流订阅请求对应的视频包。
可选的,所述子流订阅请求中携带有子流编号和总子流数;
所述确定模块,用于:
根据接收到的子流订阅请求中的子流编号、总子流数以及视频包的编号,在所述多个视频包中确定每个子流订阅请求对应的视频包。
可选的,对于每个视频包,所述视频包还携带有所述视频包所属的视频帧的第一时间戳、所述视频包的帧内包序号、所述所属的视频帧的前一帧视频帧的可选的,所述子流订阅请求中携带有子流编号;
所述发送模块,还用于:
根据接收到的子流订阅请求中的子流编号,如果确定第一子流订阅请求中子流编号是发送音频帧的子流编号,则向所述第一子流订阅请求所属的子节点发送所述FLV整流中的音频帧。
可选的,所述音频帧中还携带有所述音频帧的时间戳、所述音频帧的前一个音频帧的时间戳、音频帧的序号以及所述前一个音频帧之前相邻的连续的预设数目个音频帧的时间戳。
可选的,所述接收模块,还用于:
接收子节点切换通知;
所述发送模块,还用于:
如果满足子节点切换条件,则向其它节点订阅子流,并且断开与CDN服务器的连接。
第五方面,提供了一种视频传输的子节点,所述子节点包括:
发送模块,用于向节点发送子流订阅请求,其中,所述子流订阅请求中携带有子流编号和总子流数;
接收模块,用于接收所述节点根据所述子流订阅请求确定出的视频包,其中,所述视频包是所述节点将视频帧按照预设长度拆分得到,所述视频帧由所述节点接收自内容分发网络CDN服务器;
播放模块,用于根据接收到的视频包,组成视频流,播放所述视频流。
可选的,对于每个视频包,所述视频包还携带有所述视频包所属的视频帧的第一时间戳、所述视频包的帧内包序号、所述所属的视频帧的前一帧视频帧的第二时间戳、所述视频包所属的视频帧包含的视频包的数目;
所述发送模块,还用于:
根据接收到的视频包中携带的所述第一时间戳和所述第二时间戳,如果存在未接收到的第一视频帧和/或第一视频包,则当达到重传间隔时,向重传服务器发送重传请求,其中,如果未接收到所述第一视频帧,则所述重传请求中携带所述第一视频帧的第一时间戳,如果未接收到所述第一视频包,则所述重传请求中携带所述第一视频包所属的视频帧的第一时间戳和所述第一视频包的帧内包序号,如果未接收到所述第一视频帧和所述第一视频包,则所述重传请求中携带所述第一视频帧的第一时间戳、所述第一视频包所属的视频帧的第一时间戳和所述第一视频包的帧内包序号。
可选的,所述发送模块,还用于:
当达到重传间隔时,如果节点重传未启动,则向重传服务器发送重传请求。
可选的,所述发送模块,还用于:
如果节点重传启动,则向发送所述第一视频包的节点和/或发送所述第一视频帧的节点发送重传请求。
可选的,所述子节点还包括:
第一删除模块,用于如果当前接收到的第二视频包的时间戳与第三时间戳的差值大于第一预设阈值,或者,当前接收到的第二视频包的时间戳与第四时间戳的差值大于第一预设阈值,则将所述第二视频包删除,其中,所述第三时间戳是当前时间点之前的第一预设时长内接收到的视频包的时间戳的最小值,所述第四时间戳是当前时间点之前的所述第一预设时长内接收到的视频包的时间戳的最大值。
可选的,所述播放模块,用于:
如果当前时间点与最后一次播放视频流中的视频帧的时间点之差达到第二预设阈值,且接收到未送去播放的视频帧的数目超过第三预设阈值,则确定接收到的视频帧中时间戳最小的I帧;
根据所述I帧的视频包及所述I帧之后的视频帧的视频包,组成视频流,播放所述视频流。
可选的,所述接收模块,还用于:
接收音频帧;
所述播放模块,用于:
根据接收到的视频包的帧内包序号和时间戳,将视频包组成视频帧;
根据所述视频帧的时间戳和所述音频帧的时间戳,将所述视频帧和音频帧组成音视频流;
播放所述音视频流。
可选的,所述子节点还包括:
第二删除模块,用于:
如果当前接收到的第一音频帧的时间戳与第五时间戳的差值大于第四预设阈值,或者,当前接收到的第二音频帧的时间戳与第六时间戳的差值大于第四预设阈值,则将所述第二音频帧删除,其中,所述第五时间戳是当前时间点之前的第二预设时长内接收到的音频帧的时间戳的最小值,所述第六时间戳是当前时间点之前的第二预设时长内接收到的音频帧的时间戳的最大值。
可选的,所述接收模块,还用于接收根节点切换通知;
所述发送模块,还用于向订阅子流的根节点发送子流退订请求,并且与内容分发网络CDN服务器建立连接;
所述接收模块,还用于从所述CDN服务器获取流媒体FLV整流。
可选的,所述接收模块,还用于:
接收点对点P2P服务器发送的节点列表;
根据与所述节点列表中的节点进行通信,确定所述子流订阅请求发往的节点。
第六方面,提供了一种视频传输的P2P服务器,所述P2P服务器包括:
获取模块,用于获取子节点目标预设时长之内的码率;
确定模块,用于根据码率范围与总子流数的对应关系,确定所述码率所属的码率范围对应的总子流数;
发送模块,用于向所述子节点发送所述总子流数,其中,所述总子流数在所述子节点向节点发送子流订阅请求时,被携带在子流订阅请求中,携带在所述子流订阅请求的总子流数用于所述节点确定发送往所述子节点的视频包,所述视频包是所述节点将视频帧按照预设长度拆分得到,所述视频帧由所述节点接收自内容分发网络CDN服务器。
可选的,所述确定模块,还用于在与本设备建立连接的终端中随机确定预设数目个根节点;
所述发送模块,还用于向确定出为根节点的FLV节点发送根节点切换通知,并向除所述确定为根节点FLV节点之外的其它节点发送子节点切换通知。
可选的,所述确定模块,还用于确定在当前时间点之前相邻的第三预设时长内各节点发送数据的数据量;
所述发送模块,还用于如果目标子节点对应的数据量大于或等于预设数值,则向所述目标子节点发送根节点切换通知。
可选的,所述确定模块,还用于确定在当前时间点之前相邻的第四预设时长内各节点发送数据的数据量;
所述发送模块,还用于如果目标根节点对应的数据量小于预设数值,则向所述目标根节点发送子节点切换通知。
第七方面,提供了一种视频传输的***,所述***包括根节点、子节点和点对点P2P服务器,其中:
所述根节点,如上述第四方面所述的根节点,所述子节点,如上述第五方面所述的子节点,所述P2P服务器,如上述第六方面所述的P2P服务器。
第八方面,提供了一种节点,所述节点包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现上述第一方面和第二方面的视频传输的方法。
第九方面,提供了一种点对点P2P服务器,所述P2P服务器包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现上述第三方面的视频传输的方法。
第十方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现上述第一方面、第二方面和第三方面的视频传输的方法。
本公开实施例提供的技术方案带来的有益效果至少包括:
本公开实施例中,在推送视频帧时,根节点可以接收CDN服务器发送的流媒体FLV整流,将FLV整流中每个视频帧按照预设长度分为多个视频包,子节点可以向根节点发送子流订阅请求,根节点根据接收到的子流订阅请求,在多个视频包中确定每个子流订阅请求对应的视频包,然后对于每个子流订阅请求,向子流订阅请求所属的子节点发送子流订阅请求对应的视频包。这样,由于仅有根节点从CDN服务器获取视频帧,子节点是从根节点获取视频帧,而不是所有的视频帧均是从CDN服务器进行发送,所以可以节约CDN服务器的数据流量花销。
附图说明
图1是本公开实施例提供的一种视频传输的***图;
图2是本公开实施例提供的一种视频传输的***图;
图3是本公开实施例提供的一种视频传输的***图;
图4是本公开实施例提供的一种视频传输的方法的流程示意图;
图5是本公开实施例提供的一种视频传输的方法的流程示意图;
图6是本公开实施例提供的一种获取总子流数的示意图;
图7是本公开实施例提供的一种节点转换的示意图;
图8是本公开实施例提供的一种视频传输的根节点的结构示意图;
图9是本公开实施例提供的一种视频传输的子节点的结构示意图;
图10是本公开实施例提供的一种视频传输的子节点的结构示意图;
图11是本公开实施例提供的一种视频传输的子节点的结构示意图;
图12是本公开实施例提供的一种视频传输的P2P服务器的结构示意图;
图13是本公开实施例提供的一种节点的结构示意图;
图14是本公开实施例提供的一种P2P服务器的结构示意图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚,下面将结合附图对本公开实施方式作进一步地详细描述。
本公开实施例提供了一种视频传输的方法,如图1所示,该方法的执行主体可以是节点和P2P(peer-to-peer,点对点)服务器。其中,节点可以是安装有视频播放应用程序的终端,节点可以包括FLV(Flash Video,流媒体)节点、根节点和子节点,FLV节点可以与CDN服务器建立连接,从CDN服务器获取FLV整流,根节点可以与CDN服务器建立连接,从CDN服务器获取FLV整流,子节点可以从根节点或者子节点获取视频包。
其中,P2P服务器中可以设置有处理器、存储器和收发器,处理器可以用于视频传输的过程的处理,存储器可以用于存储视频传输过程中需要的数据以及产生的数据,收发器可以用于接收以及发送数据。
节点中可以设置有处理器、存储器和收发器,处理器可以用于视频传输的过程的处理,存储器可以用于存储视频传输过程中需要的数据以及产生的数据,收发器可以用于接收以及发送数据。节点中还可以设置有屏幕、麦克风等输入输出部件,屏幕可以用于显示视频画面,屏幕可以是触摸屏。
在进行实施前,首先介绍一下本公开实施例涉及的视频传输的***、应用场景以及所涉及到的名词概念:
如图2所示,视频传输的***中包括CDN服务器、根节点、子节点、P2P服务器和重传服务器,根节点与CDN服务器建立连接,从CDN服务器获取FLV整流。子节点可以从子节点获取视频包,也可以是从根节点获取视频包。P2P服务器可以与子节点、根节点建立连接,通知节点是根节点还是子节点。重传服务器可以与子节点建立连接,用于为子节点重传音视频包(包括音频包和视频包)。
在图2所示的方案图下,在节点进入CDN线路时,当前状态为FLV节点,可以通过登录P2P服务器,与P2P服务器建立连接。P2P服务器后续可以确定根节点、子节点以及为子节点提供节点列表(在后面进行说明)。
需要说明的是,CDN服务器与根节点之间通过TCP传输FLV整流,根节点与子节点、子节点与子节点之间通过UDP(User Datagram Protocol,用户数据报协议)传输音视频包(包括音频帧(也可以称为是音频包)和视频包),P2P服务器与根节点、子节点之间通过TCP传输数据,重传服务器与子节点之间通过TCP或UDP传输数据。
另外,上述图2是本公开实施例的简图,本公开实施例中,还提供了整体的方案图:
如图3所示,视频传输的***包括CDN服务器、根节点、子节点、P2P服务器、重传服务器、SM(subscribe manager,订阅管理者)服务器、VC(video Center,视频分配节点)服务器、AP(access prefer,接入代理节点)服务器,根节点与CDN服务器建立连接,从CDN服务器获取FLV整流。子节点可以从子节点获取视频包,也可以是从根节点获取视频包。P2P服务器可以与子节点、根节点建立连接,通知节点是根节点还是子节点。重传服务器可以与子节点建立连接,用于为子节点重传音视频包(包括音频包和视频包)。SM服务器可以与AP服务器建立连接,用于下发CDN服务器的线路的URL(Uniform Resource Locator,统一资源定位符),VC服务器可以与AP服务器建立连接,用于为节点提供P2P服务器的信息,AP服务器可以与节点连接,为节点提供与P2P服务器连接的桥梁。
在图3所示的方案图下,在节点进入CDN线路时,当前状态为FLV节点,可以通过AP服务器获取CDN服务器的URL,然后基于URL获取FLV整流,并且通过VC服务器请求连接P2P服务器,该节点接收到P2P服务器的地址时,可以通过AP服务器登录P2P服务器。P2P服务器后续可以确定根节点、子节点以及为子节点提供节点列表(在后面进行说明)。
本公开实施例可以适用于多个节点请求视频帧的过程,例如,在一个直播间中,主播在直播过程中,主播终端(主播使用的终端)录制主播直播的视频,向CDN服务器发送录制的视频帧,CDN服务器接收到后,可以向连接的根节点(直播间中的用户使用的终端)发送FLV整流,根节点可以向进行子流订阅的子节点发送视频帧中的视频包,子节点也可以向进行子流订阅的子节点发送视频帧中的视频包。
根节点,是节点的一种状态,是相对于子节点而言,根节点是与CDN服务器建立连接的节点,从CDN服务器获取FLV整流,并为子节点提供子流订阅服务。
子节点,是节点的一种状态,是相对于根节点而言,子节点不与CDN服务器建立连接,不从CDN服务器获取FLV整流,而是从根节点或者子节点获取视频帧。
FLV节点,是节点的一种状态,在节点连接到P2P服务器上,还未被分为子节点或者根节点时的一种状态,从CDN服务器获取FLV整流。
总子流数,进行P2P的子流的数目,一份视频流可以分为N份发送,那么N就是总子流数。
子流订阅,节点A需要P2P订阅时,需要找多个发布视频流的节点,发送子流订阅通知,请求发送子流。
本公开实施例提供了一种视频传输的方法,如图4所示,根节点的处理流程可以如下:
步骤401,根节点接收内容分发网络CDN服务器发送的流媒体FLV整流。
步骤402,根节点将FLV整流中每个视频帧按照预设长度分为多个视频包。
步骤403,根节点根据接收到的子流订阅请求,在多个视频包中确定每个子流订阅请求对应的视频包。
步骤404,根节点对于每个子流订阅请求,向子流订阅请求所属的子节点发送子流订阅请求对应的视频包。
本公开实施例提供了一种视频传输的方法,并且以图2为方案图,直播过程中的视频帧分发、子节点向根节点获取视频帧为例进行本公开的说明,如图5所示,该方法的执行流程可以如下:
步骤501,子节点向节点发送子流订阅请求,其中,子流订阅请求中携带有子流编号和总子流数。
在实施中,主播在直播过程中,用户想要进入直播间观看主播的直播,可以在终端(节点)中安装直播应用程序(即视频播放应用程序),然后使用申请的账户和密码登录直播应用程序,操作进入主播所在的直播间。这时节点与P2P服务器建立连接,此时节点为FLV节点,P2P服务器会向节点提供CDN服务器的URL,节点可以使用该URL从CDN服务器获取FLV整流。这时,P2P如果确定该节点为子节点,可以通知给该节点。这样,子节点后续会向节点(子节点和/或根节点)发送子流订阅请求,在子流订阅请求中会携带子流编号和总子流数。子流编号用于指示请求的子流的编号,总子流数为请求的子流的数目。后续可以断开与CDN服务器的连接,不再从CDN服务器获取FLV整流。
需要说明的是,一个子流订阅请求中一般携带一个子流编号,但是也可以携带多个子流编号,本公开实施例不做限定。
还需要说明的是,以上仅是以一个子节点为例进行说明,所有子节点均会进行上述处理,只不过子流订阅请求的接收方有可能不相同。
可选的,本公开实施例中,还提供了子节点选取发送子流订阅请求的节点的处理过程,处理可以如下:
子节点接收点对点P2P服务器发送的节点列表,根据与节点列表中的节点进行通信,确定子流订阅请求发往的节点。
在实施中,P2P服务器可以确定直播间中的所有用户的账户的登录终端(即节点),将这些登录终端组成节点列表,向各个子节点发送节点列表。子节点接收到节点列表之后,可以向节点列表中的各节点发送质量查询信息,并记录发送信息的发送时间点,各节点接收到质量查询信息后,可以反馈信息。子节点接收到反馈的信息时,可以记录接收时间点,然后计算接收时间点与发送时间点的差值,并获取总子流数,在节点列表的节点中选取差值最小的总子流数个节点,确定为子流订阅请求发往的节点。这样,可以确定出子流订阅请求发往的节点,也即确定出订阅子流的节点。
步骤502,根节点接收CDN服务器发送的FLV整流。
在实施中,在直播过程中,主播直播的视频流通过主播终端发送至CDN服务器,CDN服务器可以确定直播间中与CDN服务器建立连接的终端(即根节点),然后可以向根节点发送FLV整流(FLV整流中包括直播的视频帧和音频帧)。这样,根节点可以接收到CDN服务器发送的FLV整流。根节点接收到FLV整流后,可以进行播放,这样,根节点的用户可以观看主播的直播。
另外,在根节点未接收到FLV整流中的某些音频帧和视频帧时,可以向CDN服务器发送重传请求,请求重传未接收到的音频帧和视频帧。
可选的,本公开实施例中还提供了确定根节点和子节点的方法,相应的处理为:
在与本设备建立连接的终端中随机确定目标预设数目个根节点,向确定出为根节点的FLV节点发送根节点切换通知,并向除确定为根节点FLV节点之外的其它节点发送子节点切换通知。
在实施中,终端在刚进入直播间时,是FLV节点,CDN服务器可以在当前直播间中的终端中随机指定目标预设数目(如可以为50等)个节点为根节点,并通知给根节点,其余终端为子节点,后续根节点可以被动态调整为FLV节点和子节点,使音频帧和视频帧的分发更为流畅。
可选的,CDN服务器可以与根节点通过三次握手建立TCP连接,通过TCP向根节点发送FLV整流。
步骤503,根节点将FLV整流中每个视频帧按照预设长度分为多个视频包。
其中,预设长度可以预设,并且随着直播应用程序存储至根节点中,如1200字节等。
在实施中,根节点接收到FLV整流后,可以将FLV整流中的每个视频帧,按照预设长度进行分包处理,得到多个视频包。
可选的,可以在每个GOP(Group of Pictures,画面组)中按照视频帧进行依次编号,相应的处理可以如下:
根节点对划分得到的多个视频包依次进行编号且每当划分的视频帧为I帧时,对划分I帧得到的视频包重新进行编号。
其中,I帧(I frame)又称为intra picture(内部画面),I帧通常是每个GOP的第一个帧,经过适度地压缩,作为随机访问的参考点,可以当成图像。
在实施中,在对视频帧进行分包时,可以对划分得到的多个视频包依次进行编号,并且每当划分的视频帧为I帧时,对划分得到的视频包要重新开始编号。例如,有连续4个视频帧,视频帧1、视频帧2、视频帧3和视频帧4,视频帧3是I帧,视频帧1、视频帧2、视频帧3和视频帧4分别有4个视频包,视频帧1中视频包的编号为0、2、4、6,视频帧2中视频包的编号为8、10、12、14,视频帧3为I帧,要重新编号,视频帧3中视频包的编号为0、2、4、6,视频帧4中视频包的编号为8、10、12、14。
由于GOP的第一个帧是I帧,所以每个GOP重新编号,即为遇到I帧重新进行编号。
可选的,为了节约根节点的处理资源,根节点在拆分视频帧时,还会判断是否接收到子流订阅请求,如果接收到子流订阅请求,则按照步骤503的处理拆分视频帧,如果未接收到子流订阅请求,则不进行拆分视频帧的处理。
步骤504,根节点根据接收到的子流订阅请求,在多个视频包中确定每个子流订阅请求对应的视频包。
在实施中,根节点可以接收子节点发送的子流订阅请求,然后基于子流订阅请求,在多个视频包中,确定接收到的每个子流订阅请求所对应的视频包。
可选的,在步骤503中拆分视频包时,每个视频包还有编号,相应的步骤504的处理可以如下:根据接收到的子流订阅请求和视频包的编号,在多个视频包中确定每个子流订阅请求对应的视频包。
在实施中,根节点可以根据接收到的子流订阅请求和视频包的编号,在多个视频包中确定每个子流订阅请求所对应的视频包。
可选的,子流订阅请求中可以携带有子流编号和子流总数,相应的步骤504的处理可以如下:
根据接收到的子流订阅请求中的子流编号、总子流数以及视频包的编号,在多个视频包中确定每个子流订阅请求对应的视频包。
在实施中,根节点可以获取计算每个子流订阅请求对应的视频包的公式:子流编号=(视频包的编号/2)mod总子流数,mod表示取余,然后,将总子流数和子流编号代入该公式,即可确定出子流编号对应的视频包,将子流编号所对应的视频包,确定为子流编号所属的子流订阅请求对应的视频包。这样,就可以确定出每个子流订阅请求对应的视频包。例如,子流订阅请求中的子流编号为0,总子流数为15,则子流编号为0的子流订阅请求对应的视频包的编号为0、30、60等。
步骤505,对于每个子流订阅请求,根节点向子流订阅请求所属的子节点发送子流订阅请求对应的视频包。
在实施中,根节点确定出每个子流订阅请求所对应的视频包后,可以向发送该子流订阅请求的子节点发送该子流订阅请求对应的视频包。
可选的,为了使视频帧中的视频包能够重传,对于每个视频包,视频包还携带有视频包所属的视频帧的第一时间戳、视频包的帧内包序号、所属的视频帧的前一帧视频帧的第二时间戳、视频包所属的视频帧包含的视频包的数目。
在实施中,对于某个视频包的帧内包序号是指该视频包在所属视频帧中的排序。例如,某个视频包的帧内包序号为10,说明该视频包是所属视频帧中的第10个视频包。
视频帧的第一时间戳是DTS(Decoding Time Stamp,解码时间戳)。这个时间戳的意义在于告知播放器在什么时候解码这一帧的数据。同样,前一帧视频帧的第二时间戳也是DTS。
由于携带了视频帧的第一时间戳,所以可以确定出第一时间戳的视频包的数目,并且由于携带了视频帧包含的视频包的数目,所以可以将第一时间戳的视频包的数目与携带的视频包的数目进行比较,如果第一时间戳的视频包的数目小于携带的视频包的数目,则说明有视频包丢包,如果第一时间戳的视频包的数目等于携带的视频包的数目,则说明视频帧中的视频包接收完整。另外,由于携带了前一帧视频帧的第二时间戳,所以可以建立起视频帧在时间戳上的相邻关系,进而可以确定出丢失的视频帧。
另外,每个视频包中还可以携带有该视频包所属的视频帧的前一个视频帧包含的视频包的数目,这是为了使所有的视频帧均可以重传。例如,接收到一个视频帧B的一个包,前一个视频帧为视频帧A,除了将视频帧B的所有包的序号添加重传,还可以检查视频帧A是否也需要添加重传。这样,即使视频帧A的视频包全部丢失,也可以进行重传。
另外,还可以携带有按照GOP进行编号的视频包的编号,以及是否为重传的视频包的指示信息、进行P2P的URL的MD5串、视频数据等。
需要说明的是,上述第一时间戳与第二时间戳实际上均是时间戳,只不过第一时间戳是每个视频帧的时间戳,第二时间戳时该视频帧的前一个视频帧的时间戳。对于首个音频帧,前一个音频帧的第二时间戳为0。
步骤506,子节点接收节点根据子流订阅请求确定出的视频包。
在实施中,子节点接收到的视频包是节点将视频帧按照预设长度拆分得到,视频帧由节点接收自CDN服务器。
步骤507,子节点根据接收到的视频包,组成视频流,播放视频流。
在实施中,子节点接收到视频包后,可以将视频包组成视频帧,将视频帧组成视频流,播放视频流。
可选的,一般视频会包括视频帧和音频帧,它们一般是单独进行发送,本公开实施例中还提供了音频帧的发送处理,相应的处理可以如下:
子流订阅请求中携带有子流编号;根据接收到的子流订阅请求中的子流编号,如果确定第一子流订阅请求中子流编号是发送音频帧的子流编号,则向第一子流订阅请求所属的子节点发送FLV整流中的音频帧。
在实施中,由于单个音频帧的数据量比较小,所以不适宜再拆分,也即每次发送时,都是以音频帧为单位进行发送,即一个音频帧为一个音频包。在发送音频帧时,一般是接收到固定的子流编号的根节点进行发送。
根节点可以确定接收到的子流订阅请求中的子流编号(可以是预先配置),如果第一子流订阅请求中的子流编号是发送音频帧的子流编号,则可以向第一子流订阅请求所属的节点发送FLV整流中的音频帧。
例如,总子流数是15,子流编号为0~14,子流编号为14的子流订阅请求用于指示发送音频帧。
需要说明的是,子流编号为14的子流订阅请求除了用于指示发送音频帧,还可以用于指示发送视频包,二者没有冲突。
可选的,为了使音频帧的发送更灵活,本公开实施例中,还确定了发送音频帧的子流编号的确定方法:
音频帧中对应有GOP序列号,根据GOP序列号,确定发送音频帧的子流编号。
在实施中,音频帧对应有GOP序列号(每个音频帧的GOP序列号都是相等的),根节点可以获取音频帧中携带的GOP序列号,并且可以获取发送音频帧的子流编号的公式,将GOP序列号代入该公式中,即可确定出发送音频帧的子流编号。例如,在总子流数为15时,子流编号为0~14,GOP序列号为26,使用(GOP序列号/2)mod2,即可确定出发送音频帧的子流编号为13。
另外,为了减少音频帧的重传,可以使发送音频帧的子流编号有两个(即双路推送音频帧),例如,在总子流数为15时,发送音频帧的子流编号为13和14,在子节点接收到相同时间戳的音频帧时,可以删除其中一个。
另外,GOP序列号还可以用于子节点确定接收到的包是音频帧还是视频包,如果是音频帧,其中会有GOP序列号,如果是视频包,则没有。
可选的,本公开实施例中还提供了子节点接收音频帧的处理,以及如何播放音频帧的处理,相应的处理可以如下:
接收音频帧,根据接收到的视频包的帧内包序号和时间戳,将视频包组成视频帧,根据视频帧的时间戳和音频帧的时间戳,将视频帧和音频帧组成音视频流,播放音视频流。
在实施中,子节点可以接收音频帧,由于每个音频帧携带有当前音频帧的时间戳以及前一个音频帧的时间戳,所以可以建立起音频帧的时间戳的前后连续关系。然后首先将相同时间戳的视频包,按照视频包的帧内包序号的从小到大的顺序进行排列,组成视频帧,然后按照视频包携带的所属视频帧的时间戳与前一个视频帧的时间戳,建立起视频帧的前后连续关系。然后按照视频帧的时间戳的前后连续关系、音频帧的时间戳的前后连续关系,将视频帧和音频帧组成的音视频流,播放音视频流。
需要说明的是,上述是根节点接收到子流订阅请求时,根节点的处理,如果子节点接收到其它子节点发送的子流订阅请求,与根节点接收到子流订阅请求的处理过程完全相同,此处不再赘述。
另外,在本公开实施例中,如果根节点有子流订阅请求数目的限制,则对于超过子流订阅请求数目后接收到的子流订阅请求,会向子节点发送子流退订消息,以使子节点从其它子节点或者根节点获取子流。
可选的,子节点在未接收到视频包时,为了使直播视频可以继续播放,可以进行跳帧播放处理,相应的处理可以如下:
如果当前时间点与最后一次播放视频流中的视频帧的时间点之差达到第二预设阈值,且接收到未送去播放的视频帧的数目超过第三预设阈值,则确定接收到的视频帧中时间戳最小的I帧,根据I帧的视频包及I帧之后的视频帧的视频包,组成视频流,播放视频流。
其中,I帧(I frame)又称为intra picture(内部画面),I帧通常是每个GOP的第一个帧,经过适度地压缩,作为随机访问的参考点,可以当成图像,在播放时不需要参考其它视频帧即可进行解码。第二预设阈值可以预设,并且随着视频应用程序,一起安装在节点上。第三预设阈值也可以预设,并且随着视频应用程序,一起安装在节点上。
在实施中,子节点可以确定当前时间点距离最后一次播放视频流中的视频帧的时间点的差值,如果该差值达到第二预设阈值,则可以确定接收到且未进行播放的视频帧的数目是否超过第三预设阈值,如果超过第三预设阈值,则可以确定接收到的视频帧中的I帧,在这些I帧中确定时间戳最小的I帧,根据I帧的视频包及I帧之后的视频帧的视频包,组成视频流,播放视频流。这样,在丢帧后也可以继续播放视频流,用户可以继续观看主播的直播视频。
另外,跳帧处理可以通过代码执行。
可选的,本公开实施例中,还提供了进行视频包重传的处理,相应的处理可以如下:
根据接收到的视频包中携带的第一时间戳和第二时间戳,如果存在未接收到的第一视频帧和/或第一视频包,则当达到重传间隔时,向重传服务器发送重传请求,其中,如果未接收到第一视频帧,则重传请求中携带第一视频帧的第一时间戳,如果未接收到第一视频包,则重传请求中携带第一视频包所属的视频帧的第一时间戳和第一视频包的帧内包序号,如果未接收到第一视频帧和第一视频包,则重传请求中携带第一视频帧的第一时间戳、第一视频包所属的视频帧的第一时间戳和第一视频包的帧内包序号。
其中,对于某个视频包的帧内包序号是指该视频包在所属视频帧中的排序。例如,某个视频包的帧内包序号为10,说明该视频包是所属视频帧中的第10个视频包。
在实施中,子节点上维护有两个映射表,分别用于维护时间戳的连续关系和请求时间戳关系,时间戳的连续关系可以使用video Dts Relation表示,video Dts Relation用于记录接收到的视频帧的时间戳,请求时间戳关系可以使用video Dts Ack Map表示,用于记录未接收到视频包所属的视频帧后续的视频帧的时间戳。
子节点接收到任意一个视频包后,可以从该视频包解析到第一时间戳和第二时间戳,如果第二时间戳和第一时间戳在video Dts Relation中均存在,则不更改video DtsRelation,如果第一时间戳在video Dts Relation中不存在,则在video Dts Relation中的第二时间戳之后添加第一时间戳。这样,可以建立起视频帧的时间戳的前后连续关系。并且判断第一时间戳在video Dts Relation中是否存在或者是否为0,如果不存在或者为0,则将该第一时间戳添加到video Dts Ack Map中,如果存在,则不进行处理。
例如,A、B、C、D、E、F、G分别是连续的视频帧,其对应的时间戳如下,其中,第一时间戳使用Dts表示,第二时间戳使用lastDts表示:
A:Dts:5,lastDts:0;
B:Dts:8,lastDts:5;
C:Dts:13,lastDts:8;
D:Dts:17,lastDts:13;
E:Dts:22,lastDts:17;
F:Dts:26,lastDts:22;
G:Dts:29,lastDts:26
假设video Dts Ack Map中开始记录有0,比如接收到A、B、G、F、D,而未接收到C、E,接收A,则从video Dts Ack Map中删除时间戳0,并记录时间戳5,此时video Dts Ack Map大小为1。接收到B,则从video Dts Ack Map删除时间戳5,并记录时间戳8,此时videoDtsAckMap大小为1。接收到G,则从video Dts Ack Map删除时间戳26,并记录时间戳29,此时video Dts Ack Map大小为2。接收到F,则从video Dts Ack Map删除时间戳22,因时间戳26已被记录后续关系,所以不需要video Dts Ack Map记录数据,此时videoDtsAckMap大小为2。接收到D,则从video Dts Ack Map删除时间戳13,并记录时间戳17,此时videoDtsAckMap大小为3。执行到这里video Dts Ack Map中记录的值是8,17,29,即B、D、G后续的视频帧未接收到。
并且video Dts Relation记录的时间戳的前后连续关系为0-5-8-13-17-22-26-29。
这样,可以定时检查video Dts Ack Map,如果其中存在未接收到的视频帧,且达到重传间隔时,则可以向重传服务器发送时间戳的连续关系的获取请求,在其中携带CDN服务器的URL、以及视频帧的时间戳开始不连续的时间戳和时间戳结束不连续的时间戳(例如,时间戳依次为0-5-8-13-、、、-22-、、、-29,13至22时间戳不连续,22至29时间戳不连续,时间戳开始不连续的时间戳为13,时间戳结束不连续的时间戳为29)。重传服务器接收到时间戳的连续关系的获取请求之后,可以确定CDN服务器的URL对应的时间戳的连续关系,从中确定出接收到的两个时间戳之间的时间戳的连续关系,向子节点发送该时间戳的连续关系。子节点接收到后,可以使用video Dts Ack Map中记录的值,在连续关系中查找确定出丢失的视频帧的时间戳,然后可以向重传服务器发送重传请求,重传请求中携带所述第一视频帧(丢失的视频帧)的第一时间戳。
而且由于有的视频帧仅是丢失了某些视频包,所以可以仅重传丢失的这些视频包,而不需要重传整个视频帧,所以可以向重传服务器发送重传请求,该重传请求中携带有第一视频包(丢失的视频包)所属的视频帧的第一时间戳和所述第一视频包的帧内包序号。
另外,如果既丢失了视频帧,也丢失了视频包,则该重传请求中会携带第一视频帧的第一时间戳、第一视频包所属的视频帧的第一时间戳和第一视频包的帧内包序号。
另外,确定重传间隔的方式可以如下:
对于某个视频帧或者某个视频包,与重传服务器之间的第一次重传的重传间隔,可以首先预计每个视频包的到达时间,对于每个视频帧第一次接收的视频包,记录接收时间点,将接收时间点与该视频包所属的视频帧的时间戳相减,得到一个差值,然后将多个视频帧的差值求平均值,得到一个抖动平均值,即为第一次重传的时间间隔。对于该视频帧或者该视频包,与重传服务器之间的后续重传的重传间隔,子节点可以向重传服务器发送ping包,记录发送时间点,重传服务器会返回对ping包的回复信息,记录接收时间点,将接收时间点与发送时间点相减,得到RTT(round-trip time,回环时间),然后确定当前的抖动平均值(计算方式与计算第一次重传的重传间隔中的抖动平均值相同),并且可以获取抖动对应的权值、RTT对应的权值。将抖动平均值与抖动对应的权值相乘,得到第一乘积,并将RTT与RTT对应的权值相乘,得到第二乘积,将第一乘积与第二乘积相加,即得到重传间隔。
在得到重传间隔后,每次达到重传间隔,还未接收到视频帧和/或者视频包,可以进行重传处理。
每次达到重传间隔是指:将视频帧的时间戳的添加到video Dts Ack Map中后的时长等于重传间隔时,则进行重传该视频帧之后的视频帧。或者某个视频包的相邻视频包已经接收到的时长达到重传间隔时,则进行重传。另外,对于向重传服务器请求二次或者多次重传的视频帧或者视频包,则是发出重传请求之后的时长达到重传间隔时,还未接收到请求重新发送的视频帧或者视频包,则说明达到重传间隔。
另外,为了方便记录视频包的重传或者视频帧的重传,本公开实施例中,还提供了video Frame Dts队列和video Resend Map队列,video Frame Dts队列记录的是接收到的视频帧中还未播放的视频帧的时间戳,video Resend Map队列记录的是需要进行重传的视频包。每当接收到一个视频帧的某个视频包,将该视频包所属的视频帧的时间戳和包括的视频包的序号添加到video Resend Map队列中。并且判断video Frame Dts队列中是否存在该视频包所属的视频帧的时间戳,如果存在,则不进行处理,如果不存在,则将该时间戳添加至video Frame Dts队列中。另外,还可以判断是否大于当前播放的视频帧的时间戳,如果大于则将接收到的视频包删除。在将某个视频帧送去播放后,可以将video Frame Dts队列中的该视频帧的时间戳删除。另外,如果接收到某个视频包,则可以按照视频包的帧内包序号,将视频包的重传记录从video Resend Map队列中删除。
可选的,可以使用两个map记录并维护时间戳的连续关系及请求时间戳的关系:
std::map<uint32_t,uint64_t>m_videoDtsRelation;
//时间戳的连续关系:lastDts->(dts<<32|frameNum)
std::map<uint32_t,FlvAckDtsInfo>m_videoDtsAckMap;
//请求时间戳的关系。
可选的,可以使用以下结构体维护接收到的视频包的信息:
std::set<FlvP2pVideoDtsCmp>m_videoDtsList
Flv P2P Dts Status m_dtsStatus。
可选的,在使用重传服务器进行重传时,还可以首先判断节点重传是否启动,相应的处理可以如下:
当达到重传间隔时,如果节点重传未启动,则向重传服务器发送重传请求。
在实施中,子节点可以配置有节点重传功能,如果节点重传功能开启,则说明节点重传启动,如果节点重传功能未开启,则说明节点重传未启动。
在达到重传间隔时,如果节点重传未启动,说明不能从节点重传视频包,则可以向重传服务器发送重传请求,以使重传服务器再次发送视频帧和/或视频包。
另外,在节点重传启动时,处理可以如下:
如果节点重传启动,则向发送第一视频包的节点和/或发送第一视频帧的节点发送重传请求。
在实施中,在达到重传间隔时,如果节点重传启动,说明可以从节点重传视频包,可以向发送第一视频包的节点发送重传请求,以使该节点再次发送视频包。还可以向发送第一视频帧的节点发送重传请求。
另外,本公开实施例中,还提供了判断非法视频包的处理,相应的处理可以如下:
如果当前接收到的第二视频包的时间戳与第三时间戳的差值的绝对值大于第一预设阈值,或者,当前接收到的第二视频包的时间戳与第四时间戳的差值的绝对值大于第一预设阈值,则将第二视频包删除,其中,第三时间戳是当前时间点之前的第一预设时长内接收到的视频包的时间戳的最小值,第四时间戳是当前时间点之前的第一预设时长内接收到的视频包的时间戳的最大值。
其中,第一预设时长可以预设,并且存储至直播应用程序中,随直播应用程序一起安装在节点上。第一预设阈值也可以预设,并且存储至直播应用程序中,随直播应用程序一起安装在节点上。
在实施中,子节点在接收到任一视频包(后续可以称为是第二视频包)时,或者每隔一定时长,可以获取当前时间点之前的第一预设时长内接收到的视频包的时间戳,然后确定时间戳中的最小值(即第三时间戳),并且可以确定时间戳中的最大值(即第四时间戳)。
然后可以确定当前接收到的第二视频包的时间戳与第三时间戳的差值的绝对值,判断该差值的绝对值与第一预设阈值的关系,如果该差值大于第一预设阈值,可以确定第二视频包为非法视频包,可以将第二视频包删除。或者,可以确定第二视频包的时间戳与第四时间戳的差值的绝对值,判断该差值的绝对值与第一预设阈值的关系,如果该差值的绝对值大于第一预设阈值,可以确定第二视频包为非法视频包,可以将第二视频包删除。这样,由于短时间内接收到的视频包的时间戳相差不会特别大,如果特别大,说明是非法视频包。
可选的,本公开实施例还提供了判断音频帧是非法音频帧的处理,相应的处理可以如下:
如果当前接收到的第一音频帧的时间戳与第五时间戳的差值大于第四预设阈值,或者,当前接收到的第二音频帧的时间戳与第六时间戳的差值大于第四预设阈值,则将第二音频帧删除,其中,第五时间戳是当前时间点之前的第二预设时长内接收到的音频帧的时间戳的最小值,第六时间戳是当前时间点之前的第二预设时长内接收到的音频帧的时间戳的最大值。
其中,第二预设时长可以预设,并且存储至视频应用程序中,随应用程序一起安装在节点上。第四预设阈值也可以预设,并且存储至视频应用程序中,随应用程序一起安装在节点上。
在实施中,子节点在接收到任一音频帧(后续可以称为是第二音频帧)时或者每隔一定时长,可以获取当前时间点之前的第二预设时长内接收到的音频帧的时间戳,然后确定时间戳中的最小值(即第五时间戳),并且可以确定时间戳中的最大值(即第六时间戳)。
然后可以确定当前接收到的第二音频帧的时间戳与第五时间戳的差值的绝对值,判断该差值的绝对值与第四预设阈值的关系,如果该差值大于第四预设阈值,可以确定第二音频帧为非法音频帧,可以将第二音频帧删除。或者,可以确定第二音频帧的时间戳与第四时间戳的差值的绝对值,判断该差值的绝对值与第一预设阈值的关系,如果该差值的绝对值大于第四预设阈值,可以确定第二音频帧为非法音频帧,可以将第二音频帧删除。这样,由于短时间内接收到的音频帧的时间戳相差不会特别大,如果特别大,说明是非法音频帧。
可选的,在音频帧丢失后,为了音频帧还可以进行重传,音频帧中还携带有音频帧的时间戳、音频帧的前一个音频帧的时间戳、音频帧的序号以及前一个音频帧之前相邻的连续的预设数目个音频帧的时间戳。
其中,预设数目可以预设,并且存储至根节点中,预设数目取值的最大值可以为20,最小值可以为0,一般可以取5。
在实施中,对于任一音频帧,该音频帧中携带有音频帧的时间戳、该音频帧的前一个音频帧的时间戳、前一个音频帧之前相邻的连续预设数目个音频帧的时间戳、该音频帧的序号(即前面提到的GOP序号)。该音频帧的序号主要用于音频帧的分发。每个音频帧的序号都是一样的,只要接收到该序号的数据,说明是音频帧。
这样,由于音频帧中携带有前一个音频帧的时间戳,所以在该音频帧之前接收到的音频帧的时间戳不是该音频帧中前一个音频帧的时间戳,说明音频帧有丢失,而且基于前一个音频帧之前的预设数目个音频帧的时间戳,可以确定出那些音频帧丢失。例如,预设数目为5,对于某个音频帧a,其中携带的前一个音频帧的时间戳为10秒,已经接收到的音频帧b的时间戳为8秒,说明8秒至10秒之间的音频帧丢失,然后可以基于前一个音频帧之前的预设数目个音频帧的时间戳为9秒30、9秒10、8秒55、8秒25、8秒,所以丢失的音频帧的时间戳为9秒30、9秒10、8秒55、8秒25。
这样,确定出音频帧丢失时,如果节点重传功能未开启,则子节点可以向重传服务器发送音频帧的重传请求,其中,携带有音频帧的时间戳和CDN服务器的URL。重传服务器接收到后,可以基于CDN服务器的URL,找到音频帧,然后在音频帧中确定出该时间戳的音频帧,发送给子节点。
另外,如果节点重传功能开启,则子节点可以向发送该音频帧的节点发送音频帧的重传请求,其中,携带有音频帧的时间戳和CDN服务器的URL。该节点接收到后,可以基于CDN服务器的URL,找到音频帧,然后在音频帧中确定出该时间戳的音频帧,发送给子节点。
可选的,本公开实施例中还提供了子节点切换处理的过程,相应的处理可以如下:
P2P服务器确定在当前时间点之前相邻的第四预设时长内各节点发送数据的数据量;如果目标根节点对应的数据量小于预设数值,则向目标根节点发送子节点切换通知。根节点接收子节点切换通知,如果满足子节点切换条件,则向其它节点订阅子流,并且断开与CDN服务器的连接。
其中,子节点切换条件可以预设,并且存储至根节点中,一般是随着直播应用程序安装在节点上。
在实施中,P2P服务器可以周期性确定在当前时间点之前相邻的第四预设时长内各节点发送数据的数据量,如果某个根节点发送数据的数据量小于预设数值,则可以向该根节点发送子节点切换通知。该根节点可以接收子节点切换通知,然后判断是否满足子节点切换条件,即判断是否可以连接到其它节点,如果可以连接到其它节点,则可以确定满足节点切换条件,可以向其它节点订阅子流,并且可以断开与CDN服务器的连接,即后续不会从CDN服务器获取FLV-整流。然后子节点可以向P2P服务器上报自己切换为子节点的通知。
另外,在判断是否满足节点切换条件时,还可以判断是否可以连接到重传服务器,如果当前节点的重传功能未开启,且不能连接到重传服务器,则不满足子节点切换条件,则不进行子节点切换处理(即不向其它节点订阅子流,也不断开与CDN服务器的连接)。如果当前节点的重传功能开启,则不管是否能够连接到重传服务器,均可以进行子节点切换处理(向其它节点订阅子流,并且断开与CDN服务器的连接)。
可选的,本公开实施例中,还提供了根节点切换的处理过程,相应的处理可以如下:
确定在当前时间点之前相邻的第三预设时长内各节点发送数据的数据量,如果目标子节点对应的数据量大于或等于预设数值,则向目标子节点发送根节点切换通知。子节点接收根节点切换通知,向订阅子流的根节点发送子流退订请求,并且与内容分发网络CDN服务器建立连接,从CDN服务器获取流媒体FLV整流。
其中,预设数值可以预设,并且随直播应用程序一起安装在节点上。
在实施中,P2P服务器可以周期性确定在当前时间点之前相邻的第三预设时长内各节点发送数据的数据量,如果某个子节点(后续可以称为是目标子节点)发送数据的数据量大于或等于预设数值,则可以向目标子节点发送根节点切换通知。目标子节点接收到根节点切换通知之后,可以向订阅子流的根节点发送子流退订请求,并且与CDN服务器建立连接,从CDN服务器获取流媒体FLV整流。目标子节点变为根节点后,可以向P2P服务器上报自己切换为根节点的通知。
另外,本公开实施例中,还提供了音频跳帧的处理方法,相应的处理可以如下:
如果当前时间点距离最后一次播放音频帧的时间点之差达到第六预设阈值,且接收到且未播放的音频帧的数目超过第七预设阈值,则确定接收到的音频帧中时间戳最小音频帧,播放确定出的音频帧。
在实施中,子节点可以确定当前时间点距离最后一次播放音频帧的时间点的差值,如果该差值达到第六预设阈值,则可以确定接收到且未进行播放的音频帧的数目是否超过第七预设阈值,如果超过第七预设阈值,则可以确定接收到的音频帧中时间戳最小的音频帧,播放该时间戳最小的音频帧。这样,在丢帧后也可以继续进行播放音频帧,用户可以继续观看主播的直播视频。
可选的,本公开实施例中,在子节点无法连接到重传服务器,且无法为其他子节点提供子流时,P2P服务器可以控制子节点切换为FLV节点,与CDN服务器建立连接,从CDN服务器获取FLV整流。
可选的,本公开实施例中,如图6所示,还提供了P2P服务器确定总子流数的方法,相应的处理可以如下:
步骤601,P2P服务器获取子节点目标预设时长之内的码率。
在实施中,每次用户使用账户在登录终端(子节点)进行登录,进入直播间后,会与P2P服务器进行连接,P2P服务器可以获取子节点在目标预设时长内的码率。
步骤602,P2P服务器根据码率范围与总子流数的对应关系,确定码率所属的码率范围对应的总子流数。
在实施中,在P2P服务器上预设***率范围与总子流数的对应关系,P2P服务器确定子节点在预设时长内的码率之后,可以获取预设的码率范围与总子流数的对应关系,然后在该对应关系中,确定码率所属的码率范围对应的总子流数,这样,就可以确定该子节点对应的总子流数。
步骤603,P2P服务器向子节点发送总子流数。
在实施中,P2P服务器确定出某个子节点的总子流数之后,可以向该子节点发送该总子流数。
子节点可以接收总子流数,然后确定总子流数个订阅的节点,向这些节点订阅子流,在子流订阅请求中携带总子流数。
另外,本公开实施例中,如图7所示,还提供了FLV节点、根节点和子节点的转换示意图。终端在刚进入直播间时,为FLV节点,P2P服务器将FLV节点指定为子节点或者根节点,服务器在确定子节点切换为根节点时,指定子节点切换为根节点,服务器在确定根节点切换为子节点时,指定根节点切换为子节点,服务器在确定子节点不满足子节点条件时,指定子节点切换为FLV节点。
需要说明的是,上述仅以根节点向子节点推送音频帧和视频帧为例进行说明,实际上子节点在接收到根节点发送的音频帧和视频帧后,也可以向其它子节点发送视频帧中的视频包和音频帧,处理过程和根节点推送的处理过程相同,此处不再赘述。
另外,时间戳和帧内包序号可以一起使用计算机的移位进行表示,将时间戳向左移动32位,即对应64位数据,高32位为时间戳,低32位为帧内包序号。
还需要说明的是,上述仅是以直播间中的音视频流分发为例进行说明,凡是音视频流的分发想使用P2P服务器,均可以使用本公开实施例的处理方式。
本公开实施例中,在推送视频帧时,根节点可以接收CDN服务器发送的流媒体FLV整流,将FLV整流中每个视频帧按照预设长度分为多个视频包,子节点可以向根节点发送子流订阅请求,根节点根据接收到的子流订阅请求,在多个视频包中确定每个子流订阅请求对应的视频包,然后对于每个子流订阅请求,向子流订阅请求所属的子节点发送子流订阅请求对应的视频包。这样,由于仅有根节点从CDN服务器获取视频帧,子节点是从根节点获取视频帧,而不是所有的视频帧均是从CDN服务器进行发送,所以可以节约CDN服务器的数据流量花销。
基于相同的技术构思,本公开实施例还提供了一种根节点,如图8所示,该根节点包括:
接收模块810,用于接收内容分发网络CDN服务器发送的流媒体FLV整流;
拆分模块820,用于将所述FLV整流中每个视频帧按照预设长度分为多个视频包;
确定模块830,用于根据接收到的子流订阅请求,在所述多个视频包中确定每个子流订阅请求对应的视频包;
发送模块840,用于对于每个子流订阅请求,向所述子流订阅请求所属的子节点发送所述子流订阅请求对应的视频包。
可选的,所述拆分模块820,还用于:
将所述FLV整流中每个视频帧按照预设长度分为多个视频包之后,对划分得到的多个视频包依次进行编号且每当划分的视频帧为I帧时,对划分I帧得到的视频包重新进行编号;
所述确定模块830,用于:
根据接收到的子流订阅请求和视频包的编号,在所述多个视频包中确定每个子流订阅请求对应的视频包。
可选的,所述子流订阅请求中携带有子流编号和总子流数;
所述确定模块830,用于:
根据接收到的子流订阅请求中的子流编号、总子流数以及视频包的编号,在所述多个视频包中确定每个子流订阅请求对应的视频包。
可选的,对于每个视频包,所述视频包还携带有所述视频包所属的视频帧的第一时间戳、所述视频包的帧内包序号、所述所属的视频帧的前一帧视频帧的第二时间戳、所述视频包所属的视频帧包含的视频包的数目。
可选的,所述子流订阅请求中携带有子流编号;
所述发送模块840,还用于:
根据接收到的子流订阅请求中的子流编号,如果确定第一子流订阅请求中子流编号是发送音频帧的子流编号,则向所述第一子流订阅请求所属的子节点发送所述FLV整流中的音频帧。
可选的,所述音频帧中还携带有所述音频帧的时间戳、所述音频帧的前一个音频帧的时间戳、音频帧的序号以及所述前一个音频帧之前相邻的连续的预设数目个音频帧的时间戳。
可选的,所述接收模块810,还用于:
接收子节点切换通知;
所述发送模块840,还用于:
如果满足子节点切换条件,则向其它节点订阅子流,并且断开与CDN服务器的连接。
本公开实施例中,在推送视频帧时,根节点可以接收CDN服务器发送的流媒体FLV整流,将FLV整流中每个视频帧按照预设长度分为多个视频包,子节点可以向根节点发送子流订阅请求,根节点根据接收到的子流订阅请求,在多个视频包中确定每个子流订阅请求对应的视频包,然后对于每个子流订阅请求,向子流订阅请求所属的子节点发送子流订阅请求对应的视频包。这样,由于仅有根节点从CDN服务器获取视频帧,子节点是从根节点获取视频帧,而不是所有的视频帧均是从CDN服务器进行发送,所以可以节约CDN服务器的数据流量花销。
基于相同的技术构思,本公开实施例还提供了一种子节点,如图9所示,该子节点包括:
发送模块910,用于向节点发送子流订阅请求,其中,所述子流订阅请求中携带有子流编号和总子流数;
接收模块920,用于接收所述节点根据所述子流订阅请求确定出的视频包,其中,所述视频包是所述节点将视频帧按照预设长度拆分得到,所述视频帧由所述节点接收自内容分发网络CDN服务器;
播放模块930,用于根据接收到的视频包,组成视频流,播放所述视频流。
可选的,对于每个视频包,所述视频包还携带有所述视频包所属的视频帧的第一时间戳、所述视频包的帧内包序号、所述所属的视频帧的前一帧视频帧的第二时间戳、所述视频包所属的视频帧包含的视频包的数目;
所述发送模块910,还用于:
根据接收到的视频包中携带的所述第一时间戳和所述第二时间戳,如果存在未接收到的第一视频帧和/或第一视频包,则当达到重传间隔时,向重传服务器发送重传请求,其中,如果未接收到所述第一视频帧,则所述重传请求中携带所述第一视频帧的第一时间戳,如果未接收到所述第一视频包,则所述重传请求中携带所述第一视频包所属的视频帧的第一时间戳和所述第一视频包的帧内包序号,如果未接收到所述第一视频帧和所述第一视频包,则所述重传请求中携带所述第一视频帧的第一时间戳、所述第一视频包所属的视频帧的第一时间戳和所述第一视频包的帧内包序号。
可选的,所述发送模块910,还用于:
当达到重传间隔时,如果节点重传未启动,则向重传服务器发送重传请求。
可选的,所述发送模块910,还用于:
如果节点重传启动,则向发送所述第一视频包的节点和/或发送所述第一视频帧的节点发送重传请求。
可选的,如图10所示,所述子节点还包括:
第一删除模块940,用于如果当前接收到的第二视频包的时间戳与第三时间戳的差值大于第一预设阈值,或者,当前接收到的第二视频包的时间戳与第四时间戳的差值大于第一预设阈值,则将所述第二视频包删除,其中,所述第三时间戳是当前时间点之前的第一预设时长内接收到的视频包的时间戳的最小值,所述第四时间戳是当前时间点之前的所述第一预设时长内接收到的视频包的时间戳的最大值。
可选的,所述播放模块930,用于:
如果当前时间点与最后一次播放视频流中的视频帧的时间点之差达到第二预设阈值,且接收到未送去播放的视频帧的数目超过第三预设阈值,则确定接收到的视频帧中时间戳最小的I帧;
根据所述I帧的视频包及所述I帧之后的视频帧的视频包,组成视频流,播放所述视频流。
可选的,所述接收模块920,还用于:
接收音频帧;
所述播放模块930,用于:
根据接收到的视频包的帧内包序号和时间戳,将视频包组成视频帧;
根据所述视频帧的时间戳和所述音频帧的时间戳,将所述视频帧和音频帧组成音视频流;
播放所述音视频流。
可选的,如图11所示,所述子节点还包括:
第二删除模块950,用于:
如果当前接收到的第一音频帧的时间戳与第五时间戳的差值大于第四预设阈值,或者,当前接收到的第二音频帧的时间戳与第六时间戳的差值大于第四预设阈值,则将所述第二音频帧删除,其中,所述第五时间戳是当前时间点之前的第二预设时长内接收到的音频帧的时间戳的最小值,所述第六时间戳是当前时间点之前的第二预设时长内接收到的音频帧的时间戳的最大值。
可选的,所述接收模块920,还用于接收根节点切换通知;
所述发送模块910,还用于向订阅子流的根节点发送子流退订请求,并且与内容分发网络CDN服务器建立连接;
所述接收模块920,还用于从所述CDN服务器获取流媒体FLV整流。
可选的,所述接收模块920,还用于:
接收点对点P2P服务器发送的节点列表;
根据与所述节点列表中的节点进行通信,确定所述子流订阅请求发往的节点。
本公开实施例中,在推送视频帧时,根节点可以接收CDN服务器发送的流媒体FLV整流,将FLV整流中每个视频帧按照预设长度分为多个视频包,子节点可以向根节点发送子流订阅请求,根节点根据接收到的子流订阅请求,在多个视频包中确定每个子流订阅请求对应的视频包,然后对于每个子流订阅请求,向子流订阅请求所属的子节点发送子流订阅请求对应的视频包。这样,由于仅有根节点从CDN服务器获取视频帧,子节点是从根节点获取视频帧,而不是所有的视频帧均是从CDN服务器进行发送,所以可以节约CDN服务器的数据流量花销。
基于相同的技术构思,本公开实施例还提供了一种P2P服务器,如图12所示,该P2P服务器包括:
获取模块1210,用于获取子节点目标预设时长之内的码率;
确定模块1220,用于根据码率范围与总子流数的对应关系,确定所述码率所属的码率范围对应的总子流数;
发送模块1230,用于向所述子节点发送所述总子流数,其中,所述总子流数在所述子节点向节点发送子流订阅请求时,被携带在子流订阅请求中,携带在所述子流订阅请求的总子流数用于所述节点确定发送往所述子节点的视频包,所述视频包是所述节点将视频帧按照预设长度拆分得到,所述视频帧由所述节点接收自内容分发网络CDN服务器。
可选的,所述确定模块1220,还用于在与本设备建立连接的终端中随机确定预设数目个根节点;
所述发送模块1230,还用于向确定出为根节点的FLV节点发送根节点切换通知,并向除所述确定为根节点FLV节点之外的其它节点发送子节点切换通知。
可选的,所述确定模块1220,还用于确定在当前时间点之前相邻的第三预设时长内各节点发送数据的数据量;
所述发送模块1230,还用于如果目标子节点对应的数据量大于或等于预设数值,则向所述目标子节点发送根节点切换通知。
可选的,所述确定模块1220,还用于确定在当前时间点之前相邻的第四预设时长内各节点发送数据的数据量;
所述发送模块1230,还用于如果目标根节点对应的数据量小于预设数值,则向所述目标根节点发送子节点切换通知。
本公开实施例中,在推送视频帧时,根节点可以接收CDN服务器发送的流媒体FLV整流,将FLV整流中每个视频帧按照预设长度分为多个视频包,子节点可以向根节点发送子流订阅请求,根节点根据接收到的子流订阅请求,在多个视频包中确定每个子流订阅请求对应的视频包,然后对于每个子流订阅请求,向子流订阅请求所属的子节点发送子流订阅请求对应的视频包。这样,由于仅有根节点从CDN服务器获取视频帧,子节点是从根节点获取视频帧,而不是所有的视频帧均是从CDN服务器进行发送,所以可以节约CDN服务器的数据流量花销。
需要说明的是:上述实施例提供的根节点、子节点和P2P服务器在视频传输时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将根节点、子节点和P2P服务器的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的根节点、子节点和P2P服务器与视频传输的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图13示出了本发明一个示例性实施例提供的终端1300的结构框图。该终端1300可以是:智能手机、平板电脑、MP3播放器(Moving Picture Experts Group Audio LayerIII,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group AudioLayer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端1300还可能被称为用户设备、便携式终端、台式终端等其他名称。通常,终端1300包括有:处理器1301和存储器1302。
处理器1301可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1301可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。
存储器1302可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1302还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,终端1300还可选包括有:***设备接口1303和至少一个***设备。处理器1301、存储器1302和***设备接口1303之间可以通过总线或信号线相连。各个***设备可以通过总线、信号线或电路板与***设备接口1303相连。具体地,***设备包括:射频电路1304、触摸显示屏1305、摄像头1306、音频电路1307、定位组件1308和电源1309中的至少一种。在一些实施例中,终端1300还包括有一个或多个传感器1310。该一个或多个传感器1310包括但不限于:加速度传感器1311、陀螺仪传感器1312、压力传感器1313、指纹传感器1314、光学传感器1315以及接近传感器1316。
本领域技术人员可以理解,图13中示出的结构并不构成对终端1300的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。实际图13所示的终端是上述提到的节点,包括根节点、子节点和FLV节点。
图14是本发明实施例提供的一种P2P服务器的结构示意图,该P2P服务器1400可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessing units,CPU)1401和一个或一个以上的存储器1402,其中,所述存储器1402中存储有至少一条指令,所述至少一条指令由所述处理器1401加载并执行以实现上述视频传输的方法步骤。
可选的,本公开实施例还提供了一种视频传输的***,所述***包括根节点、子节点和点对点P2P服务器,其中:所述根节点用于实现上述视频传输的方法步骤,所述子节点用于实现上述视频传输的方法步骤,所述P2P服务器用于实现上述视频传输的方法步骤。
可选的,本公开实施例还提供了一种节点,所述节点包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现上述视频传输的方法步骤。
可选的,本公开实施例还提供了一种点对点P2P服务器,所述P2P服务器包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现上述视频传输的方法。
可选的,本公开实施例还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现上述的视频传输的方法步骤。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本公开的较佳实施例,并不用以限制本公开,凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

Claims (24)

1.一种视频传输的方法,其特征在于,所述方法包括:
接收内容分发网络CDN服务器发送的流媒体FLV整流;
将所述FLV整流中每个视频帧按照预设长度分为多个视频包;
对划分得到的多个视频包依次进行编号且每当划分的视频帧为I帧时,对划分I帧得到的视频包重新进行编号;
根据接收到的子流订阅请求和视频包的编号,在所述多个视频包中确定每个子流订阅请求对应的视频包,所述子流订阅请求中携带有子流编号和总子流数;
对于每个子流订阅请求,向所述子流订阅请求所属的子节点发送所述子流订阅请求对应的视频包,以便子节点根据接收到的视频包,组成视频流,播放所述视频流;
所述根据接收到的视频包,组成视频流,播放所述视频流,包括:如果当前时间点与最后一次播放视频流中的视频帧的时间点之差达到第二预设阈值,且接收到未送去播放的视频帧的数目超过第三预设阈值,则确定接收到的视频帧中时间戳最小的I帧;根据所述I帧的视频包及所述I帧之后的视频帧的视频包,组成视频流,播放所述视频流;
其中,对于每个视频包,所述视频包还携带有所述视频包所属的视频帧的第一时间戳、所述视频包的帧内包序号、所述所属的视频帧的前一帧视频帧的第二时间戳、所述视频包所属的视频帧包含的视频包的数目,以便子节点对丢失的视频帧中的视频包重传;
所述丢失的视频帧的确定步骤包括:
子节点接收到任意一个视频包后,从所述视频包解析到第一时间戳和第二时间戳,根据所述第一时间戳和所述第二时间戳,建立用于维护时间戳的连续关系的映射表,所述映射表用于记录接收到的视频帧的时间戳;
如果所述映射表中存在未接收到的视频帧,且达到重传间隔时,则所述子节点向重传服务器发送时间戳的连续关系的获取请求,所述获取请求中携带CDN服务器的URL、以及视频帧的时间戳开始不连续的时间戳和时间戳结束不连续的时间戳,以便所述重传服务器接收到所述时间戳的连续关系的获取请求之后,可以确定CDN服务器的URL对应的时间戳的连续关系,从中确定出接收到的两个时间戳之间的时间戳的连续关系,向子节点发送该时间戳的连续关系;
所述子节点接收到所述重传服务器发送的时间戳的连续关系后,在所述映射表中确定出丢失的视频帧的时间戳。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据接收到的子流订阅请求中的子流编号,如果确定第一子流订阅请求中子流编号是发送音频帧的子流编号,则向所述第一子流订阅请求所属的子节点发送所述FLV整流中的音频帧。
3.根据权利要求2所述的方法,其特征在于,所述音频帧中还携带有所述音频帧的时间戳、所述音频帧的前一个音频帧的时间戳、音频帧的序号以及所述前一个音频帧之前相邻的连续的预设数目个音频帧的时间戳。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收子节点切换通知;
如果满足子节点切换条件,则向其它节点订阅子流,并且断开与CDN服务器的连接。
5.一种视频传输的方法,其特征在于,所述方法包括:
向节点发送子流订阅请求,其中,所述子流订阅请求中携带有子流编号和总子流数;
接收所述节点根据所述子流订阅请求和视频包的编号确定出的视频包,其中,所述视频包是所述节点将视频帧按照预设长度拆分并依次进行编号且对划分I帧得到的视频包重新进行编号后得到的,所述视频帧由所述节点接收自内容分发网络CDN服务器;
根据接收到的视频包,组成视频流,播放所述视频流,包括:如果当前时间点与最后一次播放视频流中的视频帧的时间点之差达到第二预设阈值,且接收到未送去播放的视频帧的数目超过第三预设阈值,则确定接收到的视频帧中时间戳最小的I帧;根据所述I帧的视频包及所述I帧之后的视频帧的视频包,组成视频流,播放所述视频流;
对于每个视频包,所述视频包还携带有所述视频包所属的视频帧的第一时间戳、所述视频包的帧内包序号、所述所属的视频帧的前一帧视频帧的第二时间戳、所述视频包所属的视频帧包含的视频包的数目,以便对丢失的视频帧中的视频包重传;
所述丢失的视频帧的确定步骤包括:
接收到任意一个视频包后,从所述视频包解析到第一时间戳和第二时间戳,根据所述第一时间戳和所述第二时间戳,建立用于维护时间戳的连续关系的映射表,所述映射表用于记录接收到的视频帧的时间戳;
如果所述映射表中存在未接收到的视频帧,且达到重传间隔时,则向重传服务器发送时间戳的连续关系的获取请求,所述获取请求中携带CDN服务器的URL、以及视频帧的时间戳开始不连续的时间戳和时间戳结束不连续的时间戳,以便所述重传服务器接收到所述时间戳的连续关系的获取请求之后,可以确定CDN服务器的URL对应的时间戳的连续关系,从中确定出接收到的两个时间戳之间的时间戳的连续关系,向子节点发送该时间戳的连续关系;
接收到所述重传服务器发送的时间戳的连续关系后,在所述映射表中确定出丢失的视频帧的时间戳。
6.根据权利要求5所述的方法,其特征在于,
所述方法还包括:
根据接收到的视频包中携带的所述第一时间戳和所述第二时间戳,如果存在未接收到的第一视频帧和/或第一视频包,则当达到重传间隔时,向重传服务器发送重传请求,其中,如果未接收到所述第一视频帧,则所述重传请求中携带所述第一视频帧的第一时间戳,如果未接收到所述第一视频包,则所述重传请求中携带所述第一视频包所属的视频帧的第一时间戳和所述第一视频包的帧内包序号,如果未接收到所述第一视频帧和所述第一视频包,则所述重传请求中携带所述第一视频帧的第一时间戳、所述第一视频包所属的视频帧的第一时间戳和所述第一视频包的帧内包序号。
7.根据权利要求6所述的方法,其特征在于,所述当达到重传间隔时,向重传服务器发送重传请求,包括:
当达到重传间隔时,如果节点重传未启动,则向重传服务器发送重传请求。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
如果节点重传启动,则向发送所述第一视频包的节点和/或发送所述第一视频帧的节点发送重传请求。
9.根据权利要求5所述的方法,其特征在于,所述方法还包括:
如果当前接收到的第二视频包的时间戳与第三时间戳的差值的绝对值大于第一预设阈值,或者,当前接收到的第二视频包的时间戳与第四时间戳的差值的绝对值大于第一预设阈值,则将所述第二视频包删除,其中,所述第三时间戳是当前时间点之前的第一预设时长内接收到的视频包的时间戳的最小值,所述第四时间戳是当前时间点之前的所述第一预设时长内接收到的视频包的时间戳的最大值。
10.根据权利要求5所述的方法,其特征在于,所述方法还包括:
接收音频帧;
所述根据接收到的视频包,组成视频流,播放所述视频流,包括:
根据接收到的视频包的帧内包序号和时间戳,将视频包组成视频帧;
根据所述视频帧的时间戳和所述音频帧的时间戳,将所述视频帧和音频帧组成音视频流;
播放所述音视频流。
11.根据权利要求5所述的方法,其特征在于,所述方法还包括:
如果当前接收到的第一音频帧的时间戳与第五时间戳的差值的绝对值大于第四预设阈值,或者,当前接收到的第二音频帧的时间戳与第六时间戳的差值的绝对值大于第四预设阈值,则将所述第二音频帧删除,其中,所述第五时间戳是当前时间点之前的第二预设时长内接收到的音频帧的时间戳的最小值,所述第六时间戳是当前时间点之前的第二预设时长内接收到的音频帧的时间戳的最大值。
12.根据权利要求5所述的方法,其特征在于,所述方法还包括:
接收根节点切换通知;
向订阅子流的根节点发送子流退订请求,并且与内容分发网络CDN服务器建立连接;
从所述CDN服务器获取流媒体FLV整流。
13.根据权利要求5所述的方法,其特征在于,所述方法还包括:
接收点对点P2P服务器发送的节点列表;
根据与所述节点列表中的节点进行通信,确定所述子流订阅请求发往的节点。
14.一种视频传输的方法,其特征在于,所述方法包括:
获取子节点目标预设时长之内的码率;
根据码率范围与总子流数的对应关系,确定所述码率所属的码率范围对应的总子流数;
向所述子节点发送所述总子流数,以便所述子节点接收节点根据子流订阅请求和视频包的编号确定出的视频包,根据接收到的视频包,组成视频流,播放所述视频流;
其中,所述总子流数在所述子节点向节点发送子流订阅请求时,被携带在子流订阅请求中,携带在所述子流订阅请求的总子流数用于所述节点确定发送往所述子节点的视频包,所述视频包是所述节点将视频帧按照预设长度拆分并依次进行编号且对划分I帧得到的视频包重新进行编号后得到的,所述视频帧由所述节点接收自内容分发网络CDN服务器,所述视频包还携带有所述视频包所属的视频帧的第一时间戳、所述视频包的帧内包序号、所述所属的视频帧的前一帧视频帧的第二时间戳、所述视频包所属的视频帧包含的视频包的数目,以便子节点对丢失的视频帧中的视频包重传;
所述根据接收到的视频包,组成视频流,播放所述视频流,包括:如果当前时间点与最后一次播放视频流中的视频帧的时间点之差达到第二预设阈值,且接收到未送去播放的视频帧的数目超过第三预设阈值,则确定接收到的视频帧中时间戳最小的I帧;根据所述I帧的视频包及所述I帧之后的视频帧的视频包,组成视频流,播放所述视频流;
所述丢失的视频帧的确定步骤包括:
子节点接收到任意一个视频包后,从所述视频包解析到第一时间戳和第二时间戳,根据所述第一时间戳和所述第二时间戳,建立用于维护时间戳的连续关系的映射表,所述映射表用于记录接收到的视频帧的时间戳;
如果所述映射表中存在未接收到的视频帧,且达到重传间隔时,则所述子节点向重传服务器发送时间戳的连续关系的获取请求,所述获取请求中携带CDN服务器的URL、以及视频帧的时间戳开始不连续的时间戳和时间戳结束不连续的时间戳,以便所述重传服务器接收到所述时间戳的连续关系的获取请求之后,可以确定CDN服务器的URL对应的时间戳的连续关系,从中确定出接收到的两个时间戳之间的时间戳的连续关系,向子节点发送该时间戳的连续关系;
所述子节点接收到所述重传服务器发送的时间戳的连续关系后,在所述映射表中确定出丢失的视频帧的时间戳。
15.根据权利要求14所述的方法,其特征在于,所述方法还包括:
在与本设备建立连接的流媒体FLV节点中随机确定预设数目个根节点;
向确定出为根节点的FLV节点发送根节点切换通知,并向除所述确定为根节点的FLV节点之外的其它节点发送子节点切换通知。
16.根据权利要求15所述的方法,其特征在于,所述方法还包括:
确定在当前时间点之前相邻的第三预设时长内各节点发送数据的数据量;
如果目标子节点对应的数据量大于或等于预设数值,则向所述目标子节点发送根节点切换通知。
17.根据权利要求15或16所述的方法,其特征在于,所述方法还包括:
确定在当前时间点之前相邻的第四预设时长内各节点发送数据的数据量;
如果目标根节点对应的数据量小于预设数值,则向所述目标根节点发送子节点切换通知。
18.一种视频传输的根节点,其特征在于,所述根节点包括:
接收模块,用于接收内容分发网络CDN服务器发送的流媒体FLV整流;
拆分模块,用于将所述FLV整流中每个视频帧按照预设长度分为多个视频包,对划分得到的多个视频包依次进行编号且每当划分的视频帧为I帧时,对划分I帧得到的视频包重新进行编号;
确定模块,用于根据接收到的子流订阅请求和视频包编号,在所述多个视频包中确定每个子流订阅请求对应的视频包,所述子流订阅请求中携带有子流编号和总子流数;
发送模块,用于对于每个子流订阅请求,向所述子流订阅请求所属的子节点发送所述子流订阅请求对应的视频包,以便子节点根据接收到的视频包,组成视频流,播放所述视频流;
所述根据接收到的视频包,组成视频流,播放所述视频流,包括:如果当前时间点与最后一次播放视频流中的视频帧的时间点之差达到第二预设阈值,且接收到未送去播放的视频帧的数目超过第三预设阈值,则确定接收到的视频帧中时间戳最小的I帧;根据所述I帧的视频包及所述I帧之后的视频帧的视频包,组成视频流,播放所述视频流;
其中,对于每个视频包,所述视频包还携带有所述视频包所属的视频帧的第一时间戳、所述视频包的帧内包序号、所述所属的视频帧的前一帧视频帧的第二时间戳、所述视频包所属的视频帧包含的视频包的数目,以便子节点对丢失的视频帧中的视频包重传;
所述丢失的视频帧的确定步骤包括:
子节点接收到任意一个视频包后,从所述视频包解析到第一时间戳和第二时间戳,根据所述第一时间戳和所述第二时间戳,建立用于维护时间戳的连续关系的映射表,所述映射表用于记录接收到的视频帧的时间戳;
如果所述映射表中存在未接收到的视频帧,且达到重传间隔时,则所述子节点向重传服务器发送时间戳的连续关系的获取请求,所述获取请求中携带CDN服务器的URL、以及视频帧的时间戳开始不连续的时间戳和时间戳结束不连续的时间戳,以便所述重传服务器接收到所述时间戳的连续关系的获取请求之后,可以确定CDN服务器的URL对应的时间戳的连续关系,从中确定出接收到的两个时间戳之间的时间戳的连续关系,向子节点发送该时间戳的连续关系;
所述子节点接收到所述重传服务器发送的时间戳的连续关系后,在所述映射表中确定出丢失的视频帧的时间戳。
19.一种视频传输的子节点,其特征在于,所述子节点包括:
发送模块,用于向节点发送子流订阅请求,其中,所述子流订阅请求中携带有子流编号和总子流数;
接收模块,用于接收所述节点根据所述子流订阅请求和视频包的编号确定出的视频包,其中,所述视频包是所述节点将视频帧按照预设长度拆分并依次进行编号且对划分I帧得到的视频包重新进行编号后得到的,所述视频帧由所述节点接收自内容分发网络CDN服务器;
播放模块,用于根据接收到的视频包,组成视频流,播放所述视频流,包括:如果当前时间点与最后一次播放视频流中的视频帧的时间点之差达到第二预设阈值,且接收到未送去播放的视频帧的数目超过第三预设阈值,则确定接收到的视频帧中时间戳最小的I帧;根据所述I帧的视频包及所述I帧之后的视频帧的视频包,组成视频流,播放所述视频流;
对于每个视频包,所述视频包还携带有所述视频包所属的视频帧的第一时间戳、所述视频包的帧内包序号、所述所属的视频帧的前一帧视频帧的第二时间戳、所述视频包所属的视频帧包含的视频包的数目,以便对丢失的视频帧中的视频包重传;
所述丢失的视频帧的确定步骤包括:
接收到任意一个视频包后,从所述视频包解析到第一时间戳和第二时间戳,根据所述第一时间戳和所述第二时间戳,建立用于维护时间戳的连续关系的映射表,所述映射表用于记录接收到的视频帧的时间戳;
如果所述映射表中存在未接收到的视频帧,且达到重传间隔时,则所述子节点向重传服务器发送时间戳的连续关系的获取请求,所述获取请求中携带CDN服务器的URL、以及视频帧的时间戳开始不连续的时间戳和时间戳结束不连续的时间戳,以便所述重传服务器接收到所述时间戳的连续关系的获取请求之后,可以确定CDN服务器的URL对应的时间戳的连续关系,从中确定出接收到的两个时间戳之间的时间戳的连续关系,向子节点发送该时间戳的连续关系;
接收到所述重传服务器发送的时间戳的连续关系后,在所述映射表中确定出丢失的视频帧的时间戳。
20.一种视频传输的点对点P2P服务器,其特征在于,所述P2P服务器包括:
获取模块,用于获取子节点目标预设时长之内的码率;
确定模块,用于根据码率范围与总子流数的对应关系,确定所述码率所属的码率范围对应的总子流数;
发送模块,用于向所述子节点发送所述总子流数,以便所述子节点接收节点根据子流订阅请求和视频包编号确定出的视频包,根据接收到的视频包,组成视频流,播放所述视频流;其中,所述总子流数在所述子节点向节点发送子流订阅请求时,被携带在子流订阅请求中,携带在所述子流订阅请求的总子流数用于所述节点确定发送往所述子节点的视频包,所述视频包是所述节点将视频帧按照预设长度拆分并依次进行编号且对划分I帧得到的视频包重新进行编号后得到的,所述视频帧由所述节点接收自内容分发网络CDN服务器,所述视频包还携带有所述视频包所属的视频帧的第一时间戳、所述视频包的帧内包序号、所述所属的视频帧的前一帧视频帧的第二时间戳、所述视频包所属的视频帧包含的视频包的数目,以便子节点对丢失的视频帧中的视频包重传;
所述根据接收到的视频包,组成视频流,播放所述视频流,包括:如果当前时间点与最后一次播放视频流中的视频帧的时间点之差达到第二预设阈值,且接收到未送去播放的视频帧的数目超过第三预设阈值,则确定接收到的视频帧中时间戳最小的I帧;根据所述I帧的视频包及所述I帧之后的视频帧的视频包,组成视频流,播放所述视频流;
所述丢失的视频帧的确定步骤包括:
子节点接收到任意一个视频包后,从所述视频包解析到第一时间戳和第二时间戳,根据所述第一时间戳和所述第二时间戳,建立用于维护时间戳的连续关系的映射表,所述映射表用于记录接收到的视频帧的时间戳;
如果所述映射表中存在未接收到的视频帧,且达到重传间隔时,则所述子节点向重传服务器发送时间戳的连续关系的获取请求,所述获取请求中携带CDN服务器的URL、以及视频帧的时间戳开始不连续的时间戳和时间戳结束不连续的时间戳,以便所述重传服务器接收到所述时间戳的连续关系的获取请求之后,可以确定CDN服务器的URL对应的时间戳的连续关系,从中确定出接收到的两个时间戳之间的时间戳的连续关系,向子节点发送该时间戳的连续关系;
所述子节点接收到所述重传服务器发送的时间戳的连续关系后,在所述映射表中确定出丢失的视频帧的时间戳。
21.一种视频传输的***,其特征在于,所述***包括根节点、子节点和点对点P2P服务器,其中:
所述根节点,如上述权利要求18所述的根节点;
所述子节点,如上述权利要求19所述的子节点;
所述P2P服务器,如上述权利要求20所述的P2P服务器。
22.一种终端,其特征在于,所述终端包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如权利要求1至13任一所述的视频传输的方法。
23.一种点对点P2P服务器,其特征在于,所述P2P服务器包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如权利要求14至17任一所述的视频传输的方法。
24.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现如权利要求1至17任一所述的视频传输的方法。
CN201910234475.XA 2019-03-26 2019-03-26 视频传输的方法、根节点、子节点、p2p服务器和*** Active CN109889543B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201910234475.XA CN109889543B (zh) 2019-03-26 2019-03-26 视频传输的方法、根节点、子节点、p2p服务器和***
PCT/CN2019/120024 WO2020192152A1 (zh) 2019-03-26 2019-11-21 视频传输的方法、根节点、子节点、p2p服务器和***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910234475.XA CN109889543B (zh) 2019-03-26 2019-03-26 视频传输的方法、根节点、子节点、p2p服务器和***

Publications (2)

Publication Number Publication Date
CN109889543A CN109889543A (zh) 2019-06-14
CN109889543B true CN109889543B (zh) 2020-11-13

Family

ID=66934576

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910234475.XA Active CN109889543B (zh) 2019-03-26 2019-03-26 视频传输的方法、根节点、子节点、p2p服务器和***

Country Status (2)

Country Link
CN (1) CN109889543B (zh)
WO (1) WO2020192152A1 (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109889543B (zh) * 2019-03-26 2020-11-13 广州华多网络科技有限公司 视频传输的方法、根节点、子节点、p2p服务器和***
CN110493327B (zh) * 2019-08-05 2022-06-10 网宿科技股份有限公司 一种数据传输方法及装置
CA3096103A1 (en) * 2019-10-14 2021-04-14 Sandvine Corporation System and method for monitoring and managing video stream content
CN111343475B (zh) * 2020-03-04 2022-04-15 广州虎牙科技有限公司 数据处理方法和装置、直播服务器及存储介质
CN111669610B (zh) * 2020-05-27 2022-08-05 北京奇艺世纪科技有限公司 直播视频的传输方法、***、装置、服务器、电子设备及存储介质
CN111988674A (zh) * 2020-08-18 2020-11-24 广州极飞科技有限公司 一种多媒体数据传输方法、装置、设备及存储介质
CN112261418B (zh) * 2020-09-18 2022-09-30 网宿科技股份有限公司 一种传输直播视频数据的方法和直播加速***
CN112437346A (zh) * 2020-11-04 2021-03-02 央视国际网络无锡有限公司 一种判断视频文件是否完整的方法
CN114697610B (zh) * 2020-12-30 2023-08-18 成都鼎桥通信技术有限公司 视频传输方法及电子设备
CN112770122B (zh) * 2020-12-31 2022-10-14 上海网达软件股份有限公司 一种在云导播台视频同步的方法及***
CN112969075A (zh) * 2021-01-29 2021-06-15 北京字节跳动网络技术有限公司 直播过程中的补帧方法、装置及计算设备
CN112967142A (zh) * 2021-03-31 2021-06-15 上海英方软件股份有限公司 一种行情信息流的转发方法及装置
CN113242113A (zh) * 2021-04-30 2021-08-10 北京汇钧科技有限公司 数据传输控制方法、装置、电子设备及存储介质
CN114567638B (zh) * 2022-02-14 2023-09-01 珠海迈科智能科技股份有限公司 一种根据节点实际网络动态调整分享策略的方法
CN114821936A (zh) * 2022-03-21 2022-07-29 慧之安信息技术股份有限公司 基于边缘计算的违法犯罪行为检测方法和装置
CN114499777B (zh) * 2022-04-15 2022-07-22 四川腾盾科技有限公司 一种集群无人***数据传输方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101959054A (zh) * 2009-07-14 2011-01-26 中国电信股份有限公司 集中式对等点播***和伙伴节点选择方法
CN104967866A (zh) * 2015-05-13 2015-10-07 浙江树人大学 一种动态自适应的p2p直播流媒体子流调度方法
CN105338421A (zh) * 2014-08-05 2016-02-17 深圳国微技术有限公司 一种hls流媒体传输方法及装置
CN105792021A (zh) * 2014-12-26 2016-07-20 乐视网信息技术(北京)股份有限公司 一种视频流的传输方法及装置
CN109348243A (zh) * 2018-11-14 2019-02-15 广州虎牙信息科技有限公司 订阅处理的方法、装置及直播***
CN109348257A (zh) * 2018-11-14 2019-02-15 广州虎牙信息科技有限公司 拉流控制方法、装置及直播***

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8051161B2 (en) * 2008-12-08 2011-11-01 Microsoft Corporation Peer-to-peer (P2P) streaming overlay construction and optimization
KR20150041253A (ko) * 2013-10-07 2015-04-16 한국전자통신연구원 디지털 디스플레이 단말, 컨텐츠 서버, 및 컨텐츠 송수신 방법
CN104735044A (zh) * 2014-11-18 2015-06-24 深圳市同洲电子股份有限公司 一种流媒体直播方法及***
CN106649855B (zh) * 2016-12-30 2019-06-21 中广热点云科技有限公司 一种视频标签的添加方法和添加***
CN108696773B (zh) * 2017-04-11 2021-03-09 苏州谦问万答吧教育科技有限公司 一种实时视频的传输方法及装置
CN107426629B (zh) * 2017-06-19 2020-06-23 网宿科技股份有限公司 一种流媒体文件处理方法及直播***
CN109474684B (zh) * 2018-11-14 2021-04-27 广州虎牙信息科技有限公司 一种获取直播视频流的方法、装置、终端设备及存储介质
CN109510868B (zh) * 2018-11-14 2021-01-22 广州虎牙信息科技有限公司 一种建立p2p网络的方法、装置、终端设备及存储介质
CN109889543B (zh) * 2019-03-26 2020-11-13 广州华多网络科技有限公司 视频传输的方法、根节点、子节点、p2p服务器和***

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101959054A (zh) * 2009-07-14 2011-01-26 中国电信股份有限公司 集中式对等点播***和伙伴节点选择方法
CN105338421A (zh) * 2014-08-05 2016-02-17 深圳国微技术有限公司 一种hls流媒体传输方法及装置
CN105792021A (zh) * 2014-12-26 2016-07-20 乐视网信息技术(北京)股份有限公司 一种视频流的传输方法及装置
CN104967866A (zh) * 2015-05-13 2015-10-07 浙江树人大学 一种动态自适应的p2p直播流媒体子流调度方法
CN109348243A (zh) * 2018-11-14 2019-02-15 广州虎牙信息科技有限公司 订阅处理的方法、装置及直播***
CN109348257A (zh) * 2018-11-14 2019-02-15 广州虎牙信息科技有限公司 拉流控制方法、装置及直播***

Also Published As

Publication number Publication date
CN109889543A (zh) 2019-06-14
WO2020192152A1 (zh) 2020-10-01

Similar Documents

Publication Publication Date Title
CN109889543B (zh) 视频传输的方法、根节点、子节点、p2p服务器和***
CN107810624B (zh) 用于检索媒体数据的方法、设备和计算机可读存储介质
US9973345B2 (en) Calculating and signaling segment availability times for segments of media data
CN107135417B (zh) 一种hls协议的投屏方法及***
US11405699B2 (en) Using GLTF2 extensions to support video and audio data
JP5588517B2 (ja) データセグメントのオプションのブロードキャスト配信によるストリーミング
US7587507B2 (en) Media recording functions in a streaming media server
US20160337424A1 (en) Transferring media data using a websocket subprotocol
CN107819809B (zh) 对内容进行同步操作的方法及装置
CN111837403B (zh) 处理用于以流传送媒体数据的交互性事件
WO2016049987A1 (zh) 一种数据处理方法、装置及相关服务器
US20070008969A1 (en) Apparatuses and methods for delivering data stream content to consumer devices
EP1806870B1 (en) Method for providing data and data transmission system
KR20160110424A (ko) Dash의 강건한 라이브 동작
CN112616065A (zh) 一种屏幕镜像发起方法、装置、计算机设备、可读存储介质及屏幕镜像呈现***
CN109756744B (zh) 数据处理方法、电子设备及计算机存储介质
CN114245153B (zh) 切片方法、装置、设备及可读存储介质
US9635082B2 (en) Method of saving content to a file on a server and corresponding device
US8811478B2 (en) Data transmission method and apparatus
CN101389010B (zh) 播放器以及播放方法
JP2009077108A (ja) 受信装置、受信方法およびコンピュータプログラム
WO2018012591A1 (ja) アプリケーション層マルチキャスト配信方法
CN113473162B (zh) 一种媒体流的播放方法、装置、设备和计算机存储介质
WO2011022983A1 (zh) 组播视频数据的方法、装置及***
JP2022550528A (ja) 適応ビットレートマルチキャストのための修復機構

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
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20190614

Assignee: GUANGZHOU CUBESILI INFORMATION TECHNOLOGY Co.,Ltd.

Assignor: GUANGZHOU HUADUO NETWORK TECHNOLOGY Co.,Ltd.

Contract record no.: X2021980000101

Denomination of invention: Video transmission method, root node, sub node, P2P server and system

Granted publication date: 20201113

License type: Common License

Record date: 20210106

EE01 Entry into force of recordation of patent licensing contract