技术领域
[0001] 本发明涉及数据传输领域,具体涉及一种实时视频传输方法。
相关背景技术
[0002] 随着网络技术的不断发展,互联网视频传输技术得到广泛的应用。互联网视频的实时性使得可以例如在课堂或会议室中传输实时视频流。互联网实时视频传输中不仅传输大量的视频数据,并且实时视频传输对视频的延时和画面质量有较高的要求。
[0003] 为了保证视频实时传输质量,可以基于TCP(Transmission Control Protocol,传输控制协议)或RUDP(Reliable User Datagram Protocol,可靠用户数据报协议)等传输协议进行设计。TCP通过传输层的重传,可以克服丢包问题,RUDP在UDP(User Datagram Protocol,用户数据报协议)/IP(Internet Protocol,互联网协议)的协议层之上,为传输连接提供了可靠的有序传送。
[0004] 然而,基于TCP或RUDP等传输协议设计,视频延迟时间不可控,特别是在弱网环境下,视频数据传输延迟时间较高,导致画面卡顿现象严重,从而降低了实时视频传输的画质和流畅度。
具体实施方式
[0094] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。
[0095] 本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
[0096] 因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0097] 在网络中实时传输视频数据时,由于在每个网络节点进行路由选择,并且每个数据包进行排队增加了报文传输延时,当传输延时超过一定限度后会采取丢包处理。这些情况都会导致视频呈现的质量降低。本发明提供了一种用于实时视频传输系统的实时视频传输方法,有效解决了在弱网环境下,由于视频延时高而导致卡顿现象严重的问题。
[0098] 本发明提供的实时视频传输系统包括视频发送端、服务器和视频播放端,视频发送端与服务器之间以及服务器与视频播放端之间均通过网络连接。视频发送端用于获取实时视频数据,并且将所获取的视频数据经由网络发送至服务器,服务器用于接收视频数据,并且根据视频播放端的请求,经由网络将所接收的视频数据发送至视频播放端用于解码播放。本发明实施例中的视频发送端可以为例如视频会议摄像装置、视频课堂摄像装置等任何实时视频采集电子装置。本发明实施例中的视频播放端可以为例如用户个人电脑、计算机、手机、智能电视机等任何与具有视频播放功能的电子装置。本发明对于视频发送端和视频播放端的具体类型不做限制。
[0099] 图1为本发明一实施例提供的实时视频传输方法的流程示意图,如图1所示,该方法应用于实时视频传输系统中的视频发送端,实时视频传输系统包括视频发送端和服务器,该方法包括:
[0100] 步骤101、根据服务器发送的反馈信息,计算得到可用带宽和可用帧率。
[0101] 其中,反馈信息包括:重传请求信息、缓冲时长、预估网络带宽、丢包率。
[0102] 视频发送端接收到服务器发送的重传请求信息、缓冲时长、预估网络带宽、丢包率之后,可以采用预定算法计算得到可用带宽和可用帧率。服务器可以根据预先接收到的来自视频发送端的视频数据来生成上述反馈信息。
[0103] 其中,带宽是指在单位时间内能传输的数据量。帧率是称为帧的位图图像连续出现在显示器上的频率(速率)。一帧就是一副静止的画面,连续的帧就形成动画,如视频图像等。帧率通常为在1秒钟时间里传输的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次,通常用fps(frames per second,每秒钟帧数)表示。每一帧都是静止的图象,快速连续地显示帧便形成了运动的假象。高的帧率可以得到更流畅、更逼真的动画。每秒钟帧数愈多,所显示的动作就会愈流畅。重传请求是一种数据传输错误控制方法,使用确认消息和超时来实现不可靠服务的可靠数据传输。当视频发送端接收到来自服务器重传请求信息时,视频发送端对重传请求信息中所标识的视频数据进行重传。丢包率是指在数据传输过程中所丢失数据包数量占所发送数据组的比率。计算方法是:丢包率=(发送包数-接收包数)/发送包数*100%。
[0104] 步骤102、根据可用带宽和可用帧率,对视频数据进行丢帧处理,得到丢帧处理后的视频数据。
[0105] 在弱网环境下,如果连续完整地传输原始视频数据,可能导致视频延时高,卡顿严重,并且加剧网络拥塞。由于连续相邻的视频帧的图像数据相似度非常高,因此,可以采用预定算法舍弃掉其中一部分帧后而不会影响播放效果,同时,由于舍弃掉一部分帧之后,视频传输数据量减小,因此,可以使得网络传输更加流畅,避免了卡顿。
[0106] 为了实现在弱网环境下,流畅地传输视频数据,可以根据可用带宽和可用帧率,对视频数据进行丢帧处理,得到丢帧处理后的视频数据。当可用带宽和可用帧率较大时,在丢帧处理时,可以舍弃较少的帧,保留较多的原始帧。当可用带宽和可用帧率较小时,在丢帧处理时,则需要舍弃较多的帧,而仅保留较少的原始帧。
[0107] 步骤103、根据可用带宽和可用帧率,对丢帧处理后的视频数据进行编码,得到编码后的视频数据。
[0108] 在根据步骤102对视频数据进行丢帧处理后,需要采用预定编码算法对视频数据进行编码压缩,以用于传输。
[0109] 视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式。视频流传输中最为重要的编解码标准有国际电联的H.261、H.263、H.264,以及M-JPEG(Motion-Join Photographic Experts Group,运动静止图像专家组)和MPEG(Moving Picture Experts Group,动态图像专家组)系列标准等。
[0110] 步骤104、向服务器发送编码后的视频数据。
[0111] 根据步骤103对视频数据编码后,可以将经编码的视频数据发送给服务器。
[0112] 综上所述,本发明实施例视频发送端根据服务器发送的反馈信息得到可用带宽和可用帧率,进而对视频数据进行丢帧处理,使得视频数据量得以减小,然后对经丢帧处理的视频数据进行编码发送,使得该实时视频传输平滑了视频码率,实现了自适应编码调整,从而在弱网环境下保证了视频发送端实时发送视频的画质和流畅度。
[0113] 图2为本发明另一实施例提供的实时视频传输方法的流程示意图,如图2所示,该方法应用于实时视频传输系统中的服务器,实时视频传输系统包括服务器、视频发送端和视频播放端,该方法包括:
[0114] 步骤201、向视频发送端发送反馈信息。
[0115] 其中,反馈信息包括:重传请求信息、缓冲时长、预估网络带宽、丢包率,反馈信息用于计算可用带宽和可用帧率。
[0116] 在服务器接收到来自视频发送端的视频数据之后,可以根据所接收到的视频数据,确定重传请求信息,并且计算缓冲时长、预估网络带宽、丢包率,并且将这些数据作为反馈信息发送给视频发送端,以用于计算供视频发送端使用的可用带宽和可用帧率。
[0117] 步骤202、接收视频发送端发送的视频数据。
[0118] 其中,视频数据为视频发送端根据可用带宽和可用帧率进行丢帧处理并编码得到的。
[0119] 服务器除了根据已经接收到的视频数据来产生反馈信息并发送至视频发送端之外,同时接收来自视频发送端的视频数据,并且根据该视频数据来产生后续的反馈信息。该视频数据是视频发送端根据可用带宽和可用帧率进行丢帧处理并编码得到的。其中,可用带宽和可用帧率是视频发送端根据在此之前已经接收到的由服务器发送的反馈信息而计算得到的。
[0120] 综上所述,本发明实施例服务器生成反馈信息发送至视频发送端,反馈信息用于视频发送端计算可用带宽和可用帧率,进而对视频数据进行丢帧处理并进行编码发送给服务器,使得该实时视频传输平滑了视频码率,实现了自适应编码调整,从而在弱网环境下保证了视频发送端实时传输视频的画质和流畅度。
[0121] 图3为本发明实施例提供的交互示意图,如图3所示,该交互示意图示出了应用于实时视频传输系统的实时视频传输方法,实时视频传输系统包括服务器、视频发送端和视频播放端。
[0122] 步骤301、根据预先接收到的视频数据,生成重传请求信息。
[0123] 本步骤301由服务器执行。重传请求信息用于指示视频发送端重传被标识的视频数据。
[0124] 可选地,还可以缓存预先接收到的视频数据,得到经缓存的视频数据;根据预定缓冲时长和经缓存的视频数据,得到待解码视频数据;根据待解码视频数据,计算反馈信息中的缓冲时长;根据预先接收到的视频数据,得到视频数据的接收码率和丢包率;根据接收码率、丢包率和缓冲时长,计算得到预估网络带宽。
[0125] 在接收到视频数据后,可以执行FEC(Forward Error Correction,前向纠错)恢复,然后进行缓冲,接收缓冲反馈丢包情况,生成重传请求,根据当前接收码率、传输时延和丢包率计算预估带宽,根据缓冲延时弹出数据包组,组成数据帧,反馈帧完整性以及帧传输延时,以计算缓冲延时。
[0126] 步骤302、向视频发送端发送反馈信息。
[0127] 本步骤302由服务器执行,具体如步骤201中所述,其中,反馈信息包括:重传请求信息、缓冲时长、预估网络带宽、丢包率,反馈信息用于计算可用带宽和可用帧率。
[0128] 步骤303、根据服务器发送的反馈信息,计算得到可用带宽和可用帧率。
[0129] 本步骤303由视频发送端执行,与步骤101类似。
[0130] 可选地,视频发送端根据反馈的控制信息以及重传、FEC等信息计算可用带宽和可用帧率,计算重传预估带宽和窗口大小,然后计算FEC预估带宽。其中,FEC是增加数据通讯可信度的方法。在单向通讯信道中,一旦错误被发现,其接收器将无权再请求传输。FEC是利用数据进行传输冗余信息的方法,当传输中出现错误,将允许接收器再建数据。
[0131] 可选地,本步骤303之前,还可以包括由视频发送端执行的如下步骤:根据视频发送端的地理位置信息、ISP(Internet Service Provider,互联网服务提供商)信息和链路质量信息等,从多个初始服务器中选择待上传视频数据的服务器,然后向该服务器发送初始视频数据,从而使得该服务器针对所接收到的视频数据而生成反馈信息。
[0132] 步骤304、根据可用带宽和可用帧率,计算得到预估码率。
[0133] 本步骤304由视频发送端执行。
[0134] 视频码率就是数据传输时单位时间传送的数据位数,一般采用的单位是kbps(千位每秒),也就是取样率,单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件。因此,可以首先根据可用带宽和可用帧率计算出预估码率。
[0135] 步骤305、根据可用带宽和预估码率,对视频数据进行丢帧处理,得到丢帧处理后的视频数据。
[0136] 本步骤305由视频发送端执行。
[0137] 在计算得到可用带宽和预估码率之后,可以根据步骤102中所述进行处理,得到丢帧处理后的视频数据。
[0138] 步骤306、根据可用带宽和可用帧率,对丢帧处理后的视频数据进行编码,得到编码后的视频数据。
[0139] 本步骤306由视频发送端执行。
[0140] 可以如步骤103中所述,对丢帧处理后的视频数据进行编码。
[0141] 步骤307、向服务器发送编码后的视频数据。
[0142] 本步骤307由视频发送端执行。
[0143] 可以如步骤104中所述,将编码后的视频数据发送给服务器。
[0144] 可选地,可以缓存编码后的视频数据,得到经缓存的视频数据;根据可用带宽和可用帧率,计算得到预估重传带宽和重传窗口,重传窗口用于限制每次重传的数据量;根据重传请求信息、预估重传带宽、重传窗口以及经缓存的视频数据,确定待重传视频数据;向服务器发送待重传视频数据。
[0145] 视频发送端根据可用带宽和可用帧率编码,编码一帧数据后用于封装,同时反馈编码的帧类型、帧数据大小、帧率、画面组(Group Of Picture,GOP)长度用于计算。视频发送端可以合并重传请求,调用缓存的视频数据,并根据预估重传带宽和窗口大小执行重传,超出窗口限制的剩余请求包等待下一个窗口发送。
[0146] 可选地,还可以根据可用带宽和可用帧率,计算得到预估前向纠错带宽;根据丢包率、缓冲时长、预估前向纠错带宽,对编码后的视频数据进行前向纠错,得到纠错后的视频数据;向服务器发送纠错后的视频数据。
[0147] 可以根据丢包率、缓冲时长、预估FEC带宽计算冗余度,划分发送数据包组并生成FEC包用于实时网络传输,实时传输网可以选择最优路径传输视频数据包。
[0148] 步骤308、接收视频发送端发送的视频数据。
[0149] 本步骤308由服务器执行,具体如步骤202中所述。
[0150] 步骤309、检测待解码视频数据中的画面组的完整性。
[0151] 本步骤309由服务器执行。
[0152] 当服务器接收到视频发送端发送的视频数据后,则可以检测视频数据中GOP的完整性。将服务器接收的视频数据进行转码成图像,然后对图像的完整性进行检测,若发现有图像损坏,则对损坏的图像进行处理。
[0153] 步骤310、丢弃不完整的画面组,得到待发送视频数据。
[0154] 本步骤310由服务器执行。
[0155] 当服务器检测到某帧图像损坏,也就是GOP出现丢包时,将损坏的图像丢弃,然后将没有损坏的图像进行重新进行编码。
[0156] 步骤311、向视频播放端发送待发送视频数据用于解码播放。
[0157] 本步骤311由服务器执行,服务器将步骤310中重新编码生成的视频数据发送至视频播放端,用于解码播放。
[0158] 可选地,服务器可以根据视频播放端和服务器的地理位置信息、ISP信息、链路质量信息等,采用动态路由的方式,确定从服务器向视频播放端传输待发送视频数据的目标传输路径,该目标传输路径可以为可供选择的所有传输路径中的最优路径,然后经由该目标传输路径,向视频播放端发送待发送视频数据。
[0159] 需要说明的是,本发明实施例的实时传输协议在所有的发送端和接收端之间(例如,视频发送端和服务器之间、各个转发服务器之间、服务器和视频播放端之间)都会执行。另外,对于编码功能的控制仅在视频发送端执行,在其他端(例如,服务器和视频播放端)上仅会根据反馈动态调节重传和FEC等的工作情况。
[0160] 综上所述,本发明实施例中视频发送端根据服务器发送的反馈信息得到可用带宽和可用帧率,进而对视频数据进行丢帧处理,使得视频数据量得以减小,然后对经丢帧处理的视频数据进行编码发送,使得该实时视频传输平滑了视频码率,实现了自适应编码调整,保证了实时传输视频画质和流畅度,另外服务器根据播放和重传采用GOP丢弃方式,避免花屏问题,同时避免不必要的重传请求消耗带宽,从而在弱网环境下保证了视频播放端所播放的视频的画质和流畅度。
[0161] 图4为本发明一实施例提供的实时视频传输装置的结构示意图,如图4所示,该装置应用于实时视频传输系统中的视频发送端,实时视频传输系统包括视频发送端和服务器,该装置包括:
[0162] 第一计算模块401,用于根据服务器发送的反馈信息,计算得到可用带宽和可用帧率,反馈信息包括:重传请求信息、缓冲时长、预估网络带宽、丢包率;
[0163] 丢帧处理模块402,用于根据可用带宽和可用帧率,对视频数据进行丢帧处理,得到丢帧处理后的视频数据;
[0164] 编码模块403,用于根据可用带宽和可用帧率,对丢帧处理后的视频数据进行编码,得到编码后的视频数据;
[0165] 视频数据发送模块404,用于向服务器发送编码后的视频数据。
[0166] 可选地,丢帧处理模块402,具体用于:
[0167] 根据可用带宽和可用帧率,计算得到预估码率;
[0168] 根据可用带宽和预估码率,对视频数据进行丢帧处理,得到丢帧处理后的视频数据。
[0169] 可选地,视频数据发送模块404,具体用于:
[0170] 缓存编码后的视频数据,得到经缓存的视频数据;
[0171] 根据可用带宽和可用帧率,计算得到预估重传带宽和重传窗口,重传窗口用于限制每次重传的数据量;
[0172] 根据重传请求信息、预估重传带宽、重传窗口以及经缓存的视频数据,确定待重传视频数据;
[0173] 向服务器发送待重传视频数据。
[0174] 可选地,如图5所示,该装置还包括服务器选择模块405,该服务器选择模块405用于:
[0175] 根据视频发送端的地理位置信息、互联网服务提供商信息和链路质量信息,从多个初始服务器中选择服务器;
[0176] 向服务器发送初始视频数据。
[0177] 可选地,视频数据发送模块404,具体还用于:
[0178] 根据可用带宽和可用帧率,计算得到预估前向纠错带宽;
[0179] 根据丢包率、缓冲时长、预估前向纠错带宽,对编码后的视频数据进行前向纠错,得到纠错后的视频数据;
[0180] 向服务器发送纠错后的视频数据。
[0181] 综上所述,本发明实施例的实时视频传输装置用于视频发送端,使得视频发送端根据服务器发送的反馈信息得到可用带宽和可用帧率,进而对视频数据进行丢帧处理,使得视频数据量得以减小,然后对经丢帧处理的视频数据进行编码发送,使得该实时视频传输平滑了视频码率,实现了自适应编码调整,从而在弱网环境下保证了视频发送端实时发送视频的画质和流畅度。
[0182] 图6为本发明又一实施例提供的实时视频传输装置的结构示意图,如图6所示,该装置应用于实时视频传输系统中的服务器,实时视频传输系统包括服务器、视频发送端和视频播放端,该装置包括:
[0183] 反馈信息发送模块501,用于向视频发送端发送反馈信息,反馈信息包括:重传请求信息、缓冲时长、预估网络带宽、丢包率,反馈信息用于计算可用带宽和可用帧率;
[0184] 视频数据接收模块502,用于接收视频发送端发送的视频数据,其中,视频数据为视频发送端根据可用带宽和可用帧率进行丢帧处理并编码得到的。
[0185] 可选地,如图7所示,该装置还包括:
[0186] 请求信息生成模块503,用于根据预先接收到的视频数据,生成重传请求信息,重传请求信息用于指示视频发送端重传被标识的视频数据。
[0187] 可选地,该装置还包括第二计算模块504,该第二计算模块504用于:
[0188] 缓存预先接收到的视频数据,得到经缓存的视频数据;
[0189] 根据预定缓冲时长和经缓存的视频数据,得到待解码视频数据;
[0190] 根据待解码视频数据,计算反馈信息中的缓冲时长;
[0191] 根据预先接收到的视频数据,得到视频数据的接收码率和丢包率;
[0192] 根据接收码率、丢包率和缓冲时长,计算得到预估网络带宽。
[0193] 可选地,该装置还包括:
[0194] 画面组检测模块505,用于检测待解码视频数据中的画面组的完整性;
[0195] 画面组筛选模块506,用于丢弃不完整的画面组,得到待发送视频数据;
[0196] 播放视频发送模块507,用于向视频播放端发送待发送视频数据用于解码播放。
[0197] 可选地,该播放视频发送模块507,具体用于:
[0198] 根据视频播放端和服务器的地理位置信息、互联网服务提供商信息、链路质量信息,采用动态路由的方式,确定从服务器向视频播放端传输待发送视频数据的目标传输路径;
[0199] 经由目标传输路径,向视频播放端发送待发送视频数据。
[0200] 本发明实施例的实时视频传输装置用于服务器,使得服务器生成反馈信息发送至视频发送端,反馈信息用于视频发送端计算可用带宽和可用帧率,进而对视频数据进行丢帧处理并进行编码发送给服务器,使得该实时视频传输平滑了视频码率,实现了自适应编码调整,从而在弱网环境下保证了视频发送端实时传输视频的画质和流畅度。
[0201] 上述装置用于执行前述实施例提供的方法,其实现原理和技术效果类似,在此不再赘述。
[0202] 以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器(digital singnal processor,简称DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(Central Processing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称SOC)的形式实现。
[0203] 图8为本发明实施例提供的实时视频传输装置的流程示意图,该装置可以集成于终端设备或者终端设备的芯片,该终端可以是具备图像处理功能的计算设备。
[0204] 该装置包括:存储器801、处理器802。
[0205] 存储器801用于存储程序,处理器802调用存储器801存储的程序,以执行上述方法实施例。具体实现方式和技术效果类似,这里不再赘述。
[0206] 可选地,本发明还提供一种程序产品,例如计算机可读存储介质,包括程序,该程序在被处理器执行时用于执行上述方法实施例。
[0207] 在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0208] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0209] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
[0210] 上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。