摄像头视频数据的推流处理方法、系统、电子设备及车辆与流程

文档序号:30968997发布日期:2022-07-30 20:45阅读:779来源:国知局
导航: X技术> 最新专利> 电子通信装置的制造及其应用技术
摄像头视频数据的推流处理方法、系统、电子设备及车辆与流程

1.本发明涉及视频流处理技术领域,具体涉及一种摄像头视频数据的推流处理方法和系统;另外,还涉及一种电子设备及车辆。


背景技术:

2.近年来,随着网络技术的快速发展,数据推流技术在直播和实时监控场景中的应用越来越普遍。在直播或者实时监控领域中,“推流”指的是将从摄像头中采集到的视频数据经过流媒体协议(如rtmp、rtp、rtsp等)推送到流媒体服务器,进而可以使得用户在浏览器或者移动终端等设备上拉取流媒体服务器上的视频流地址进行播放。在推流的技术实现过程中,通常可使用多种开源框架,比如ffmpeg等。其中ffmpeg由于没有提供硬编码接口,因此,如果要采用ffmpeg进行编码数据的推流方案,则只能采用软编码,而软编码会占用较大的cpu资源,从而降低android平台或linux系统的整体性能。
3.现有技术中,android平台或linux系统提供了mediacodec的硬编码接口,通常利用该硬编码接口,将摄像头中的视频数据硬编码成h.264编码数据,然后再将该编码数据交由ffmpeg以rtmp协议推送到流媒体服务器。但是,在此ffmpeg的rtmp推流过程中,现有的rtmp推流过程繁琐,存在性能差、时延高等缺陷。如果处理不当,就会出现无法拉流播放、播放时延大或者导致推流所在的系统性能低下等问题。因此,如何设计一种能够有效提升系统性能、降低推流时延的摄像头视频数据推流处理方案成为亟待解决的技术问题。


技术实现要素:

