一种流媒体传输方法、系统、装置、设备及介质与流程

未命名 07-12 阅读:100 评论:0


1.本技术涉及计算机技术领域,具体涉及到一种流媒体传输方法、系统、装置、设备及介质。


背景技术:

2.随着无线网络技术的发展,人们对无线网络下的流媒体的依赖性和要求越来越高。使用用户数据报协议(user datagram protocol,udp)作为流媒体传输协议能够有效降低音视频播放延迟,但是udp在复杂网络环境下容易出现丢包。为应对丢包问题,现有技术给出了基于udp协议的可靠传输策略,可以对丢失的数据包进行重传。
3.然而,现有的udp协议层的可靠传输并不能识别流媒体的具体内容,因而会公平地对所有数据都进行重传,如果在网络较差的情况下,视频关键帧的某个分片数据包一直无法重传成功,则会导致接收端在接收到其后的数据包时仍然无法处理该帧数据,长此以往则会表现为流媒体播放延迟增大、花屏,更严重时会出现卡顿,导致用户体验差。


技术实现要素:

4.本技术实施例提供一种流媒体传输系统、方法、装置、设备及介质,用于提高流媒体数据重传的可靠性,改善播放流媒体时出现延时、卡顿、花屏等问题,提高用户体验。
5.第一方面,本技术实施例提供一种流媒体传输方法,应用于发送端,包括:
6.创建重传队列和至少一个新传队列;其中,所述重传队列中用于发送已向接收端发送过的数据包,所述至少一个新传队列用于发送未向所述接收端发送过的数据包;
7.基于所述至少一个新传队列向所述接收端发送第一流媒体数据;
8.在收到来自所述接收端的重传指示之后,当所述重传队列和所述至少一个新传队列中均存在数据包时,优先基于所述重传队列向所述接收端发送第二流媒体数据,所述第一流媒体数据包括所述第二流媒体数据;在所述重传队列为空后,基于所述至少一个新传队列向所述接收端发送第三流媒体数据。
9.在本方案中,当发送端需要向接收端发送新传的数据与重传的数据时,优先基于重传队列发送重传的数据,当重传队列为空后,再基于至少一个新传队列发送新传的数据,如此可以保证接收端优先接收到重传的数据,提高了流媒体数据重传的可靠性,降低了接收端播放流媒体时出现延时、卡顿、花屏等现象的可能性,使得接收端可以及时播放流媒体,并且提高了用户体验。
10.可选的,所述至少一个新传队列包括:音频发送队列和视频帧发送队列,所述音频发送队列用于发送音频帧数据包,所述视频发送队列用于发送视频帧数据包;所述方法包括:当所述音频发送队列与所述视频帧发送队列中均存在数据包时,优先基于所述音频发送队列向所述接收端发送流媒体数据;在所述音频发送队列为空后,基于所述视频帧发送队列向所述接收端发送流媒体数据。
11.通过本方式,由于在诸如智慧停车场、智能报警等场景中,客服中心的工作人员可
以获得用户的视频画面与声音,在该过程中需要保证音频流的实时性,因此在发送端发送数据包时,按照音频发送队列、视频帧发送队列的顺序依次发送各队列中的数据,可以尽可能降低声音延时,提高用户音频收听体验。
12.可选的,所述视频帧发送队列包括:视频关键帧发送队列和视频非关键帧发送队列,所述视频关键帧发送队列用于发送视频关键帧数据包,所述视频非关键帧队列用于发送视频非关键帧数据包;所述发送所述视频帧发送队列中的数据包,包括:当所述视频关键帧发送队列和视频非关键帧发送队列均存在数据包时,优先基于所述视频关键帧发送队列向所述接收端发送流媒体数据;在所述视频关键帧发送队列为空后,基于所述视频非关键帧发送队列向所述接收端发送流媒体数据。
13.通过本方式,由于对于一个视频关键帧,与其关联的视频非关键帧都要依靠该视频关键帧进行编码与解码,所以视频帧中视频关键帧相较于视频非关键帧更重要,所以优先基于视频关键帧发送队列向接收端发送流媒体数据可以降低视频图像卡顿的可能性,提高了方案的可靠性。
14.可选的,所述发送端保存有缓存队列,所述缓冲队列中保存有若干数据包;在所述基于所述至少一个新传队列向所述接收端发送第一流媒体数据之前,还包括:从所述缓冲队列中复制多个未传输过的数据包,组成所述第一流媒体数据,将所述第一流媒体数据存入所述至少一个新传队列中;在所述基于所述至少一个新传队列向所述接收端发送第一流媒体数据之后,还包括:从所述缓冲队列中复制多个未传输过的数据包,组成所述第三流媒体数据,将所述第三流媒体数据存入所述至少一个新传队列中;在所述收到来自所述接收端的重传指示之后,在所述优先基于所述重传队列向所述接收端发送第二流媒体数据之前,还包括:根据所述重传指示从所述缓冲队列中复制传输过的数据包,组成所述第二流媒体数据,将所述第二流媒体数据存入所述重传队列中。
15.通过本方式,缓冲队列中保存了待发送的数据包,发送端不仅可以从缓冲队列中复制未传输的数据包,还可以从缓冲队列中复制传输过的数据包组成重传数据,为发送端重传数据包提供保障,提高方案的可靠性。
16.可选的,所述方法还包括:向所述接收端发送网络探测包;接收来自所述接收端的响应包;根据从发送所述网络探测包的时刻到接收所述响应包的时刻的时长确定所述发送端与所述接收端之间的往返时延(round-trip time,rtt),根据所述rtt调整所述缓冲队列的大小。
17.通过本方式,发送端可以根据向接收端发送网络探测包与接收来自接收端的响应包确定发送端与接收端之间的rtt,根据rtt调整缓冲队列的大小,例如在网络状况较好时,缓冲队列较小,网络状况较差时,缓冲队列较大,保正发送端总是可以在缓冲队列中找到重传数据,缓冲队列可以满足当前网络状况下的重传需求,如此可以有效提高缓冲队列的利用率,提高方案的完整性。
18.可选的,所述方法还包括:当所述重传队列和所述至少一个新传队列存在数据包时,若接收到来自所述接收端的指示信息,则基于所述至少一个新传队列向所述接收端发送第三流媒体数据并清空所述重传队列;其中,所述指示信息用于指示所述发送端继续新传,所述第三流媒体数据的关键帧为所述第一流媒体数据的关键帧的下一个关键帧。
19.通过本方式,发送端可以根据来自接收端的指示信息继续新传,可以使得接收端
接收的数据具有较好的实时性。
20.第二方面,本技术实施例提供一种流媒体传输方法,应用于接收端,包括:
21.接收第四流媒体数据,所述第四流媒体数据是第一流媒体数据经由传输通道传输后形成的流媒体数据;
22.处理所述第四流媒体数据,确定所述第一流媒体数据中丢失的数据包;
23.向所述发送端发送重传指示,所述重传指示中包括所述丢失的数据包的标识;
24.接收来自所述发送端的第五流媒体数据,所述第五流媒体数据是第二流媒体数据经由所述传输通道传输后形成的流媒体数据;所述第二流媒体数据根据所述重传指示确定,所述第一流媒体数据包括所述第二流媒体数据;
25.在收到所述第五流媒体数据之后,接收来自所述发送端的第六流媒体数据,所述第六流媒体数据是第三流媒体数据经由所述传输通道传输后形成的流媒体数据。
26.在本方案中,接收端可以优先接收到重传的数据,再接收新传的数据,并且重传的数据是先前接收的数据中丢失的数据,如此降低了接收端播放流媒体时出现延时、卡顿、花屏等现象的可能性,使得接收端可以及时播放流媒体,并且提高了用户体验。
27.可选的,所述处理所述第四流媒体数据,确定所述第一流媒体数据中丢失的数据包,包括:将所述第一流媒体数据中丢失的数据包的标识存储在丢包队列中;所述向所述发送端发送重传指示,包括:按照设定的时间间隔,周期性地检查所述丢包队列;在每个周期内,如果所述丢包队列中存在数据包的标识,则基于所述丢包队列中的数据包的标识向所述发送端发送重传指示。
28.通过本方式,接收端周期性的检查丢包队列,每个周期内检测到丢包队列中存在数据包的标识时,会向发送端发送重传指示,若接收端一直未接收到某个数据包,该数据包的标识会一直存在丢包队列中,接收端每次检查丢包队列时,都会向发送端发送针对该数据包的重传指示,即接收端可以向发送端发送针对一个数据包的多次重传指示,提高了接收端收到丢失的数据包的可能性,降低了接收端播放流媒体时出现延时、卡顿、花屏等现象的可能性,进一步提高了方案的可靠性。
29.可选的,所述处理所述第四流媒体数据,确定所述第一流媒体数据中丢失的数据包,还包括:
30.确定所述第四流媒体数据中不连续的数据包,将所述第四流媒体数据中不连续的数据包存入乱序队列中;
31.所述方法还包括:
32.当满足预设条件时,清空所述乱序队列中的数据包;
33.所述预设条件包括以下一项或多项:
34.所述丢包队列中记录的数据包的丢失时间超过预设时间;或者,
35.所述丢包队列中记录的数据包的重传次数超过预设次数;或者,
36.所述乱序队列中保存的数据包的大小超过预设容量。
37.通过本方式,当数据包的丢失时间超过预设时间时可以视为接收端已经出现了延迟与卡顿的现象,当数据包的重传次数超过预设次数时可以视为数据包出错,接收端难以通过发送端的重传获得数据包,在这两种情况下即使接收端之后接收到第一流媒体数据中丢失的数据包,接收端播放的数据也会失去实时性,因此接收端清空乱序队列中的数据包
可以避免第一流媒体数据中的数据包占用乱序队列,提高乱序队列的利用率。当乱序队列中保存的数据包的大小超过预设容量时可以视为接收端已经无法继续接收新的不连续的数据包。接收端清空乱序队列中的数据包可以释放接收端的存储空间,为后续接收数据包提供存储空间,提高了方案的完整性。
38.可选的,在所述清空所述乱序队列中的数据包之后,在所述接收来自所述发送端的第六流媒体数据之前,还包括:
39.向所述发送端发送指示信息,所述指示信息用于请求所述发送端指示所述发送端继续新传。
40.通过本方式,接收端在清空乱序队列中的数据包之后,向发送端发送指示信息,发送端继续新传可以使接收端接收的数据可以有较好的实时性,降低接收端播放流媒体时出现延时的可能性。第三方面,本技术提供一种流媒体数据传输系统,所述系统包括发送端与接收端,所述发送端和所述接收端通过传输通道连接;
41.所述发送端用于:创建重传队列和至少一个新传队列;其中,所述重传队列用于发送已向接收端发送过的数据包,所述至少一个新传队列用于发送未向所述接收端发送过的数据包;基于所述至少一个新传队列向所述接收端发送第一流媒体数据;
42.所述接收端用于:接收第四流媒体数据,所述第四流媒体数据是所述第一流媒体数据经由传输通道传输后形成的流媒体数据;处理所述第四流媒体数据,确定所述第一流媒体数据中丢失的数据包;向所述发送端发送重传指示,所述重传指示中包括所述丢失的数据包的标识;
43.所述发送端用于:在收到来自所述接收端的重传指示之后,当所述重传队列和所述至少一个新传队列中均存在数据包时,优先基于所述重传队列向所述接收端发送第二流媒体数据,所述第一流媒体数据包括所述第二流媒体数据;在所述重传队列为空后,基于所述至少一个新传队列向所述接收端发送第三流媒体数据;
44.所述接收端用于:接收来自所述发送端的第五流媒体数据,所述第五流媒体数据是第二流媒体数据经由所述传输通道传输后形成的流媒体数据;在收到所述第五流媒体数据之后,接收来自所述发送端的第六流媒体数据,所述第六流媒体数据是第三流媒体数据经由所述传输通道传输后形成的流媒体数据。
45.第四方面,本技术实施例一种流媒体数据传输装置,该装置包括用于执行上述第一方面或第一方面任一种可选的实施方式中的方法的模块/单元/技术手段。
46.示例性的,该装置可以包括:
47.处理模块,用于创建重传队列和至少一个新传队列;其中,所述重传队列用于发送已向接收端发送过的数据包,所述至少一个新传队列用于发送未向所述接收端发送过的数据包;基于所述至少一个新传队列向所述接收端发送第一流媒体数据;
48.收发模块,用于基于所述至少一个新传队列向所述接收端发送第一流媒体数据;在收到来自所述接收端的重传指示之后,当所述重传队列和所述至少一个新传队列中均存在数据包时,优先基于所述重传队列向所述接收端发送第二流媒体数据,所述第一流媒体数据包括所述第二流媒体数据;在所述重传队列为空后,基于所述至少一个新传队列向所述接收端发送第三流媒体数据。
49.可选的,所述收发模块还用于:所述至少一个新传队列包括:音频发送队列和视频
帧发送队列,所述音频发送队列用于发送音频帧数据包,所述视频发送队列用于发送视频帧数据包;当所述音频发送队列与所述视频帧发送队列中均存在数据包时,优先基于所述音频发送队列向所述接收端发送流媒体数据;在所述音频发送队列为空后,基于所述视频帧发送队列向所述接收端发送流媒体数据。
50.可选的,所述视频帧发送队列包括:视频关键帧发送队列和视频非关键帧发送队列,所述视频关键帧发送队列用于发送视频关键帧数据包,所述视频非关键帧队列用于发送视频非关键帧数据包;所述收发模块具体用于:当所述视频关键帧发送队列和视频非关键帧发送队列中均存在数据包时,优先基于所述视频关键帧发送队列向所述接收端发送流媒体数据;在所述视频关键帧发送队列为空后,基于所述视频非关键帧发送队列向所述接收端发送流媒体数据。
51.可选的,所述发送端保存有缓存队列,所述缓冲队列中保存有若干数据包;所述处理模块还用于:从所述缓冲队列中复制多个未传输过的数据包,组成所述第一流媒体数据,将所述第一流媒体数据存入所述至少一个新传队列中;所述处理模块还用于:从所述缓冲队列中复制多个未传输过的数据包,组成所述第三流媒体数据,将所述第三流媒体数据存入所述至少一个新传队列中;所述处理模块还用于:根据所述重传指示从所述缓冲队列中复制传输过的数据包,组成所述第二流媒体数据,将所述第二流媒体数据存入所述重传队列中。
52.可选的,所述收发模块还用于:向所述接收端发送网络探测包;接收来自所述接收端的响应包;所述处理模块还用于:根据从发送所述网络探测包的时刻到接收所述响应包的时刻的时长确定所述发送端与所述接收端之间的往返时延rtt,根据所述rtt调整所述缓冲队列的大小。
53.可选的,所述收发模块还用于:当所述重传队列和所述至少一个新传队列存在数据包时,若接收到来自所述接收端的指示信息,则基于所述至少一个新传队列向所述接收端发送第三流媒体数据,同时所述处理模块还用于清空所述重传队列;其中,所述指示信息用于指示所述发送端继续新传,所述第三流媒体数据的关键帧为所述第一流媒体数据的关键帧的下一个关键帧。
54.第五方面,本技术实施例一种流媒体数据传输装置,该装置包括用于执行上述第二方面或第二方面任一种可选的实施方式中的方法的模块/单元/技术手段。
55.示例性的,该装置可以包括:
56.收发模块,用于接收第四流媒体数据,所述第四流媒体数据是第一流媒体数据经由传输通道传输后形成的流媒体数据;
57.处理模块,用于处理所述第四流媒体数据,确定所述第一流媒体数据中丢失的数据包;
58.所述收发模块还用于:向所述发送端发送重传指示,所述重传指示中包括所述丢失的数据包的标识;接收来自所述发送端的第五流媒体数据,所述第五流媒体数据是第二流媒体数据经由所述传输通道传输后形成的流媒体数据;所述第二流媒体数据根据所述重传指示确定,所述第一流媒体数据包括所述第二流媒体数据;在收到所述第五流媒体数据之后,接收来自所述发送端的第六流媒体数据,所述第六流媒体数据是第三流媒体数据经由所述传输通道传输后形成的流媒体数据。
59.可选的,所述处理模块具体用于:将所述第一流媒体数据中丢失的数据包的标识存储在丢包队列中;按照设定的时间间隔,周期性地检查所述丢包队列;所述收发模块具体用于:在每个周期内,如果所述丢包队列中存在数据包的标识,则基于所述丢包队列中的数据包的标识向所述发送端发送重传指示。
60.可选的,所述处理模块还用于:确定所述第四流媒体数据中不连续的数据包,将所述第四流媒体数据中不连续的数据包存入乱序队列中;所述处理模块还用于:当满足预设条件时,清空所述乱序队列中不连续的数据包;所述预设条件包括以下一项或多项:所述丢包队列中记录的数据包的丢失时间超过预设时间;或者,所述丢包队列中记录的数据包的重传次数超过预设次数;或者,所述乱序队列中保存的数据包的大小超过预设容量。
61.可选的,所述处理模块还用于:向所述发送端发送指示信息,所述指示信息用于指示所述发送端继续新传。
62.第六方面,本技术提供一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器、通信接口;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,使得所述电子设备通过执行第一方面或第一方面任一种可选的实施方式或第二方面或第二方面任一种可选的实施方式中任一项所述的方法。
63.第七方面,提供一种计算机可读存储介质,所述计算机可读存储介质用于存储指令,当所述指令被执行时,使如第一方面或第一方面任一种可选的实施方式或第二方面或第二方面任一种可选的实施方式中任一项所述的方法被实现。
64.本技术实施例中第三、第四、第五以、第六及第七方面中提供的一个或多个技术方案所具有的技术效果或优点,均可以由第一方面、第二方面中提供的对应的一个或多个技术方案所具有的技术效果或优点对应解释。
附图说明
65.图1为本技术实施例提供的一种流媒体传输系统的示意图;
66.图2为本技术实施例提供的一种流媒体传输方法的流程图;
67.图3为本技术实施例提供的一种发送端发送数据包的示意图;
68.图4为本技术实施例提供的一种接收端处理重传数据包的示意图;
69.图5为本技术实施例提供的一种接收端检测丢包队列的示意图;
70.图6为本技术实施例提供的一种流媒体传输装置的结构图;
71.图7为本技术实施例提供的另一种流媒体传输装置的结构图;
72.图8为本技术实施例提供的另一种流媒体传输装置的结构图;
73.图9为本技术实施例提供的一种电子设备的结构图。
具体实施方式
74.为使本技术的目的、技术方案和优点更加清楚明白,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。在
不冲突的情况下,本技术中的实施例及实施例中的特征可以相互任意组合。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以按不同于此处的顺序执行所示出或描述的步骤。
75.本技术的说明书和权利要求书及上述附图中的术语“第一”和“第二”是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的保护。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。本技术中的“多个”可以表示至少两个,例如可以是两个、三个或者更多个,本技术实施例不做限制。
76.本技术实施例中的术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。参见图1,为本技术实施例提供了一种流媒体传输系统,该系统中包括发送端与接收端,发送端与接收端通过传输通道连接。
77.其中,发送端用于采集流媒体数据,向接收端发送流媒体数据。
78.接收端用于接收来自发送端的流媒体数据,对流媒体数据做处理后,得到音视频数据,播放音视频数据。
79.发送端与接收端可以通过传输通道进行有线或无线通信,图1中以网络通信例,实际不限于此。
80.一种示例中,发送端可以为摄像机,第二设备可以为客户端,例如手机、电脑等等。摄像机采集流媒体数据,将流媒体数据发给客户端显示。
81.参见图2,为本技术实施例提供的一种流媒体处理方法的流程图,该方法以应用于图1所示的系统。该方法具体步骤如下:
82.s201:发送端创建重传队列和至少一个新传队列。
83.其中,重传队列用于发送已向接收端发送过的数据包,至少一个新传队列中的数据包用于发送未向接收端发送过的数据包。
84.可以理解的,重传队列和至少一个新传队列的大小可以根据实际需求进行规定,本技术不做限制。
85.s202:发送端基于至少一个新传队列向接收端发送第一流媒体数据,接收端接收第四流媒体数据。
86.其中,第四流媒体数据是第一流媒体数据经由传输通道传输后形成的流媒体数据。
87.由于在网络环境较差的情况下,第一流媒体数据在传输过程中会丢包,使得发送端发送的第一流媒体数据与接收端接收的第四流媒体数据不同。
88.一种可能的实现方式中,发送端中保存有缓冲队列,缓冲队列中保存有若干数据包。在发送端发送数据包时,发送端从缓冲队列中复制多个未传输过的数据包,组成第一流媒体数据,将第一流媒体数据存入至少一个新传队列中,然后基于至少一个新传队列向接收端发送第一流媒体数据。
89.具体的,当至少一个新传队列的大小大于等于第一流媒体数据的大小时,发送端
可以一次性从缓冲队列中复制多个未传输过的数据包,组成第一流媒体数据;当至少一个新传队列的大小小于第一流媒体数据的大小时,发送端可以分多次复制未传输过的数据包,累计组成第一流媒体数据,例如当发送端发送一个数据包后,至少一个新传队列中存在一个空位,发送端在从缓冲队列中复制一个未传输过的数据包放入至少一个新传队列中,发送端多次执行以上流程,完成第一流媒体数据的传输。
90.可选的,缓冲队列包括音频缓冲队列、视频关键帧缓冲队列、视频非关键帧缓冲队列三种类型。第一流媒体数据是由数据包组成的,数据包又包括音频帧数据包、视频关键帧数据包、视频非关键帧数据包三种类型。下面介绍发送端从三个缓冲队列中复制数据包并存入至少一个新传队列中的方法。
91.首先,发送端采集音视频数据,对其进行编码得到多个音频帧与多个视频帧,再将多个音频帧与多个视频帧进行分片(即将一个音频帧分片为多个音频帧数据包,将一个视频帧分片为多个视频关键帧数据包与多个视频非关键帧数据包),得到流媒体协议格式的音频帧数据包、视频关键帧数据包、视频非关键帧数据包。
92.其次,发送端将音频帧数据包存入音频缓冲队列中,将视频关键帧数据包存入视频关键帧缓冲队列中,将视频非关键帧数据包存入视频非关键帧缓冲队列中。
93.最后,至少一个新传队列包括音频发送队列、视频关键帧发送队列、视频非关键帧发送队列,音频发送队列用于发送音频帧数据包,视频关键帧发送队列用于发送视频关键帧数据包,视频非关键帧发送队列用于发送视频非关键帧数据包。发送端从音频缓冲队列中复制音频帧数据包,将音频数据包存入音频发送队列中;从视频关键帧缓冲队列中复制视频关键帧数据包,将视频关键帧数据包存入视频关键帧发送队列中;从视频非关键帧缓冲队列中复制视频非关键帧数据包,将视频非关键帧数据包存入视频非关键帧发送队列中。
94.可选的,至少一个新传队列也可以包括音频发送队列与视频帧发送队列这两个发送队列,视频帧发送队列用于发送视频帧数据包,发送端从视频关键帧缓冲队列中复制视频关键帧数据包,从视频非关键帧缓冲队列中复制视频非关键帧数据包,将视频关键帧数据包与视频非关键帧数据包均放入视频帧发送队列中。
95.可以理解的,流媒体协议格式包括不限于实时传输协议(real-time transport protocol,rtp)、传输流(transport stream,ts)、节目流(program stream,ps)。
96.通过本方式,发送端对音视频数据进行编码与分片得到多个数据包,将由数据包组成的第一流媒体数据发送给接收端,传输数据包需要的带宽小,传输第一流媒体数据的效率高。
97.可选的,缓冲队列为环形队列,具有满覆盖特性,当新的数据包进入缓冲队列后,缓冲队列会舍弃最旧的数据包。
98.可选的,缓冲队列的大小可以根据音频帧与视频帧确定。示例性的,发送端对编码后产生的首个音频帧进行解析,得到采样率、采样通道数等音频帧信息,根据音频帧信息确定音频缓冲队列的大小;发送端对编码后产生的首个视频关键帧进行解析,得到视频帧率、分辨率信息等视频帧信息,根据视频帧信息确定视频关键帧缓冲队列的大小和视频非关键帧缓冲队列的大小。
99.可选的,发送端可以根据发送端与接收端之间的往返时延rtt调整缓冲队列的大
小。其中,rtt可以是预配置的,或者是实时获取的。
100.例如,一种可能的实现方式中,发送端向接收端发送网络探测包,接收端向发送端发送响应包,发送端根据从发送网络探测包的时刻到接收响应包的时刻的时长确定发送端与接收端之间的往返时延rtt。
101.进一步的,rtt与缓冲队列得大小具有映射关系。发送端可以周期性的向接收端发送网络探测包,发送端可以统计多个周期的rtt,当达到预设周期统计次数时,发送端确定多个周期的rtt的平均值,并从映射表中获取缓冲队列与rtt值的对应关系,调整缓冲队列的大小。
102.一个具体的示例中,当rtt的值越小时,网络状况越好,缓冲队列越小,当rtt的值越大时,网络状况越差,缓冲队列越大。
103.通过本方式,发送端可以根据向接收端发送网络探测包与接收来自接收端的响应包确定发送端与接收端之间的rtt,根据rtt调整缓冲队列的大小,例如在网络状况较好时,缓冲队列较小,网络状况较差时,缓冲队列较大,保正发送端总是可以在缓冲队列中找到重传数据,缓冲队列可以满足当前网络状况下的重传需求,如此可以有效提高缓冲队列的利用率,提高方案的完整性。
104.s203:接收端处理第四流媒体数据,确定第一流媒体数据中丢失的数据包。
105.一种可能的实现方式中,接收端将第一流媒体数据中丢失的数据包的标识存储在丢包队列s1中,其中数据包的标识为数据包的序号。
106.进一步的,接收端确定第四流媒体数据中不连续的数据包,将第四流媒体数据中不连续的数据包存入乱序队列s2中。
107.可选的,接收端还保存有关键帧首包队列s3与已排序队列s4,其中关键帧首包队列s3用于记录视频关键帧首包的序号,已排序队列s4用于将序号连续的数据包发送至接收端的组帧模块中进行组帧得到视频关键帧与视频非关键帧。
108.下面介绍接收端处理第四流媒体数据的方法。当接收端每接收到第四流媒体数据中的一个视频帧数据包时,会判断该数据包的去向并修改队列s1至s4中至少一个队列的内容。
109.首先,接收端根据第四流媒体数据中的首个视频帧数据包确定第一流媒体数据中丢失的数据包,其中第四流媒体数据是接收端第一次接收到的流媒体数据。视频帧数据包分为视频关键帧数据包与视频非关键帧数据包,若首个视频帧数据包属于视频非关键帧,则丢弃该数据包;若首个视频帧数据包属于视频关键帧,且该数据包为视频关键帧的首包,则接收端将该数据包存储至已排序队列s4中,并在关键帧首包队列s3记录该数据包的序号;若首个视频帧数据包属于视频关键帧,且该数据包不为视频关键帧的首包,则接收端将该数据包存入乱序队列s2中,并将根据该数据包的序号确定丢失的关键帧的数据包的序号,在丢包队列s1中记录丢失的关键帧的数据包的序号。
110.一个具体的示例中,一个视频关键帧对应的数据包的序号为21-25,与该视频关键帧关联的视频非关键帧对应的数据包的序号为25-70。若接收端确定首个视频帧数据包为数据包21,则接收端将该数据包21存储至已排序队列s4中,并在关键帧首包队列s3记录该数据包21的序号;若接收端确定首个视频帧数据包为数据包23,则数据包21-22为丢包的数据包,并在丢包队列s1记录序号为21-22的数据包丢失。
111.其次,接收端在判断第四流媒体数据中的首个视频帧数据包之后,对于其余的视频帧数据包,需判断当前的数据包的序号与已排序队列s4中上一个存储的数据包的序号是否连续,若连续,则将该数据包存入已排序队列s4中;若不连续,则确定丢失的数据包的序号,在丢包队列s1记录丢失的数据包的序号,并将当前的数据包存入乱序队列s2中。
112.一个具体的示例中,视频帧数据包的序号为从0-65535的循环,当序号p与序号q满足p》=((q+1)%65536)时,序号p与序号q连续,否则序号p与序号q不连续。若已排序队列s4中上一个存储的数据包的序号q=65535,当前需要判断的数据包的序号为p=0,由于p》=((q+1)%65536),因此序号p与序号q连续,接收端将数据包p存入已排序队列s4中。若已排序队列s4中上一个存储的数据包的序号q=1,当前需要判断的数据包的序号为p=5,由于序号p与序号q不连续,接收端在丢包队列s1记录丢失的数据包的序号为2、3、4,并将数据包p存入乱序队列s2中。
113.当接收端每接收到第四流媒体数据中的一个音频帧数据包时,会判断该数据包的去向并修改队列s1、s2、s4中至少一个队列的内容。其中除了接收端不会将音频帧的首包放入关键帧首包队列s3中以外,接收端处理音频数据包的方法与处理视频数据包的方法相同,这里不再赘述。
114.可以理解的,第一流媒体中丢失的数据包的类型以音频帧数据包与视频帧数据包为例,还可以为文本数据包、图像数据包、动画数据包等等,本技术不限于此。
115.s204:接收端向发送端发送重传指示;相应的,发送端接收来自接收端的重传指示。
116.其中,重传指示中包括丢失的数据包的标识,数据包的标识为数据包的序号。
117.一种可能的实现方式中,接收端中保存有重传检测定时器,重传检测定时器用于按照设定的时间间隔,周期性地检查丢包队列s1;在每个周期内,如果丢包队列s1中存在数据包的标识,则基于丢包队列s1中的数据包的标识向发送端发送重传指示。
118.可选的,接收端在丢包队列s1中记录丢失的数据包的标识时,还会记录每个丢失的数据包的丢包生成时间、重传次数和上一次被处理的时间。其中,一个数据包的丢包生成时间为接收端确定该数据包丢包的时刻,一个数据包的重传次数为接收端向发送端发送针对该数据包的重传指示的次数,一个数据包上一次被处理的时间为该数据包上一次重传的时刻。
119.一个具体的示例中,第一流媒体数据由序号为1-10的数据包组成,接收端确定其中丢失的数据包的序号为3、4、5、9,则数据包3、4、5的丢包生成时间为接收端接收到数据包6的时刻,数据包9的丢包生成时间为接收端接收到数据包8的时刻,若接收端第一次发送重传指示时,重传指示中包括丢失的数据包的序号3、4、5、9,接收端第二次发送重传指示时,重传指示中包括丢失的数据包的序号3,此时数据包3的重传次数为2,数据包3的上一次被处理时间为接收端第二次发送重传指示的时刻。
120.可以理解的,以上数据包的类型可以为音频帧数据包与视频帧数据包,还可以为文本数据包、图像数据包、动画数据包等等,本技术不限于此。
121.通过本方式,接收端周期性的检查丢包队列s1,每个周期内检测到丢包队列s1中存在数据包的标识时,会向发送端发送重传指示,若接收端一直未接收到某个数据包,该数据包的标识会一直存在丢包队列中,接收端每次检查丢包队列时,都会向发送端发送针对
该数据包的重传指示,即接收端可以向发送端发送针对一个数据包的多次重传指示,提高了接收端收到丢失的数据包的可能性,降低了接收端播放流媒体时出现延时、卡顿、花屏等现象的可能性,进一步提高了方案的可靠性。
122.s205:发送端在收到来自接收端的重传指示之后,当所述重传队列和至少一个新传队列中均存在数据包时,优先基于重传队列向接收端发送第二流媒体数据,接收端接收第五流媒体数据。
123.其中,第一流媒体数据包括第二流媒体数据,第五流媒体数据是第二流媒体数据经由传输通道传输后形成的流媒体数据。
124.一种可能的实现方式中,发送端在收到来自接收端的重传指示之后,发送端根据重传指示从缓冲队列中复制传输过的数据包,组成第二流媒体数据,将第二流媒体数据存入重传队列中,这样重传队列中就存在数据包。其中,传输过的数据包的标识与重传指示中丢失的数据包的标识相同。
125.一种可能的实现方式中,发送端在向接收端发送第一流媒体数据之后,至少一个新传队列中存在空位,并且缓冲队列中存在未传输过的数据包,发送端从缓冲队列中复制多个数据包组成第三流媒体数据,将第三流媒体数据存入至少一个缓冲队列中,这样至少一个缓冲队列中就存在数据包。可以理解的,只要缓冲队列中总是存在未传输过的数据包,发送端就会一直向至少一个新传队列中存入数据包,以使数据包发送。
126.s206:发送端在重传队列为空后,基于至少一个新传队列向接收端发送第三流媒体数据,接收端接收第六流媒体数据。
127.其中,第六流媒体数据是第三流媒体数据经由传输通道传输后形成的流媒体数据。
128.当第六流媒体数据不是接收端第一次接收到的流媒体数据,在接收端接收第六流媒体数据后,接收端处理第六流媒体数据的方法与处理第四流媒体数据的方法相同,除了接收端处理第六流媒体数据中视频关键帧的首包的方法不同。可选的,若第四流媒体数据不是接收端第一次接收到的流媒体数据,则接收端处理第四流媒体数据的方法与第六流媒体数据的方法相同。
129.若第六流媒体数据首个视频帧数据包属于视频关键帧的首包,则接收端在关键帧首包队列s3记录该数据包的序号,并判断该数据包的序号与已排序队列s4中上一个存储的数据包的序号是否连续,若连续,则将该数据包存入已排序队列s4中;若不连续,则将该数据包存入已排序队列s2中。通过上述s201~s206,当发送端需要发送新传的数据与重传的数据时,优先基于创出按队列发送重传的数据,当重传队列为空后,再基于至少一个新传队列发送新传的数据,如此可以保证接收端优先接收到重传的数据,提高了流媒体数据重传的可靠性,降低了接收端播放流媒体时出现延时、卡顿、花屏等现象的可能性,使得接收端可以及时播放流媒体,并且提高了用户体验。
130.一种可能的实现方式中,除了重传的数据和新传的数据区分优先顺序之外,新传的数据中的不同数据也可以区分先后顺序。
131.结合上文s202中介绍的至少一个新传队列包括音频发送队列和视频帧发送队列的例子,作为一种示例,当音频发送队列与视频帧发送队列中均存在数据包时,发送端调度发送线程,发送端优先基于音频发送队列向接收端发送流媒体数据;在音频发送队列为空
后,基于视频帧发送队列向所述接收端发送流媒体数据,当发送端中所有用于发送数据包的队列都轮询完毕后,各队列等待发送端再次调度发送线程。
132.通过本方式,由于在诸如智慧停车场、智能报警等场景中,客服中心的工作人员可以获得用户的视频画面与声音,在该过程中需要保证音频流的实时性,因此在发送端发送数据包时,按照音频发送队列、视频帧发送队列的顺序依次发送各队列中的数据,可以尽可能降低声音延时,提高用户音频收听体验。
133.进一步的,结合上述s202中介绍的视频帧发送队列包括视频关键帧发送队列和视频非关键帧发送队列的例子,作为一种示例,当视频关键帧发送队列和视频非关键帧发送队列中均存在数据包时,发送端调度发送线程,发送端优先基于视频关键帧发送队列向接收端发送流媒体数据;在视频关键帧发送队列为空后,基于视频非关键帧发送队列向接收端发送流媒体数据,当发送端中所有用于发送数据包的队列都轮询完毕后,各队列等待发送端再次调度发送线程。
134.通过本方式,由于对于一个视频关键帧,与其关联的视频非关键帧都要依靠该视频关键帧进行编码与解码,所以由于视频帧中视频关键帧相较于视频非关键帧更重要,所以优先基于视频关键帧发送队列向接收端发送流媒体数据可以降低视频图像卡顿的可能性,提高了方案的可靠性。
135.一个具体的示例中,参见图3,发送端调度发送线程,按照重传队列、音频发送队列、视频关键帧发送队列、视频非关键帧发送队列的顺序依次发送各队列中的数据包,即发送端设置重传队列为第一优先级、音频发送队列为第二优先级、视频关键帧发送队列为第三优先级、视频非关键帧发送队列为第四优先级,发送端按照优先级从高到低的顺序依次发送各队列中的数据。
136.以上介绍了发送端发送第二流媒体数据与第三流媒体数据的方法,下面介绍接收端接收第五流媒体数据的方法。接收端每接收到第五流媒体数据中的一个数据包,会判断该数据包的去向并修改队列s1至s4中至少一个队列的内容。
137.一种可能的实现方式中,参见图4,当接收端接收到第五流媒体数据后,确定第五流媒体数据中的数据包的序号属于丢包队列s1,并将第五流媒体数据中的数据包的序号从丢包队列s1中移除;然后,接收端按照第五流媒体数据中数据包的序号从旧到新的顺序,依次判断每个数据包是否与已排序队列s4中上一次接收到的数据包连续,若连续,则将当前的数据包送入已排序队列s4,并将乱序队列s2中与该数据包连续的数据包送入已排序队列s4;否则,将该数据包送入乱序队列s2。
138.一个具体的示例中,第一流媒体数据有序号为1-10的视频帧数据包组成,接收端确定其中丢失的数据包的序号为3、7、8,视频关键帧首包为数据包1。此时丢包队列s1记录丢失的数据包的序号为3、7、8,乱序队列s2中存储不连续的数据包4、5、6、9、10,关键帧首包队列s3记录视频关键帧首包的序号为1,已排序队列s4存储序号连续的数据包1、2,接收端向发送端请求重传数据包3、7、8。若接收端接收到发送端重传的数据包3时,接收端从丢包队列s1移除序号3,同时将数据包3、4、5、6送入已排序队列s4中;若接收端接收到发送端重传的数据包7和/或8时,接收端从丢包队列s1移除序号7和/或8,将数据包7和/或8送入乱序队列s2中。
139.一种可能的实现方式中,当第四流媒体数据与第五流媒体数据共同组成了第一流
媒体时,接收端将已排序队列s4中的数据包送入组帧模块,组帧模块将数据包按照流媒体协议格式提取出音视频编码数据,并将组帧完成的音视频帧送入解码器,解码器对音视频帧进行解码,接收端将解码后的数据进行渲染播放。
140.可以理解的,以上数据包的类型可以为音频帧数据包与视频帧数据包,还可以为文本数据包、图像数据包、动画数据包等等,本技术不限于此。
141.以上介绍了接收端接收第五流媒体数据的方法,此外本技术还介绍了清理队列的方法。
142.一种可能的实现方式中,当满足预设条件时,接收端还可以清空乱序队列s2中的数据包;预设条件包括以下一项或多项:丢包队列s1中记录的数据包的丢失时间超过预设时间;或者,丢包队列s1中记录的数据包的重传次数超过预设次数;或者,乱序队列s2中保存的数据包的大小超过预设容量。
143.一个具体的示例中,参见图5,接收端可以在周期性地检查丢包队列s1时,获取丢包队列s1中记录的数据包的丢失时间与重传次数,判断数据包的丢失时间是否超过预设时间,或者,数据包的重传次数是否超过预设次数,若是则接收端清空乱序队列s2中的数据包,否则,接收端向发送端发送重传指示。
144.可选的,接收端还可以清空丢包队列s1,和/或关键帧首包队列s3中的数据。
145.可选的,预设时间、预设次数可以根据视频帧的类型进行规定。例如,针对视频关键帧数据包的预设时间可以比针对视频非关键帧数据包的预设时间长,针对视频关键帧数据包的预设次数可以比针对视频非关键帧数据包的预设次数多。
146.可以理解的,预设时间、预设次数以及预设容量可以根据实际需要进行规定,本技术不做限制。
147.通过本方式,当数据包的丢失时间超过预设时间时可以视为接收端已经出现了延迟与卡顿的现象,当数据包的重传次数超过预设次数时可以视为数据包出错,接收端难以通过发送端的重传获得数据包,在这两种情况下即使接收端之后接收到第一流媒体数据中丢失的数据包,接收端播放的数据也会失去实时性,因此接收端清空乱序队列中的数据包可以避免第一流媒体数据中的数据包占用乱序队列,提高乱序队列的利用率。当乱序队列中保存的数据包的大小超过预设容量时可以视为接收端已经无法继续接收新的不连续的数据包。接收端清空乱序队列中的数据包可以释放接收端的存储空间,为后续接收数据包提供存储空间,提高了方案的完整性。
148.进一步的,在清空乱序队列s2中的数据包之后,在接收来自发送端的第六流媒体数据之前,接收端向发送端发送指示信息,指示信息用于指示发送端继续新传;相应的,发送端接收指示信息,当重传队列和至少一个新传队列中均存在数据包时,发送端基于至少一个新传队列向接收端发送第三流媒体数据并清空重传队列,其中第三流媒体数据的关键帧为第一流媒体数据的关键帧的下一个关键帧。
149.可选的,在接收端没有收到下一个关键帧之前,接收端可以周期性的向发送端发送指示信息。
150.可以理解的,以上数据包的类型可以为音频帧数据包与视频帧数据包,还可以为文本数据包、图像数据包、动画数据包等等,本技术不限于此。
151.通过本方式,接收端在清空乱序队列中的数据包之后,向发送端发送指示信息,发
送端根据指示信息向接收端发送第三流媒体数据并清空重传队列,避免重传队列中的数据浪费发送资源,并且重传队列为空时,发送端可以及时传输第三流媒体数据,使得接收端接收的数据具有较好的实时性。
152.另一种可能的实现方式中,当乱序队列s2中保存的数据包的大小超过预设容量时,接收端将乱序队列s2中的部分数据包清除。
153.一个具体的示例中,当乱序队列s2中保存的数据包的大小超过预设容量时,接收端在关键帧首包队列s3中确定出最新的视频关键帧首包的序号k,确定乱序队列s2中是否存在数据包k,若存在,将乱序队列s2中所有序号小于k的视频帧数据包清除并将k从首包队列s3中清除,并将数据包k从乱序队列s2中送入已排序队列s4中。可选的,接收端还可以将丢包队列s1中所有小于k的视频帧数据包的序号清除。
154.可以理解的,以上仅以数据包的类型为视频帧数据包为例,实际不限于此。
155.通过本方式,当乱序队列s2中保存的数据包的大小超过预设容量时,接收端可以视为接收端已经无法继续接收新的不连续的数据包,序号小于k的数据包与第一流媒体数据无关,接收端将丢包队列s1中所有小于k的序号清除,避免浪费发送重传指示的发送资源,将乱序队列s2中序号小于k的数据包清除,可以释放接收端的存储空间,为后续接收数据包提供存储空间,提高了方案的完整性。
156.可以理解的,本技术中第一流媒体数据至第六流媒数据中的数据包的类型可以为音频帧数据包、视频帧数据包、文本数据包、图像数据包、动画数据包等等,本技术不限于此。
157.在本方案中,当发送端需要向接收端发送新传的数据与重传的数据时,优先基于重传队列发送重传的数据,当重传队列为空后,再基于至少一个新传队列发送新传的数据,如此可以保证接收端优先接收到重传的数据,降低了接收端播放流媒体时出现延时、卡顿、花屏等现象的可能性,使得接收端可以及时播放流媒体,并且提高了用户体验。
158.以上结合附图介绍了本技术实施例提供的方法,以下结合附图介绍本技术实施例提供的装置。
159.基于相同的技术构思,本技术实施例提供一种流媒体传输装置600,该装置包括用于执行上述方法实施例中发送端或接收端所执行的方法的模块/单元/手段。该模块/单元/手段可以通过软件实现,或者通过硬件实现,也可以通过硬件执行相应的软件实现。
160.参见图6,该装置可以包括处理模块601和收发模块602,处理模块601和收发模块602配合以执行上述方法实施例中客户端或服务端执行的部分或全部操作。
161.示例性的,当装置600应用于发送端时,
162.处理模块601,用于创建重传队列和至少一个新传队列;其中,所述重传用于发送已向接收端发送过的数据包,所述至少一个新传队列用于发送未向所述接收端发送过的数据包;
163.收发模块602,用于基于所述至少一个新传队列向所述接收端发送第一流媒体数据;在收到来自所述接收端的重传指示之后,当所述重传队列和所述至少一个新传队列中均存在数据包时,优先基于所述重传队列向所述接收端发送第二流媒体数据,所述第一流媒体数据包括所述第二流媒体数据;在所述重传队列为空后,基于所述至少一个新传队列向所述接收端发送第三流媒体数据。
164.示例性的,当装置600应用于接收端时,
165.收发模块602,用于接收第四流媒体数据,所述第四流媒体数据是第一流媒体数据经由传输通道传输后形成的流媒体数据;
166.处理模块601,用于处理所述第四流媒体数据,确定所述第一流媒体数据中丢失的数据包;
167.所述收发模块602还用于:向所述发送端发送重传指示,所述重传指示中包括所述丢失的数据包的标识;接收来自所述发送端的第五流媒体数据,所述第五流媒体数据是第二流媒体数据经由所述传输通道传输后形成的流媒体数据;所述第二流媒体数据根据所述重传指示确定,所述第一流媒体数据包括所述第二流媒体数据;在收到所述第五流媒体数据之后,接收来自所述发送端的第六流媒体数据,所述第六流媒体数据是第三流媒体数据经由所述传输通道传输后形成的流媒体数据。
168.应当注意,尽管在上文详细描述中提及了装置的若干模块或子模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。
169.参见图7,为本技术实施例提供的另一种流媒体传输装置700的结构图,该装置包括用于执行上述方法实施例中由发送端执行的方法的模块/单元/技术手段。附图7中虚线中的模块对于装置700是可选的。
170.示例性的,该装置700包括:
171.备份缓冲单元701,用于存储流媒体协议格式的数据包;
172.收发单元702,用于向接收端发送数据以及接收来自接收端的数据;
173.处理单元703,用于从备份缓冲单元701中复制数据包送入收发单元702中。
174.可选的,该装置700还包括:编码单元704,用于对发送端采集的音视频数据进行编码得到多个音频帧与多个视频帧。
175.可选的,该装置700还包括:分片单元705,用于对多个音频帧与多个视频帧进行分片得到流媒体协议格式的音频帧数据包、视频关键帧数据包、视频非关键帧数据包。
176.可选的,该装置700还包括:网络探测单元706,用于发送网络探测包。
177.参见图8,为本技术实施例提供的另一种流媒体传输装置800的结构图,该装置包括用于执行上述方法实施例中由接收端执行的方法的模块/单元/技术手段。附图8中虚线中的模块对于装置800是可选的。
178.示例性的,该装置800包括:
179.反馈单元801,用于确定丢失的数据包;
180.收发单元802,用于向发送端发送数据以及接收来自发送端的数据;
181.处理单元803,用于处理流媒体数据。
182.可选的,该装置800还包括:组包单元804,用于将数据包组帧得到视频帧。
183.可选的,该装置800还包括:乱序单元805,用于存储不连续的数据包。
184.可选的,该装置800还包括:丢包检测单元806,用于定期检测丢失的数据包的序号。
185.应理解,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模
块的功能描述,在此不再赘述。
186.作为上述装置一种可能的产品形态,参见图9,本技术实施例还提供一种电子设备900,包括:
187.至少一个处理器901;以及与所述至少一个处理器901通信连接的通信接口903;所述至少一个处理器901通过执行存储器902存储的指令,使得所述电子设备900通过所述通信接口903执行上述方法实施例中任一设备所执行的方法步骤。
188.可选的,所述存储器902位于所述电子设备900之外。
189.可选的,所述电子设备900包括所述存储器902,所述存储器902与所述至少一个处理器901相连,所述存储器902存储有可被所述至少一个处理器901执行的指令。附图9用虚线表示存储器902对于电子设备900是可选的。
190.其中,所述处理器901和所述存储器902可以通过接口电路耦合,也可以集成在一起,这里不做限制。
191.本技术实施例中不限定上述处理器901、存储器902以及通信接口903之间的具体连接介质。本技术实施例在图9中以处理器901、存储器902以及通信接口903之间通过总线904连接,总线在图9中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图9中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
192.应理解,本技术实施例中提及的处理器可以通过硬件实现也可以通过软件实现。当通过硬件实现时,该处理器可以是逻辑电路、集成电路等。当通过软件实现时,该处理器可以是一个通用处理器,通过读取存储器中存储的软件代码来实现。
193.示例性的,处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
194.应理解,本技术实施例中提及的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,rom)、可编程只读存储器(programmable rom,prom)、可擦除可编程只读存储器(erasable prom,eprom)、电可擦除可编程只读存储器(electrically eprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(random access memory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(static ram,sram)、动态随机存取存储器(dynamic ram,dram)、同步动态随机存取存储器(synchronous dram,sdram)、双倍数据速率同步动态随机存取存储器(double data eate sdram,ddr sdram)、增强型同步动态随机存取存储器(enhanced sdram,esdram)、同步连接动态随机存取存储器(synchlink dram,sldram)和直接内存总线随机存取存储器(direct rambus ram,dr ram)。
195.需要说明的是,当处理器为通用处理器、dsp、asic、fpga或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件时,存储器(存储模块)可以集成在处理器
中。
196.应注意,本文描述的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
197.作为另一种可能的产品形态,本技术实施例还提供一种计算机可读存储介质,该计算机可读存储介质用于存储指令,当所述指令被执行时,使得计算机执行上述方法实例中第一设备所执行的方法步骤。
198.本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
199.本技术是参照根据本技术的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
200.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
201.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
202.显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。

技术特征:
1.一种流媒体数据传输方法,其特征在于,应用于发送端,包括:创建重传队列和至少一个新传队列;其中,所述重传队列用于发送已向接收端发送过的数据包,所述至少一个新传队列用于发送未向所述接收端发送过的数据包;基于所述至少一个新传队列向所述接收端发送第一流媒体数据;在收到来自所述接收端的重传指示之后,当所述重传队列和所述至少一个新传队列中均存在数据包时,优先基于所述重传队列向所述接收端发送第二流媒体数据,所述第一流媒体数据包括所述第二流媒体数据;在所述重传队列为空后,基于所述至少一个新传队列向所述接收端发送第三流媒体数据。2.如权利要求1所述的方法,其特征在于,所述至少一个新传队列包括:音频发送队列和视频帧发送队列,所述音频发送队列用于发送音频帧数据包,所述视频发送队列用于发送视频帧数据包;所述方法包括:当所述音频发送队列与所述视频帧发送队列中均存在数据包时,优先基于所述音频发送队列向所述接收端发送流媒体数据;在所述音频发送队列为空后,基于所述视频帧发送队列向所述接收端发送流媒体数据。3.如权利要求2所述的方法,其特征在于,所述视频帧发送队列包括:视频关键帧发送队列和视频非关键帧发送队列,所述视频关键帧发送队列用于发送视频关键帧数据包,所述视频非关键帧队列用于发送视频非关键帧数据包;所述发送所述视频帧发送队列中的数据包,包括:当所述视频关键帧发送队列和所述视频非关键帧发送队列中均存在数据包时,优先基于所述视频关键帧发送队列向所述接收端发送流媒体数据;在所述视频关键帧发送队列为空后,基于所述视频非关键帧发送队列向所述接收端发送流媒体数据。4.如权利要求1-3任一项所述的方法,其特征在于,所述发送端保存有缓存队列,所述缓冲队列中保存有若干数据包;在所述基于所述至少一个新传队列向所述接收端发送第一流媒体数据之前,还包括:从所述缓冲队列中复制多个未传输过的数据包,组成所述第一流媒体数据,将所述第一流媒体数据存入所述至少一个新传队列中;在所述基于所述至少一个新传队列向所述接收端发送第一流媒体数据之后,还包括:从所述缓冲队列中复制多个未传输过的数据包,组成所述第三流媒体数据,将所述第三流媒体数据存入所述至少一个新传队列中;在所述收到来自所述接收端的重传指示之后,在所述优先基于所述重传队列向所述接收端发送第二流媒体数据之前,还包括:根据所述重传指示从所述缓冲队列中复制传输过的数据包,组成所述第二流媒体数据,将所述第二流媒体数据存入所述重传队列中。5.如权利要求4所述的方法,其特征在于,所述方法还包括:向所述接收端发送网络探测包;接收来自所述接收端的响应包;根据从发送所述网络探测包的时刻到接收所述响应包的时刻的时长确定所述发送端与所述接收端之间的往返时延rtt,根据所述rtt调整所述缓冲队列的大小。
6.如权利要求1所述的方法,其特征在于,所述方法还包括:当所述重传队列和所述至少一个新传队列存在数据包时,若接收到来自所述接收端的指示信息,则基于所述至少一个新传队列向所述接收端发送第三流媒体数据并清空所述重传队列;其中,所述指示信息用于指示所述发送端继续新传,所述第三流媒体数据的关键帧为所述第一流媒体数据的关键帧的下一个关键帧。7.一种流媒体数据传输方法,其特征在于,应用于接收端,包括:接收第四流媒体数据,所述第四流媒体数据是第一流媒体数据经由传输通道传输后形成的流媒体数据;处理所述第四流媒体数据,确定所述第一流媒体数据中丢失的数据包;向所述发送端发送重传指示,所述重传指示中包括所述丢失的数据包的标识;接收来自所述发送端的第五流媒体数据,所述第五流媒体数据是第二流媒体数据经由所述传输通道传输后形成的流媒体数据;所述第二流媒体数据根据所述重传指示确定,所述第一流媒体数据包括所述第二流媒体数据;在收到所述第五流媒体数据之后,接收来自所述发送端的第六流媒体数据,所述第六流媒体数据是第三流媒体数据经由所述传输通道传输后形成的流媒体数据。8.如权利要求7所述的方法,其特征在于,所述处理所述第四流媒体数据,确定所述第一流媒体数据中丢失的数据包,包括:将所述第一流媒体数据中丢失的数据包的标识存储在丢包队列中;所述向所述发送端发送重传指示,包括:按照设定的时间间隔,周期性地检查所述丢包队列;在每个周期内,如果所述丢包队列中存在数据包的标识,则基于所述丢包队列中的数据包的标识向所述发送端发送重传指示。9.如权利要求8所述的方法,其特征在于,所述处理所述第四流媒体数据,确定所述第一流媒体数据中丢失的数据包,还包括:确定所述第四流媒体数据中不连续的数据包,将所述第四流媒体数据中不连续的数据包存入乱序队列中;所述方法还包括:当满足预设条件时,清空所述乱序队列中不连续的数据包;所述预设条件包括以下一项或多项:所述丢包队列中记录的数据包的丢失时间超过预设时间;或者,所述丢包队列中记录的数据包的重传次数超过预设次数;或者,所述乱序队列中保存的数据包的大小超过预设容量。10.如权利要求9所述的方法,其特征在于,在所述清空所述乱序队列中的数据包之后,在所述接收来自所述发送端的第六流媒体数据之前,还包括:向所述发送端发送指示信息,所述指示信息用于指示所述发送端继续新传。11.一种流媒体数据传输系统,其特征在于,所述系统包括发送端与接收端,所述发送端和所述接收端通过传输通道连接;所述发送端用于执行如权1-6任一项所述的方法;所述接收端用于执行如权7-10任一项所述的方法。12.一种流媒体数据传输装置,其特征在于,包括:
处理模块,用于创建重传队列和至少一个新传队列;其中,所述重传队列中的数据包为已向接收端发送过的数据包,所述至少一个新传队列中的数据包为未向所述接收端发送过的数据包;收发模块,用于基于所述至少一个新传队列向所述接收端发送第一流媒体数据;在收到来自所述接收端的重传指示之后,优先基于所述重传队列向所述接收端发送第二流媒体数据,所述第一流媒体数据包括所述第二流媒体数据;在所述重传队列为空后,基于所述至少一个新传队列向所述接收端发送第三流媒体数据。13.一种流媒体数据传输装置,其特征在于,包括:收发模块,用于接收第四流媒体数据,所述第四流媒体数据是第一流媒体数据经由传输通道传输后形成的流媒体数据;处理模块,用于处理所述第四流媒体数据,确定所述第一流媒体数据中丢失的数据包;所述收发模块还用于:向所述发送端发送重传指示,所述重传指示中包括所述丢失的数据包的标识;接收来自所述发送端的第五流媒体数据,所述第五流媒体数据是第二流媒体数据经由所述传输通道传输后形成的流媒体数据;所述第二流媒体数据根据所述重传指示确定,所述第一流媒体数据包括所述第二流媒体数据;在收到所述第五流媒体数据之后,接收来自所述发送端的第六流媒体数据,所述第六流媒体数据是第三流媒体数据经由所述传输通道传输后形成的流媒体数据。14.一种电子设备,其特征在于,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器、通信接口;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,使得所述电子设备通过所述通信接口执行如权利要求1-6中任一项所述的方法,或者,使得所述电子设备通过所述通信接口执行如权利要求7-10中任一项所述的方法。15.一种计算机可读存储介质,其特征在于,包括程序或指令,当所述程序或指令在计算机上运行时,使得如权利要求1-5中任一项所述的方法被执行,或者,如权利要求6-9中任一项所述的方法被执行。

技术总结
本申请涉及计算机技术理领域,具体涉及到一种流媒体传输方法、系统、装置、设备及介质。该方法包括:发送端创建重传队列和至少一个新传队列;基于至少一个新传队列向接收端发送第一流媒体数据;接收端接收第四流媒体数据;处理第四流媒体数据,确定第一流媒体数据中丢失的数据包;向发送端发送重传指示,发送端在收到来自接收端的重传指示之后,当重传队列和至少一个新传队列中均存在数据包时,优先基于重传队列向接收端发送第二流媒体数据;在重传队列为空后,基于至少一个新传队列向接收端发送第三流媒体数据;接收端接收来自发送端的第五流媒体数据;在收到第五流媒体数据之后,接收来自发送端的第六流媒体数据。来自发送端的第六流媒体数据。来自发送端的第六流媒体数据。


技术研发人员:田青松 赵宇宁 刘明 邓志吉 齐东莲
受保护的技术使用者:浙江大华技术股份有限公司
技术研发日:2023.03.16
技术公布日:2023/7/11
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