封装待传输视频数据生成、视频传输方法、系统及设备与流程

    专利查询2022-07-09  155



    1.本发明涉及视频传输技术领域,尤其涉及一种封装待传输视频数据生成、视频传输方法、系统及设备。


    背景技术:

    2.udp(user datagram protocol)用户数据报协议,属于tcp/ip协议族中的传输层,是实时视频传输中使用较多的一种协议,是无连接的,相比于传输层的另一种协议tcp(有连接),由于没有复杂的控制过程,更能保证视频的实时性。
    3.目前使用较多的udp视频传输协议是rtsp(real time streaming protocol,实时流传输协议,tcp/ip协议中的应用层协议,一种多媒体信息传输协议)/udp协议,其为一种标准的媒体传输协议,先通过rtsp协议交互信令,协商传输的udp端口号,再通过udp端口传输视频流。但使用rtsp/udp协议,端口占用较多,系统资源占用大。


    技术实现要素:

    4.鉴于以上所述现有技术的缺点,本发明提供一种封装待传输视频数据生成、视频传输方法、系统及设备,以解决上述技术问题。
    5.第一方面,本发明提供的一种封装待传输视频数据的生成方法,所述方法包括:
    6.获取待传输视频流和取流请求信息,并生成所述取流请求信息的请求信息标识,所述取流请求信息包括请求地址;
    7.根据所述请求信息标识、待传输视频流和请求地址生成封装待传输视频数据。
    8.可选的,所述封装待传输视频数据包括自定义媒体帧和/或用户数据报协议,所述自定义媒体帧包括根据所述待传输视频流生成的至少一部分帧数据以及以下至少之一:
    9.帧类型、编码类型、帧长度和时间戳。
    10.可选的,所述封装待传输视频数据包括自定义封装格式头,所述自定义封装格式头包括以下至少之一:
    11.头部标志、尾部标志、包序号、请求信息标识和预留空白字节。
    12.可选的,若所述封装待传输视频数据包括自定义封装格式头和自定义媒体帧,所述自定义封装格式头包括头部标志、尾部标志和包序号,且根据所述待传输视频流所生成帧数据的数据总大小大于预设大小阈值,所述方法还包括:
    13.根据所述数据总大小将所述帧数据划分为至少两个子帧数据;
    14.按照各所述子帧数据在所述帧数据中的原始顺序,将各所述子帧数据分别封装为子封装待传输视频数据,此时,所述封装待传输视频数据包括各所述子封装待传输视频数据,其中,各所述子封装待传输视频数据中包序号的包排序与所述原始顺序相同,所述包排序最前的所述子封装待传输视频数据中所述头部标志表征为头部,所述包排序最后的所述子封装待传输视频数据中所述尾部标志表征为尾部。
    15.第二方面,本发明还提供了一种端口复用的视频传输方法,所述方法包括:
    16.获取至少两个取流请求信息,并生成各所述取流请求信息的请求信息标识,所述取流请求信息包括请求流源信息和端口,至少两个取流请求信息的端口相同;
    17.分别根据各所述取流请求信息的请求流源信息确定至少一个所述取流请求信息对应的待传输视频流;
    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.监听模块,用于监听所述端口,以接收封装待传输视频数据,并将各请求信息标识所对应的所述封装待传输视频数据分别组装为完整视频帧,所述封装待传输视频数据的生成方式包括如第一方面任一项所述的封装待传输视频数据的生成方法。
    53.第七方面,本发明还提供了一种电子设备,包括处理器、存储器和通信总线;
    54.所述通信总线用于将所述处理器和存储器连接;
    55.所述处理器用于执行所述存储器中存储的计算机程序,以实现如上述中任一项实施例所述的方法。
    56.第八方面,本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,
    57.所述计算机程序用于使计算机执行如上述任一项实施例所述的方法。
    58.本发明的有益效果:本发明提出的一种封装待传输视频数据生成、视频传输方法、系统及设备,该封装待传输视频数据生成方法通过将请求信息标识封装在封装待传输视频数据中,可以实现媒体数据发送和接收端口的复用,节省系统资源。
    附图说明
    59.图1是本发明一实施例中提供的一种封装待传输视频数据的生成方法的一种流程示意图;
    60.图2是本发明一实施例中提供的一种相关技术中视频传输方式的一种示意图;
    61.图3是本发明一实施例中提供的采用本发明提供的方法的视频传输方式的一种示意图;
    62.图4是本发明一实施例中提供的自定义媒体帧格式的一种示意图;
    63.图5是本发明一实施例中提供的自定义udp封装格式头的一种示意图;
    64.图6是本发明一实施例提供的封装待传输视频数据的视频封装协议分层的一种结构示意图;
    65.图7是本发明一实施例中提供的端口复用的视频传输方法的一种流程示意图;
    66.图8是本发明一实施例中提供的端口复用的视频传输方法的另一种流程示意图;
    67.图9是本发明一实施例中提供的视频流请求信令交互方式的一种流程示意图;
    68.图10是本发明一实施例中提供的流源流id映射表示的一种示意图;
    69.图11是本发明一实施例中提供的流id发送地址映射表示的一种示意图;
    70.图12是本发明一实施例中提供的视频流数据交互的一种流程示意图;
    71.图13是本发明一实施例中提供的请求流id映射表示的一种示意图;
    72.图14是本发明一实施例中提供的封装待传输视频数据的生成系统的一种结构示意图;
    73.图15是本发明一实施例中提供的端口复用的视频传输系统的一种结构示意图;
    74.图16是本发明一实施例中提供的端口复用的视频传输系统的另一种结构示意图;
    75.图17是本发明一实施例提供的一种电子设备的结构示意图。
    具体实施方式
    76.以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
    77.需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
    78.在下文描述中,探讨了大量细节,以提供对本发明实施例的更透彻的解释,然而,对本领域技术人员来说,可以在没有这些具体细节的情况下实施本发明的实施例是显而易见的,在其他实施例中,以方框图的形式而不是以细节的形式来示出公知的结构和设备,以避免使本发明的实施例难以理解。
    79.参见图1,本实施例提供了一种封装待传输视频数据的生成方法,该方法包括:
    80.步骤s101:获取待传输视频流和取流请求信息,并生成取流请求信息的请求信息
    标识。其中,取流请求信息包括请求地址。
    81.步骤s102:根据请求信息标识、待传输视频流和请求地址生成封装待传输视频数据。
    82.可选的,请求信息标识为该取流请求信息在服务端设备上的全局唯一标识。取流请求信息所请求的视频流可以是实时视频流等。
    83.通过将请求信息标识封装在封装待传输视频数据中,可以实现媒体数据发送和接收端口的复用,节省系统资源。当端口接收到封装待传输视频数据后,可以通过读取该封装待传输视频数据中的请求信息标识,进而通过预先设定好的发送地址-请求信息标识映射关系知晓该请求信息标识所对应的发送地址,对应将封装待传输视频数据发送到相应的发送地址。与相关技术中,如图2所示,服务端所发送的每一个视频流(图2中所示的视频流1、2、3、4)都通过一个对应的端口(图2中所示的端口1111、2222、3333、4444)进行分发,以满足一个取流请求(请求1、2、3、4)。视频传输端口无法复用,每一个视频流的发送和接收就需要新增至少一个端口,在有大量视频流请求的设备中,会占用大量的系统资源。参见图3,本实施例提供的封装待传输视频数据的生成方法,服务端所发送的每一个视频流(图3中所示的视频流1、2、3、4)都通过一个相同的端口(图3中所示的端口1111)进行分发,通过封装待传输视频数据中所封存的请求信息标识以及预设的发送地址-请求信息标识映射关系(图3中所示的端口id映射表)分发到对应的发送地址,以满足各取流请求(请求1、2、3、4),能够实现将不同视频流和不同的取流请求经由同一个端口进行分发,节约了端口数量,实现了端口复用,节约系统资源的占用。通过图2和图3的对比可以得到,以传输4路视频流为例,采用相关技术的数据生成方法需要4个端口,而采用本实施例提供的方法则能够实现端口复用,仅需要一个端口即可完成4路视频流的分发。
    84.可选的,封装待传输视频数据包括自定义媒体帧和/或用户数据报协议,自定义媒体帧包括根据待传输视频流生成的至少一部分帧数据以及以下至少之一:
    85.帧类型、编码类型、帧长度和时间戳。
    86.其中,用户数据报协议可以是tcp/ip协议栈的udp协议层等。
    87.其中,帧类型用来区分是关键帧(i帧)还是差分帧(p帧),编码类型用来标识是哪种编码,如是h264还是h265;时间戳用来标识待传输视频流的当前帧所在的时间位置。也即,帧类型包括关键帧或差分帧,编码类型包括视频帧的编码方式,帧长度为其所包括的至少一部分帧数据的长度(大小)。通过自定义媒体帧格式,将视频编码信息封装到媒体帧(封装待传输视频数据)中,能够省去了该封装待传输视频数据在视频传输过程中相关技术中rtsp的sdp信息交互。
    88.一种可选的实现方式中,参见图4,图4为一种自定义媒体帧格式的示意图,帧类型可以为2字节、编码类型可以为2字节,帧长度可以为4字节,时间戳为8字节,帧数据的长度不定长,也可以设置有自定义大小的阈值。采用该自定义媒体帧的封装方式,相比于rtp头的12个字节,自定义头只有8个字节,减少传输数据量,节省了带宽。
    89.可选的,封装待传输视频数据包括自定义封装格式头,自定义封装格式头包括以下至少之一:
    90.头部标志、尾部标志、包序号、请求信息标识和预留空白字节。
    91.其中,通过头部标志和尾部标志可以识别一帧分片后的封装待传输视频数据是头
    部、中间部分还是尾部,包序号用来处理udp传输中乱序的问题,若存在分包的情况,也即下述实施例中封装待传输视频数据包括多个子封装待传输视频数据时,各子封装待传输视频数据的传输顺序按照该包序号的包排序来进行传输,请求信息标识用来实现端口复用。
    92.参见图5,图5为一种自定义udp封装格式头的格式示意图,如该图所示,头部标志h预留1字节,尾部标志t预留1字节,预留空白字节(图中的预留)为14字节,包序号为2字节,请求信息标识(图中的流id)为4字节。
    93.参见图6,图6为一种封装待传输视频数据的视频封装协议分层示意图,如图6所示,自定义封装格式头(图中的自定义udp封装格式头)在用户数据报协议(可以为tcp/ip协议栈的udp层,图中的udp)之上,为固定8字节头,之上承载的是自定义媒体帧(图中的自定义视频帧),其前面为固定16字节,加上后面的一个完整的编码视频帧,长度不定(一般p帧20-80kb,i帧100-300kb)。
    94.可选的,若封装待传输视频数据包括自定义封装格式头和自定义媒体帧,自定义封装格式头包括头部标志、尾部标志和包序号,且根据待传输视频流所生成帧数据的数据总大小大于预设大小阈值,该方法还包括:
    95.根据数据总大小将帧数据划分为至少两个子帧数据;
    96.按照各子帧数据在帧数据中的原始顺序,将各子帧数据分别封装为子封装待传输视频数据,此时,封装待传输视频数据包括各子封装待传输视频数据,其中,各子封装待传输视频数据中包序号的包排序与原始顺序相同,包排序最前的子封装待传输视频数据中头部标志表征为头部,包排序最后的子封装待传输视频数据中尾部标志表征为尾部。
    97.换句话说,待传输视频流可能包括一个或多个视频帧,对该待传输视频流进行编码后,得到的帧数据的数据长度较长,不利于数据传输,可能存在丢包等问题,故需要对其进行分包。可选的,在对待传输视频流进行封装得到封装待传输视频数据时,可以按照每一帧分别进行封装。当其中某一帧本身编码后的帧数据大小较大(长度较长)时,对该帧进行分包。例如,将一帧视频帧拆分为若干个mtu大小,为了减小网络传输的丢包,一般会将通过udp协议发送的数据拆分为小于1个mtu大小传输,再将每个拆分后的视频帧写入自定义媒体帧。
    98.下面以待传输视频流中一帧视频帧进行封装为例,通过一个具体的实施例示例性的对上述对帧数据划分并得到子封装待传输视频数据的方法进行示例性的说明,
    99.将一帧视频帧m设为h264编码的i帧,大小为4kb,首先将此码流封装为自定义媒体帧,该视频帧m为取流请求信息n所请求的数据,取流请求信息n的请求信息标识(此处记为流id)3156。
    100.帧类型1(i帧)编码类型1(h264)帧长度4096,时间戳:163578638,后面为h264帧数据。
    101.此时自定义媒体帧总长度4096 16字节媒体帧头 8字节udp封装头=4120字节,大于1个mtu大小,此时需要对其分包,分为4个包,此时需要填写自定义封装格式头:
    102.包1:头部标志h为1,尾部标志t为0,包序号为0,流id为3156;
    103.包2:头部标志h为0,尾部标志t为0,包序号为1,流id为3156;
    104.包3:头部标志h为0,尾部标志t为0,包序号为2,流id为3156;
    105.包4:头部标志h为0,尾部标志t为1,包序号为3,流id为3156;
    106.后续可以通过查询发送地址-请求标识信息映射表可得到请求标识信息为3156所对应的发送地址为192.168.1.2::12345,按照包序号的顺序将此4个包向此地址发出。
    107.需要说明的是上述关于头部标志、尾部标志、包序号以及流id的标识方式仅为一个示例,本领域技术人员可以根据需求自行设定规则。
    108.本实施例提供的封装待传输视频数据的生成方法,通过将请求信息标识封装在封装待传输视频数据中,可以实现媒体数据发送和接收端口的复用,节省系统资源。例如,当端口接收到封装待传输视频数据后,可以通过读取该封装待传输视频数据中的请求信息标识,进而通过预先设定好的发送地址-请求信息标识映射关系知晓该请求信息标识所对应的发送地址,对应将封装待传输视频数据发送到相应的发送地址,能够实现将不同视频流和不同的取流请求经由同一个端口进行分发,节约了端口数量,实现了端口复用,节约系统资源的占用。
    109.本实施例还提供了一种端口复用的视频传输方法,参见图7,该方法包括:
    110.步骤s701:获取至少两个取流请求信息,并生成各取流请求信息的请求信息标识。其中,取流请求信息包括请求流源信息和端口,至少两个取流请求信息的端口相同。
    111.步骤s702:分别根据各取流请求信息的请求流源信息确定至少一个取流请求信息对应的待传输视频流。
    112.步骤s703:将待传输视频流和与待传输视频流对应的一取流请求信息的请求信息标识进行封装,得到一取流请求信息对应的封装待传输视频数据。
    113.步骤s704:分别将封装待传输视频数据通过匹配端口进行传输。其中,匹配端口为封装待传输视频数据对应的一取流请求信息的端口。
    114.本实施例提供的端口复用的视频传输方法可以应用于服务端,在步骤s701之前,该方法还包括服务端与客户端建立tcp连接,取流请求信息可以是同一个客户端发送的,也可以是不同客户端发送的,一个客户端可以发送一个或多个取流请求信息。根据获取到的取流请求信息生成该取流请求信息的请求信息标识的方式可以采用本领域技术人员所知晓的方式,在此不做限定。需要说明的是,对于一个取流请求信息,其对应的请求信息标识是在该服务端全局唯一的。上述客户端可以理解为请求流源的用户,服务端可以理解为提供流源的设备,提供流源的设备可以是一个或多个拍摄设备,如摄像头等。每一个拍摄设备如摄像头又可以由不同分辨率的视频流,给摄像头分配一个数字编号即通道号,每个摄像头的不同分辨率的视频码流叫做码流号,如在一个有2个摄像头,每个摄像头有3路不同分辨率的视频流,总共的视频流有6个。将某一个视频通道的某一码流作为一个流源。此时,一个流源可以对应多个请求信息标识,而一个请求信息标识仅对应有一个流源。
    115.可选的,请求流源信息包括请求通道信息和请求码流信息,初始流源信息包括初始通道信息和初始码流信息,待传输视频流的确定方式包括:
    116.获取一帧视频帧及视频帧的初始通道信息和初始码流信息;
    117.若视频帧的初始流源信息与至少一个取流请求信息的请求流源信息相同,将视频帧确定为取流请求信息对应的待传输视频流。
    118.在一个实施例中,服务端可以对其所有设备进行遍历或采用其他方式,取一个流源(获取一个摄像头等拍摄设备的一个分辨率的视频流,也即获取某一个通道某一个码流的视频流),并获取一帧视频帧,根据该视频帧所出自的初始通道信息和初始码流信息,可
    以知晓该视频帧的初始流源信息,再将该初始流源信息与获取到的各请求流源信息进行比对,若两者相同,则说明该视频帧为取流请求信息所对应的取流请求所需要的视频帧,则将该视频帧作为该取流请求信息对应的待传输视频流。可选的,后续可以将与该视频帧来自相同流源的其他视频帧也作为该取流请求信息对应的待传输视频流。
    119.在一个实施例中,该方法还包括:
    120.根据各请求流源信息、各请求信息标识以及提供待传输视频流的设备的初始流源信息生成初始流源信息-请求信息标识映射关系;
    121.根据各请求信息标识和各端口信息生成端口信息-请求信息标识映射关系;
    122.分别根据各取流请求信息的请求流源信息确定至少一个取流请求信息对应的待传输视频流包括,根据初始流源信息-请求信息标识映射关系、端口信息-请求信息标识映射关系以及至少一个视频帧的初始流源信息,从各视频帧中确定至少一个取流请求信息对应的待传输视频流。
    123.在一个实施例中,取流请求信息还包括发送地址,该方法还包括:
    124.根据各请求信息标识和各发送地址生成发送地址-请求信息标识映射关系,并根据发送地址-请求信息标识映射关系将得到的各封装待传输视频数据通过匹配端口传输到对应的发送地址。
    125.可选的,服务端在获取到取流请求信息后,生成该取流请求信息对应的请求信息标识,并根据请求流源信息在提供待传输视频流的设备(服务端)中各流源的初始流源信息中确定与该请求流源信息对应的初始流源信息,并生成初始流源信息-请求信息标识映射关系,可以以初始流源信息-请求信息标识映射表的方式实现。服务端在获取到取流请求信息后,生成该取流请求信息对应的请求信息标识,并根据请求流源信息中的端口信息创建端口信息-请求信息标识映射关系,可以以端口信息-请求信息标识映射表的方式实现。服务端在获取到取流请求信息后,生成该取流请求信息对应的请求信息标识,并根据请求流源信息中的发送地址创建发送地址-请求信息标识映射关系,可以以发送地址-请求信息标识映射表的方式实现。需要说明的是,上述提到的三种映射关系中任意一种可以是由服务端直接进行创建,也可以是由第三方在获取到相关信息后进行创建,并将其创建的映射关系反馈给服务端。
    126.例如,取流请求信息中的请求流源信息为“通道1码流1”,取流请求信息的请求信息标识为“流id:1”,服务端的流源中通道1码流1的初始流源信息为“流源1”,此时“流源1”与“流id:1”存在映射关系。也即,“流源1”中提取到的视频帧在没有其他限定条件(如需其他权限等)下均为“流id:1”所对应的取流请求信息的待传输视频流。取流请求信息的请求信息标识为“流id:1”,端口为“1111”,此时“流id:1”与“1111”存在映射关系。此时,根据上述两个映射关系,则可以借助请求信息标识“流id:1”知晓将流源1获取到的视频帧通过端口1111进行传输。以上仅是以一个取流请求信息和一个流源来示例说明上述方法,对于多个取流请求信息和多个流源的处理方式,与上述方式类似,当多个取流请求信息的端口相同时,则可以实现端口的复用,由于将请求信息标识封装在封装待传输视频数据中,可以基于请求信息标识和发送地址-请求信息标识映射表知晓该封装待传输视频数据具体分发到哪一发送地址,能够有效避免数据错发。
    127.在一个实施例中,取流请求信息还包括发送地址,封装待传输视频数据的生成方
    式可以采用如上述任一项实施例所述的封装待传输视频数据的生成方法,具体方式可参见上述实施例,在此不再赘述。
    128.在一个实施例中,步骤s701获取至少两个取流请求信息之前,该方法还包括:
    129.服务端获取客户端发送的连接请求,建立服务端与客户端之间的连接,该连接可以是tcp连接;
    130.服务端获取客户端发送的登录请求,并向客户端反馈登录成功消息。
    131.本实施例提供的端口复用的视频传输方法,通过采用封装有请求信息标识封装的封装待传输视频数据进行数据传输,可以实现媒体数据发送和接收端口的复用,节省系统资源。例如,当端口接收到封装待传输视频数据后,可以通过读取该封装待传输视频数据中的请求信息标识,进而通过预先设定好的发送地址-请求信息标识映射关系知晓该请求信息标识所对应的发送地址,对应将封装待传输视频数据发送到相应的发送地址,能够实现将不同视频流和不同的取流请求经由同一个端口进行分发,节约了端口数量,实现了端口复用,节约系统资源的占用。同时,该数据传输过程中字需要交换登录、请求的信令,不再需要繁琐复杂的rtsp信令交互,特别是rtsp的sdp信息的交互,信令交互更少,更灵活。
    132.参见图8,本实施例还提供了一种端口复用的视频传输方法,该方法包括:
    133.步骤s801:发送至少两个取流请求信息。其中,取流请求信息包括请求流源信息和端口;
    134.步骤s802:获取各取流请求信息的请求信息标识。
    135.步骤s803:监听端口,以接收封装待传输视频数据,并将各请求信息标识所对应的封装待传输视频数据分别组装为完整视频帧。其中,封装待传输视频数据的生成方式包括上述任一项实施例所述的封装待传输视频数据的生成方法,具体方式可参见上述实施例,在此不再赘述。
    136.可选的,若封装待传输视频数据包括自定义封装格式头和自定义媒体帧,自定义封装格式头包括头部标志、尾部标志和包序号,且根据待传输视频流所生成帧数据的数据总大小大于预设数据阈值,根据数据总大小将帧数据划分为至少两个子帧数据,按照各子帧数据在帧数据中的原始顺序,将各子帧数据分别封装为子封装待传输视频数据,此时,封装待传输视频数据包括各子封装待传输视频数据,其中,各子封装待传输视频数据中包序号的包排序与原始顺序相同,包排序最前的子封装待传输视频数据中头部标志表征为头部,包排序最后的子封装待传输视频数据中尾部标志表征为尾部,也即,封装待传输视频数据包括多个子封装待传输视频数据,将各请求信息标识所对应的封装待传输视频数据分别组装为完整视频帧包括::
    137.根据请求信息标识和取流请求信息创建取流请求信息-请求信息标识映射关系;
    138.根据封装待传输视频数据的请求信息标识匹配对应的取流请求信息;
    139.根据取流请求信息所对应的各子封装待传输视频数据中包序号的包排序将各子帧数据组装为完整视频帧。
    140.在一个实施例中,步骤s801发送至少两个取流请求信息之前,该方法还包括:
    141.发送连接请求,并接收服务端反馈的连接成功消息;
    142.发送登录请求,并接收服务端反馈的登录成功消息。
    143.在一个实施例中,根据一取流请求信息所对应的各子封装待传输视频数据中包序
    号的包排序将各子帧数据组装为完整视频帧之前,该方法还包括:
    144.获取各子封装待传输视频数据中的头部标志和尾部标志,以核对所述包排序的准确性。若某一个子封装待传输视频数据的头部标志和尾部标志标明该子封装待传输视频数据为中间包,但包排序却为第一个包(头部包),包排序不准确,此时说明还存在尚未发送的子封装待传输视频数据,或者存在子封装待传输视频数据丢包,则可以发出排序不正确的提示。
    145.本实施例提供的端口复用的视频传输方法,通过在客户端发送取流请求信息时,就预先设定共用的端口,根据服务端下发的请求信息标识形成请求信息标识与取流请求信息之间的映射对应关系,进而在监听到相应的端口存在封装待传输视频数据并接收该封装待传输视频数据后,能够基于请求信息标识知晓该封装待传输视频数据对应为哪一个取流请求信息,并根据封装待传输视频数据生成完整的完整视频帧。
    146.可选的,当待传输视频流被拆分为多个子封装待传输视频数据进行分发时,可以根据各子封装待传输视频数据中的包序号进行子封装待传输视频数据的排序,并将同一个取流请求信息对应的各子封装待传输视频数据进行组合,得到完整视频帧。
    147.可选的,还可以通过各子封装待传输视频数据中的头部标识和尾部标识以及包序号来进一步检查视频数据是否存在丢包,乱序等问题。
    148.以第一种端口复用的视频传输方法应用于服务端,第二种端口复用的视频传输方法应用于客户端,下面通过一个具体的实施例示例性说明以上两种端口复用的视频传输方法的实现方式。参见图8和图9,该具体的方法包括:
    149.步骤1:客户端和服务端交互请求视频流信令,信令交互使用tcp协议,参见图8,该视频流请求信令交互方式具体为:
    150.步骤1.1:建立tcp连接。
    151.客户端向服务端建立tcp连接,服务端反馈连接建立成功。
    152.步骤1.2:发送登录请求。
    153.客户端向服务端发送登录请求,服务端反馈登录成功。
    154.步骤1.3:发送实时流请求。
    155.客户端向服务端发送取流请求(取流请求信息),附带需要的通道号和码流号(请求流源信息),服务端需要发送的ip地址(发送地址)和udp端口号(端口)。
    156.实时流请求可以是一个用户发送的,也可以是多个用户发送的。
    157.服务端获取到该取流请求消息生成请求信息标识(流id),并将该流id反馈给客户端。
    158.步骤1.4:生成流id和流源流id映射表,流id发送地址映射表。
    159.服务端对此请求生成一个流id,并生成流源流id映射表,每个流源对应多个id,每个id只能对应一个流源,且每个流id在服务端设备上全局唯一,并将此流id返回给客户端;参见图10,图10为一种流源流id映射表示意图,参见图11,图11为一种流id发送地址映射表示意图,该流id发送地址映射表还包括端口与流id的映射关系。
    160.如图10和图11所示,流源1对应有取流请求标识流id1、2、3,流源2对应有取流请求标识流id:4、5、6,流源3对应有取流请求标识流id:7、8、9,
    ……
    ,流源n对应有取流请求标识流id:x、y、z,这样每个流id都有对应一个流源了;而每个流id都有发送地址映射表,这样每
    个流源都知道其所要发送到哪些地址。
    161.步骤1.5:保存流id,生成请求流id映射表。
    162.客户端保存此流id,生成请求流id映射表;客户端一个流id对应一个请求,不同的请求可以有相同的流源,如图13所示的一种请求流id映射表所示,流id:1对应流请求1,流id:2对应流请求2,流id:7对应流请求3,流id:x对应流请求n,而流id:1和流id:2请求的是同一个流源。
    163.步骤1.6:监听udp端口,等待服务端发送视频流。
    164.客户端监听udp端口,等待接收服务端发来的视频流数据(封装待传输视频数据或子封装待传输视频数据)。
    165.步骤2:客户端和服务端交互视频流数据,视频流发送使用udp协议,如图12所示,视频流数据交互流程包括:
    166.步骤2.1:遍历流源,获取一个流源的一帧视频数据。
    167.服务端取一个流源,获取一帧视频帧。
    168.步骤2.2:获取一个流源对应的一个流id。
    169.服务端从流源流id映射表中获取到映射到此流源上的一个流id。
    170.步骤2.3:封装自定义udo格式视频数据。
    171.服务端创建一个自定义的udp封装(封装待传输视频数据或子封装待传输视频数据),将流id写入自定义的udp封装头(自定义封装格式头)中,udp封装协议分层如图6所示,udp封装格式(自定义封装格式头)如图5所示,将视频帧拆分为若干个mtu大小(为了减小网络传输的丢包,一般会将通过udp协议发送的数据拆分为小于1个mtu大小传输),再将每个拆分后的视频帧写入自定义头(自定义封装格式头),至此自定义udp格式的视频数据封装完毕。
    172.步骤2.4:向流id对应的发送地址和端口发送视频数据。
    173.服务端从流id发送地址映射表中获取此流id的发送地址,向此地址发送自定义udp格式的视频帧(封装待传输视频数据或子封装待传输视频数据)。
    174.步骤2.5:解析自定义格式数据,得到流id。
    175.客户端从端口接收数据(封装待传输视频数据或子封装待传输视频数据),解析自定义的udp封装头(封装待传输视频数据或子封装待传输视频数据的自定义封装格式),得到此视频流(封装待传输视频数据或子封装待传输视频数据)的流id。
    176.步骤2.6:根据流id匹配对应的视频流请求。
    177.客户端根据保存的请求流id映射表匹配到对应的视频流请求(图8中的实时流请求)。
    178.步骤2.7:将多个自定义封装包组成一个完整的视频帧。
    179.若一个实时流请求所对应的封装待传输视频数据包括多个子封装待传输视频数据,则将各子封装待传输视频数据组装为一个完整的视频帧。也即,客户端将接收到的多个自定义udp格式的视频帧块组装为一个完整视频帧。若一个实时流请求所对应的封装待传输视频数据为一个,也即不包括多个子封装待传输视频数据,则直接将该封装待传输视频数据组装为一个完整视频帧。
    180.通过上述实施例提供的封装待传输视频数据的生成方法,相比于rtp头的12个字
    节,自定义封装格式头只有8个字节,能够减少传输数据量,节省了带宽;在协议头(自定义封装格式头)中加入id以区分不同的流,实现媒体数据发送和接收端口的复用,节省系统资源。
    181.通过上述提供的端口复用的视频传输方法,基于封装待传输视频数据的生成方法所生成的封装待传输视频数据进行视频传输的方式,只有登录、请求流的信令,减少繁琐复杂的rtsp信令交互,同时由于自定义媒体帧格式,将视频编码信息封装到媒体帧中,与相关技术中直接采用rtsp/udp协议,先通过rtsp协议交互信令,协商传输的udp端口号,再通过udp端口传输视频流的方式相比,省去了rtsp的sdp(session description protocol,描述会话协议,主要用于多媒体会话直接的媒体协商)信息交互,信令交互更少,更灵活,使用自定义的媒体流封装格式,可使多路媒体流共用一个端口,减少了系统资源的使用。
    182.下面以网络摄像机ipc和数字硬盘录像机nvr对接举例,ipc作为服务端采用上述第一种提到的端口复用的视频传输方法,nvr作为客户端采用上述第二种提到的端口复用的视频传输方法,ipc的请求信令端口为20000,该具体的实现方式如下:
    183.1.ipc监听tcp端口20000,等待nvr建立连接;
    184.2.nvr连接ipc的2000端口,并向ipc发送登录请求;
    185.3.ipc校验成功后,返回nvr成功消息;
    186.4.nvr向ipc发送请求流信令,包含通道号0和码流号0,附带发送ip192.168.1.2和端口12345;
    187.method:start_stream
    188.data:channel:0,stream:0,ip:192.168.1.2,port:12345
    189.5.ipc查询通道0码流0对应的流源存在,对此请求生成一个流id,并生成两张表:流源流id映射表(表一)和流id发送地址映射表(表二),并将流id返回给客户端。
    190.result:ok
    191.data:streamid:3156
    192.表一、流源流id映射表
    193.流源通道号码流号流id列表1003156
    194.表二、流id发送地址映射表
    195.流id发送ip发送端口3156192.168.1.212345
    196.6.nvr收到返回的流id,生成请求流id映射表(表三),并监听端口12345。
    197.表三、请求流id映射表
    198.请求流id通道号码流号流id1003156
    199.7.ipc从流源1中取出一帧视频帧进行自定义码流格式封装,假设为h264编码的i帧,大小为4kb,首先将此码流封装为自定义媒体帧:
    200.帧类型1(i帧)编码类型1(h264)帧长度4096,时间戳:163578638,后面为h264帧数据。
    201.此时自定义媒体帧总长度4096 16字节媒体帧头 8字节udp封装头=4120字节,大于1个mtu大小,此时需要对其分包,分为4个包,此时需要填写udp封装头:
    202.包1:头部标志h;1,尾部标志t:0,包序号:0,流id:3156;
    203.包2:头部标志h:0,尾部标志t:0,包序号:1,流id:3156;
    204.包3:头部标志h:0,尾部标志t:0,包序号:2,流id:3156;
    205.包4:头部标志h;0,尾部标志t:1,包序号:3,流id:3156。
    206.如上所述,从流源流id映射表中得到当前的流id列表中有3156的流id,将此流id写入udp封装头,查询流id发送地址映射表可得到流3156对应的发送地址192.168.1.2::12345,按照包排序的顺序将此4个包向此地址发出。
    207.8.nvr从监听的udp端口12345收到此4个包,进行解析,首先根据请求流id映射表查到此4个包为请求1的,转给请求1处理,对包进行序号排序后检查4个包的头尾标志是否正确,最终组成一个完整的自定义媒体帧。在nvr向ipc有多个视频拉流请求(取流请求)时,复用端口12345,这样只需要1个端口就实现了多路视频传输。
    208.请参阅图14,本实施例还提供了一种封装待传输视频数据的生成系统1400,该系统包括:
    209.第一获取模块1401,用于获取待传输视频流和取流请求信息,并生成所述取流请求信息的请求信息标识,所述取流请求信息包括请求地址;
    210.生成模块1402,用于根据所述请求信息标识、待传输视频流和请求地址生成封装待传输视频数据。
    211.在本实施例中,该封装待传输视频数据的生成系统实质上是设置了多个模块用以执行上述实施例中的封装待传输视频数据的生成方法,具体功能和技术效果参照上述方法实施例即可,此处不再赘述。
    212.请参阅图15,本实施例还提供了一种端口复用的视频传输系统1500,该系统包括:
    213.第二获取模块1501,用于获取至少两个取流请求信息,并生成各取流请求信息的请求信息标识,取流请求信息包括请求流源信息和端口,至少两个取流请求信息的端口相同;
    214.确定模块1502,用于分别根据各取流请求信息的请求流源信息确定至少一个取流请求信息对应的待传输视频流;
    215.封装模块1503,用于将待传输视频流和与待传输视频流对应的一取流请求信息的请求信息标识进行封装,得到一取流请求信息对应的封装待传输视频数据;
    216.传输模块1504,用于分别将封装待传输视频数据通过匹配端口进行传输,匹配端口为封装待传输视频数据对应的一取流请求信息的端口。
    217.在本实施例中,该端口复用的视频传输系统实质上是设置了多个模块用以执行上述实施例中的第一种端口复用的视频传输方法,具体功能和技术效果参照上述方法实施例即可,此处不再赘述。
    218.请参阅图16,本实施例还提供了一种端口复用的视频传输系统1600,该系统包括:
    219.发送模块1601,用于发送至少两个取流请求信息,所述取流请求信息包括请求流源信息和端口;
    220.第三获取模块1602,用于获取各所述取流请求信息的请求信息标识;
    221.监听模块1603,用于监听所述端口,以接收封装待传输视频数据,并将各请求信息标识所对应的封装待传输视频数据分别组装为完整视频帧,其中,封装待传输视频数据的生成方式采用上述任一项实施例所述的封装待传输视频数据的生成方法。
    222.在本实施例中,该端口复用的视频传输系统实质上是设置了多个模块用以执行上述实施例中的第二种端口复用的视频传输方法,具体功能和技术效果参照上述方法实施例即可,此处不再赘述。
    223.参见图17,本发明实施例还提供了一种电子设备1000,包括处理器1001、存储器1002和通信总线1003;
    224.通信总线1003用于将处理器1001和存储器连接1002;
    225.处理器1001用于执行存储器1002中存储的计算机程序,以实现如上述实施例一中的一个或多个所述的方法。
    226.本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,
    227.计算机程序用于使计算机执行如上述实施例一中的任一项所述的方法。
    228.本技术实施例还提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在设备时,可以使得该设备执行本技术实施例的实施例一所包含步骤的指令(instructions)。
    229.需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、rf(射频)等等,或者上述的任意合适的组合。
    230.上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
    231.可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c ,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)
    或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
    232.附图中的流程图和框图,图示了按照本公开各种实施例的方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
    233.上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
    转载请注明原文地址:https://tc.8miu.com/read-3588.html

    最新回复(0)