4.为此,本发明提供一种摄像头视频数据的推流处理方法,以解决现有技术中存在的摄像头视频数据的推流处理方案局限性较高,导致系统性能和推流时延较差的缺陷。
5.本发明提供一种摄像头视频数据的推流处理方法,包括:
6.获得用户的推流请求指令;
7.基于所述推流请求指令从数据队列中获取相应的编码数据;所述编码数据是将摄像头视频数据进行硬编码处理得到的;
8.在ffmpeg推流处理子线程中,将所述编码数据封装到结构体对象,并在判定所述编码数据为关键帧时,确定所述结构体对象对应的标志位参数,以获得待推流的结构体对象;
9.将所述待推流的结构体对象传输到相应的流媒体服务器。
10.进一步的,所述的摄像头视频数据的推流处理方法,还包括:在将所述待推流的结构体对象传输到相应的流媒体服务器之后,对所述ffmpeg推流处理子线程进行延时操作。
11.进一步的,所述对所述ffmpeg推流处理子线程进行延时操作,具体包括:
12.获取传输所述结构体对象对应的第一当前时间戳信息;
13.基于所述第一当前时间戳信息、初始时间戳信息以及预设的延时模型,确定相应的时间差;其中,所述初始时间戳信息是获取摄像头视频数据对应的时间戳信息;
14.基于所述时间差对所述ffmpeg推流处理子线程进行延时操作。
15.进一步的,所述的摄像头视频数据的推流处理方法,还包括:获得用户的推流请求指令之后,当所述数据队列为空时,对所述ffmpeg推流处理子线程进行延时操作。
16.进一步的,所述当所述数据队列为空时,对所述ffmpeg推流处理子线程进行延时操作,具体包括:在所述ffmpeg推流处理子线程运行过程中,当判定所述数据队列中不存在所述编码数据时进入相应的延时环节,并基于获取的第二当前时间戳信息、初始时间戳信息以及预设的延时模型,确定相应的时间差;其中,所述第二当前时间戳信息是判定所述数据队列为空时对应的时间戳信息,所述初始时间戳信息是获取摄像头视频数据对应的时间戳信息;
17.基于所述时间差对所述推流处理子线程进行相应的延时操作,以实现在编码数据获取过程中释放相应的系统运算资源。
18.进一步的,在获得用户的推流请求指令之前,还包括:
19.获取所述摄像头视频数据;
20.对所述摄像头视频数据进行硬编码处理,获得相应的编码数据;
21.将所述编码数据存储到预设的数据队列;其中,所述数据队列为阻塞型队列。
22.进一步的,所述在判定所述编码数据为关键帧时,确定所述结构体对象对应的标志位参数,获得待推流的结构体对象,具体包括:在判定所述编码数据为关键帧时,确定所述结构体对象中对应的标志位参数为av_pkt_flag_key;其中,所述关键帧包括序列参数集、图像参数集以及即时解码器刷新数据。
23.本发明还提供一种摄像头视频数据的推流处理系统,包括:
24.请求指令获得模块,用于获得用户的推流请求指令;
25.编码数据获取模块,用于基于所述推流请求指令从数据队列中获取相应的编码数据;所述编码数据是将摄像头视频数据进行硬编码处理得到的;
26.ffmpeg推流模块,用于在ffmpeg推流处理子线程中,将所述编码数据封装到结构体对象,并在判定所述编码数据为关键帧时,确定所述结构体对象对应的标志位参数,以获得待推流的结构体对象;
27.数据传输模块,用于将所述待推流的结构体对象传输到相应的流媒体服务器。
28.进一步的,所述的摄像头视频数据的推流处理系统,还包括:第一延迟处理模块,用于在将所述待推流的结构体对象传输到相应的流媒体服务器之后对所述ffmpeg推流处理子线程进行延时操作。
29.进一步的,所述对所述ffmpeg推流处理子线程进行延时操作,具体包括:
30.获取传输所述结构体对象对应的第一当前时间戳信息;
31.基于所述第一当前时间戳信息、初始时间戳信息以及预设的延时模型,确定相应的时间差;其中,所述初始时间戳信息是获取摄像头视频数据对应的时间戳信息;
32.基于所述时间差对所述ffmpeg推流处理子线程进行延时操作。
33.进一步的,所述的摄像头视频数据的推流处理系统,还包括:第二延迟处理模块,用于获得用户的推流请求指令之后,当所述数据队列为空时,对所述ffmpeg推流处理子线程进行延时操作。
34.进一步的,所述当所述数据队列为空时,对所述ffmpeg推流处理子线程进行延时
操作,具体包括:
35.在所述ffmpeg推流处理子线程运行过程中,当判定所述数据队列中不存在所述编码数据时进入相应的延时环节,并基于获取的第二当前时间戳信息、初始时间戳信息以及预设的延时模型,确定相应的时间差;其中,所述第二当前时间戳信息是判定所述数据队列为空时对应的时间戳信息,所述初始时间戳信息是获取摄像头视频数据对应的时间戳信息;
36.基于所述时间差对所述推流处理子线程进行相应的延时操作,以实现在编码数据获取过程中释放相应的系统运算资源。
37.进一步的,在获得用户的推流请求指令之前,还包括:
38.视频数据获取模块,用于获取所述摄像头视频数据;
39.编码处理模块,用于对所述摄像头视频数据进行硬编码处理,获得相应的编码数据;
40.编码数据存储存储模块,用于将所述编码数据存储到预设的数据队列;其中,所述数据队列为阻塞型队列。
41.进一步的,所述ffmpeg推流模块,具体用于:在判定所述编码数据为关键帧时,确定所述结构体对象中对应的标志位参数为av_pkt_flag_key;其中,所述关键帧包括序列参数集、图像参数集以及即时解码器刷新数据。
42.本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述摄像头视频数据的推流处理方法的步骤。
43.本发明还提供一种车辆,包括如上所述电子设备。
44.本发明提供的摄像头视频数据的推流处理方法,通过获得推流请求指令,从数据队列中获取相应的编码数据,并在推流处理子线程中,将所述结构体编码数据封装到结构体对象,并在判定所述编码数据为关键帧后直接确定所述结构体对象对应的标志位参数,以获得待推流的对象;然后将所述待推流的结构体对象传输到相应的流媒体服务器。其能够以高性能和低延时方式获取摄像头视频数据,并将其推送到流媒体服务器,提升了推流全过程的系统性能和降低了推流时延,从而有效节约了系统运算资源。
附图说明
45.为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
46.图1是本发明提供的摄像头视频数据的推流处理方法的流程示意图;
47.图2是本发明提供的摄像头视频数据的推流处理方法的完整流程示意图;
48.图3是本发明提供的onpreviewframe回调接口的逻辑流程示意图;
49.图4是本发明提供的摄像头视频数据的推流处理系统的结构示意图;
50.图5是本发明提供的摄像头视频数据的推流处理方法对应的具体实施框架示意图;
51.图6是本发明提供的电子设备的结构示意图。
具体实施方式
52.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
53.下面基于本发明所述摄像头视频数据的推流处理方法,对其实施例进行详细描述。如图1所示,其为本发明实施例提供的摄像头视频数据的推流处理方法的流程示意图,具体实现过程包括以下步骤(以android平台为例):
54.步骤101:获得用户的推流请求指令。
55.在本发明具体实施过程中,若检测到用户的推流请求指令,比如用户基于android设备端输入的观看指定摄像头的直播指令,则设置标量ispush为true(ispush的初始默认值为false),然后初始化ffmpeg。具体的,初始化动作包括av_register_all()、avformat_network_init()、avformat_new_stream()、av_dump_format()和avformat_write_header()等一系列常规动作。如果初始化失败,比如网络断开、android设备端与流媒体服务器无法通信等情况导致的初始化失败,则不允许执行ffmpeg推流处理,如果初始化完成,则新建一个专门用于ffmpeg推流的处理子线程thread1,即ffmpeg推流处理子线程。
56.需要说明的是,在获得用户的推流请求指令之前,还包括:获取所述摄像头视频数据,并对所述摄像头视频数据进行硬编码处理获得相应的编码数据,然后将所述编码数据存储到预设的数据队列;其中,所述数据队列为阻塞型队列。例如:利用android平台的mediacodec硬编码接口能力,设计数据队列(即阻塞型队列arrayblockingqueue),将摄像头视频数据通过该mediacodec硬编码接口编码成编码数据(比如h.264或h.265编码数据)后,并将该编码数据传输到ffmpeg,提升android系统在ffmpeg推流过程中获取编码数据时的整体性能。
57.具体的,在初始化摄像头的相关参数(如设定分辨率、数据格式、帧数等)之后,可以实时的采集指定的摄像头的视频数据;然后,基于android系统提供的onpreviewframe回调接口获取相应的摄像头视频数据;在初始化mediacodec硬编码接口之后,使用该mediacodec硬编码接口对获取到的摄像头视频数据进行硬编码处理。其中,在onpreviewframe回调接口中执行如图3所示的处理流程:步骤302,首先判断onpreviewframe中是否有编码数据,若是;则执行步骤303获取摄像头视频数据,在获取到摄像头视频数据时会继续执行步骤304记录获取该摄像头视频数据对应的系统当前时间戳,将所述系统当前时间戳作为初始时间戳信息(定义为t1),然后再执行步骤305利用android系统中提供的mediacodec硬编码接口实现对摄像头的视频数据的硬编码处理。在onpreviewframe回调接口的实现过程中,本发明设定了相应的数据队列(即阻塞型队列arrayblockingqueue,可定义为dataqueue)。在获取通过mediacodec硬编码得到的编码数据后,执行步骤306可将该编码数据存储到dataqueue中。在本发明具体实施过程中,基于onpreviewframe回调接口获取所述摄像头视频数据时,相应的获取当前的初始时间戳信息;然后基于mediacodec硬编码接口对所述摄像头的视频数据进行硬编码处理,获得相应
的编码数据;最后将所述编码数据存储到相应的数据队列。
58.步骤102:基于所述推流请求指令从数据队列中获取相应的编码数据;所述编码数据是将摄像头视频数据进行硬编码处理得到的。
59.具体的,所述数据队列为预设的阻塞型队列arrayblockingqueue。所述编码数据可为h.264编码数据或h.265编码数据。如图2所示,本发明实施例中,获取推流请求指令之后,需要首先执行步骤2061判断ispush是否为true,如果不是,则表示当前不需要继续推流处理,如果是,则表示当前需要继续进行推流处理,还需要进一步执行步骤2062判断数据队列(即dataqueue)是否为空,若不为空(即数据队列中存在编码数据),则执行步骤2063从数据队列dataqueue中获取相应的编码数据;若为空(即数据队列中不存在编码数据),则执行步骤2010获取系统当前时间戳t3,并进行相应的延时操作。需要说明的是,从数据队列dataqueue中获取编码数据的原则是基于先进先出原则,按照该原则每次会获取的编码数据为之前某次存储进去的编码数据。
60.步骤103:在ffmpeg推流处理子线程中,将所述编码数据封装到结构体对象,并在判定所述编码数据为关键帧时,确定所述结构体对象对应的标志位参数,以获得待推流的结构体对象。
61.其中,所述结构体对象是指ffmpeg推流处理子线程中的avpacket对象。所述标志位参数为avpacket对象的flags参数。
62.在本发明实施例中,可通过jni(java native interface)技术,将编码数据赋值给ffmpeg推流处理子线程中avpacket对象的data成员变量。在具体封装avpacket对象的过程中,需要准确对avpacket对象中的标志位参数进行设定,如果设置不准确,则会出现拉流播放失败或者卡顿的现象,因此需要首先判断所述编码数据(比如h.264或h.265编码数据)是否为关键帧,若是,则在判定所述编码数据为关键帧时确定所述avpacket对象的flags参数,以获得待推流的avpacket对象。其中,所述关键帧包括序列参数集、图像参数集以及即时解码器刷新数据。具体的,也就是在判定所述编码数据属于序列参数集(sps,sequence parameter set)、图像参数集(pps,picture parameter set)以及即时解码器刷新数据(idr,instantaneous decoding refresh)关键帧时,设置所述avpacket对象中对应的flags参数为av_pkt_flag_key;若否,则设置为0(当然也可以设置为其他不同的值)。需要说明的是,在封装avpacket对象过程中,flags参数初始的默认值可设置为0,如果其值为av_pkt_flag_key,则表示当前的avpacket对象中的data成员变量数据为关键帧;如果不主动的在相应的时间点(比如判断该编码数据属于sps或者pps或者idr数据时)设置其值为av_pkt_flag_key,则其值始终保持为初始的默认值0;而如果在判断该编码数据属于sps或者pps或者idr数据时,未设定该值为av_pkt_flag_key,则会出现拉流播放失败或卡顿的现象。
63.步骤104:将待推流的结构体对象传输到相应的流媒体服务器。
64.在本发明实施例中,可基于ffmpeg的av_interleaved_write_frame接口,将所述待推流的avpacket对象传输到流媒体服务器,如果该接口返回0,则表示推流成功,此时就可以通过播放器拉取流媒体服务器上的视频流进行播放了,即可以播放器看到监控摄像头的视频内容,从而极大的提升了推流的性能且推流时延在毫秒级别。
65.具体的,将所述待推流的结构体对象推流到相应的流媒体服务器后,可对所述
ffmpeg推流处理子线程进行延时操作,从而可以在适当的时候释放系统的cpu资源给其他需要cpu资源的逻辑执行的机会,以实现提升系统的性能。其中,对所述ffmpeg推流处理子线程进行延时操作,对应的实现过程包括:获取传输所述结构体对象对应的第一当前时间戳信息;基于所述第一当前时间戳信息、初始时间戳信息以及预设的延时模型,确定相应的时间差。其中,所述初始时间戳信息是获取摄像头视频数据对应的时间戳信息;基于所述时间差对ffmpeg推流处理子线程进行相应的延时操作,以实现在数据推流过程中释放相应的系统运算资源。也就是,在将所述待推流的avpacket对象传输到相应的流媒体服务器之后,获取传输所述avpacket对象对应的第一当前时间戳信息;基于所述第一当前时间戳信息、初始时间戳信息以及预设的延时模型,确定相应的时间差;基于所述时间差对所述ffmpeg的推流处理子线程进行相应的延时操作,以实现在数据推流过程中释放相应的系统运算资源。所述延时模型(延时sleep)对应的计算公式为:
66.时间差=1000/帧数-(t2-t1)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)
67.其中,该延时模型中的t2为第一当前时间戳信息;t1为初始时间戳信息;帧数为通过初始化摄像头确定的参数;1000为预设参数,当然该预设参数也可以设定为2000,具体可根据需要进行选取,在此不做具体限定。
68.若所述时间差t2-t1小于或者等于0,则调用thread.sleep(0);否则调用thread.sleep(时间差)。thread.sleep()是调用延时操作的函数,延时时间即为括号内的时间,比如0或时间差。延时时间和计算的时间差可以相等,也可以是存在一定的对应关系,在此不做具体限定。
69.如图2所示,本发明对现有的ffmpeg的rtmp推流流程进行了重新编排,制定了ffmpeg的rtmp推流流程。当ffmpeg收到上述的编码数据后通过ffmpeg的rtmp(real time messaging protocol)推流流程对编码数据进行推流处理,以解决ffmpeg在android系统上由于不支持硬编码而无法实现高性能rtmp推流的缺陷,提升了rtmp的推流处理的性能,降低了ffmpeg推流的时延,从而使得ffmpeg能够以高性能和低延时将android系统上获取到的摄像头视频数据以rtmp协议方式推送到流媒体服务器,进而拉流播放实现实时监控和直播的功能。
70.在新建子线程thread1(即ffmpeg推流处理子线程)的处理逻辑中,首先执行步骤2061判断ispush为true之后,还需要进一步执行步骤2062判断dataqueue是否为空,如果其为空,则表示该数据队列中没有需要推流的编码数据,进入相应的延时环节,即执行步骤2010获取系统的当前时间戳t3,并执行步骤2011对所述ffmpeg推流处理子线程进行延时操作,以此实现提升系统的性能。本发明实施过程中,该ffmpeg的推流处理子线程中运行的是一个无限循环流程,只要ispush的值为true,该循环流程就会一直循环运行,并在每一次循环过程中执行一次相应的延时操作,从而可以在对应的时间释放系统的cpu资源,给其他需要cpu资源的逻辑执行的机会,以提升系统的性能。其中,当所述dataqueue为空时,对所述ffmpeg推流处理子线程进行延时操作,对应的具体实现过程包括:获得用户的推流请求指令之后,在所述ffmpeg的推流处理子线程运行过程中,当所述数据队列中不存在编码数据时控制进入相应的延时环节,并基于获取的第二当前时间戳信息、初始时间戳信息及延时模型,确定相应的时间差;基于所述时间差对ffmpeg的推流处理子线程进行相应的延时操作,以实现在编码数据获取过程中释放相应的系统运算资源。其中,所述第二当前时间戳信
息是判定所述数据队列为空时对应的时间戳信息,所述初始时间戳信息是获取摄像头视频数据对应的时间戳信息。所述延时模型对应的计算公式为:
71.时间差=1000/帧数-(t3-t1)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)
72.其中,该延时模型中的t3为第二当前时间戳信息;t1为初始时间戳信息;帧数为通过初始化摄像头确定的参数;1000为预设参数,在此不做具体限定。
73.相应的,若所述时间差小于或者等于0,则调用thread.sleep(0);否则调用thread.sleep(时间差)。其中,thread.sleep()是调用延时操作的函数,延时时间即为括号内的时间,比如0或时间差。延时时间和计算的时间差可以相等,也可以是存在一定的对应关系,在此不做具体限定。
74.另外,如果dataqueue不为空,则执行步骤2063从数据队列中取出编码数据,然后通过jni的技术,执行步骤2064将编码数据赋值给ffmpeg的avpacket对象中的data成员变量。在该编码数据被ffmpeg推流出去后,该子线程thread1也会进行一个相应的延时操作,从而在适当的时候释放系统的cpu资源,给其他需要cpu资源的逻辑执行的机会,以实现提升了系统的性能。具体的,在获取数据队列中的编码数据和通过ffmpeg推流的循环子线程中,遍历数据队列和每处理完一帧编码数据后,进行符合特定延时模型的延时,首先执行步骤2065判断编码数据是否为关键帧,若否,则执行步骤2067设置avpacket对象的flags为预设参数(比如0或1),若是,则执行步骤2066设置avpacket对象的flags为av_pkt_flag_key;进一步执行步骤2068将数据推送到流媒体服务器,并获取系统的当前时间戳t3,执行相应的延时操作。该过程提升了android平台在推流过程中获取编码数据时的整体性能,包括降低了cpu的使用率;通过在对编码数据进行关键帧的判断后立即设置avpacket对象的flags参数,之后正式推流,简化了ffmpeg推流流程,降低了推流的时延。
75.综上所述,本发明实施例所述的摄像头视频数据的推流处理方法,通过获得推流请求指令,从数据队列中获取相应的编码数据,并在推流处理子线程中,将所述编码数据封装到结构体对象,并在判定所述编码数据为关键帧后直接确定所述结构体对象对应的标志位参数,以获得待推流的结构体对象;然后将所述待推流的结构体对象传输到相应的流媒体服务器。其使得ffmpeg能够以高性能和低延时方式获取摄像头视频数据,并将其推送到流媒体服务器,提升了推流全过程的系统性能和降低了推流时延,从而有效节约了系统运算资源。
76.与上述提供的一种摄像头视频数据的推流处理方法相对应,本发明还提供一种摄像头视频数据的推流处理系统。由于该系统的实施例相似于上述方法实施例,所以描述得比较简单,相关之处请参见上述方法实施例部分的说明即可,下面描述的摄像头视频数据的推流处理系统的实施例仅是示意性的。请参考图4所示,其为本发明实施例提供的一种摄像头视频数据的推流处理系统的结构示意图。
77.本发明所述的摄像头视频数据的推流处理系统,具体包括:
78.请求指令获得模块401,用于获得用户的推流请求指令;
79.编码数据获取模块402,用于基于所述推流请求指令从数据队列中获取相应的编码数据;所述编码数据是将摄像头视频数据进行硬编码处理得到的;
80.ffmpeg推流模块403,用于在ffmpeg推流处理子线程中,将所述编码数据封装到结构体对象,并在判定所述编码数据为关键帧时,确定所述结构体对象对应的标志位参数,以
获得待推流的结构体对象;
81.数据传输模块404,用于将所述待推流的结构体对象传输到相应的流媒体服务器。
82.进一步的,所述的摄像头视频数据的推流处理系统,还包括:第一延迟处理模块,用于在将所述待推流的结构体对象传输到相应的流媒体服务器之后对所述ffmpeg推流处理子线程进行延时操作;
83.所述对所述ffmpeg推流处理子线程进行延时操作,具体包括:获取传输所述结构体对象对应的第一当前时间戳信息;基于所述第一当前时间戳信息、初始时间戳信息以及预设的延时模型,确定相应的时间差;其中,所述初始时间戳信息是获取摄像头视频数据对应的时间戳信息;基于所述时间差对ffmpeg推流处理子线程进行延时操作。
84.进一步的,所述的摄像头视频数据的推流处理系统,还包括:第二延迟处理模块,用于获得用户的推流请求指令之后,当所述数据队列为空时,对所述ffmpeg推流处理子线程进行延时操作;
85.所述当所述数据队列为空时,对所述ffmpeg推流处理子线程进行延时操作,具体包括:在所述ffmpeg推流处理子线程运行过程中,当判定所述数据队列中不存在所述编码数据时进入相应的延时环节,并基于获取的第二当前时间戳信息、初始时间戳信息以及预设的延时模型,确定相应的时间差;其中,所述第二当前时间戳信息是判定所述数据队列为空时对应的时间戳信息,所述初始时间戳信息是获取摄像头视频数据对应的时间戳信息;
86.基于所述时间差对所述推流处理子线程进行相应的延时操作,以实现在编码数据获取过程中释放相应的系统运算资源。
87.进一步的,在获得用户的推流请求指令之前,还包括:
88.视频数据获取模块,用于获取所述摄像头视频数据;
89.编码处理模块,用于对所述摄像头视频数据进行硬编码处理,获得相应的编码数据;
90.编码数据存储存储模块,用于将所述编码数据存储到预设的数据队列;其中,所述数据队列为阻塞型队列。
91.进一步的,所述ffmpeg推流模块,具体用于:在判定所述编码数据为关键帧时,确定所述结构体对象中对应的标志位参数为av_pkt_flag_key;其中,所述关键帧包括序列参数集、图像参数集以及即时解码器刷新数据。
92.如图5所示,具体应用过程包括基于android或linux系统的设备端、流媒体服务端407和拉流播放端408。设备端包含请求指令获得模块401、编码数据获取模块402、摄像头数据获取模块405、mediacodec硬编码模块406、数据传输模块404和ffmpeg推流模块403为本发明核心模块。其中,流媒体服务端407用于从设备端接收ffmpeg的rtmp推流数据,以便拉流播放端408拉取该数据进行播放。拉流播放端408用于拉取流媒体服务器上的视频流播放。
93.本发明实施例所述的摄像头视频数据的推流处理系统,通过获得推流请求指令,从数据队列中获取相应的编码数据,并在推流处理子线程中,将所述编码数据封装到结构体对象,并在判定所述编码数据为关键帧后直接确定所述结构体对象对应的标志位参数,以获得待推流的结构体对象;然后将所述待推流的结构体对象传输到相应的流媒体服务器。其使得ffmpeg能够以高性能和低延时方式获取摄像头视频数据,并将其推送到流媒体
服务器,提升了推流全过程的系统性能和降低了推流时延,从而有效节约了系统运算资源。
94.与上述提供的摄像头视频数据的推流处理方法相对应,本发明还提供一种电子设备。由于该电子设备的实施例相似于上述方法实施例,所以描述得比较简单,相关之处请参见上述方法实施例部分的说明即可,下面描述的电子设备仅是示意性的。如图6所示,其为本发明实施例公开的一种电子设备的实体结构示意图。该电子设备可以包括:处理器(processor)601、存储器(memory)602和通信总线603,其中,处理器601,存储器602通过通信总线603完成相互间的通信,通过通信接口604与外部进行通信。处理器601可以调用存储器602中的逻辑指令,以执行摄像头视频数据的推流处理方法,该方法包括:获得用户的推流请求指令;基于所述推流请求指令从数据队列中获取相应的编码数据;所述编码数据是将摄像头视频数据进行硬编码处理得到的;在ffmpeg推流处理子线程中,将所述编码数据封装到结构体对象,并在判定所述编码数据为关键帧时,确定所述结构体对象对应的标志位参数,以获得待推流的结构体对象;将所述待推流的结构体对象传输到相应的流媒体服务器。
95.此外,上述的存储器602中的逻辑指令可以通过软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
96.另一方面,本发明还提供一种车辆,包括:所述电子设备。所述电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序。该计算机程序被处理器执行时实现上述各提供的摄像头视频数据的推流处理方法,该方法包括:获得用户的推流请求指令;基于所述推流请求指令从数据队列中获取相应的编码数据;所述编码数据是将摄像头视频数据进行硬编码处理得到的;在ffmpeg推流处理子线程中,将所述编码数据封装到结构体对象,并在判定所述编码数据为关键帧时,确定所述结构体对象对应的标志位参数,以获得待推流的结构体对象;将所述待推流的结构体对象传输到相应的流媒体服务器。
97.以上所描述的实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
98.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在车辆的计算机可读存储介质(该存储介质可设置在安装有所述电子设备的车辆内)中,如rom/ram、磁碟、光盘等,包括若干指令用以使得车辆的计算机设
备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
99.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
完整全部详细技术资料下载
当前第1页 1  2 
相关技术
  • 通信方法、设备及存储介质与流...
  • 直播活动的时间同步方法、装置...
  • 一种基于异构神经网络技术的V...
  • 一种基于相关性排名的数据重排...
  • 一种基于5G的交互式视频服务...
  • 耳机控制方法、装置、耳机及计...
  • 数据传输方法、装置及存储介质...
  • 智能物联计算机及其基于信息化...
  • 视频生成方法、视频生成系统、...
  • 一种光电混合数据中心网络中的...
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1

天下网标王台州网站关键字优化网站优化排名造价网站排名优化培训成都个人网站优化金牛区网站推广优化网站私域流量优化百度网站网站排名优化软件云浮网站优化查询珠海出名的网站优化推广b2c网站优化肇庆网站优化厂家免费网站优化口碑好漯河网站优化价格闵行网站建设和优化济南五金行业网站优化推广怎么样祥云seo网站优化360影视网站tdk优化官方网站优化品牌怎么做一个网站的优化湖北网站权重优化德惠网站优化检测 网站优化新余网站综合优化网站布局优化长沙seo网站优化罗湖软件网站优化比较好优化网站排名加入云速捷开始古镇网站推广优化怎么样优化网站速度惠州网站优化公司香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化