一种无损高精度的流采集方法
阅读说明:本技术 一种无损高精度的流采集方法 (Lossless high-precision stream acquisition method ) 是由 马萧萧 李秀科 赵思阳 王智胜 马韬 于 2020-06-19 设计创作,主要内容包括:本发明涉及一种无损高精度的流采集方法,所述流采集方法包括:打开实时消息传输协议流或超文本传输协议流;创建读数据线程;获取流信息;创建封装线程。本发明的一种无损高精度的流采集方法,通过只精确编辑一个组包,节省了编码时间,同时降低了机器的负荷,CPU占用低,并能精确到帧地无损地采集音视频数据。(The invention relates to a lossless high-precision flow acquisition method, which comprises the following steps: opening a real-time message transmission protocol stream or a hypertext transmission protocol stream; creating a read data thread; acquiring flow information; an encapsulation thread is created. The lossless high-precision stream acquisition method saves the encoding time by accurately editing only one packet, reduces the load of a machine, has low CPU occupation, and can accurately acquire audio and video data in a frame-to-frame lossless manner.)
技术领域
本发明涉及数据流信息处理领域,尤其涉及一种无损高精度的流采集方法。
背景技术
在高速发展的互联网时代,电视台需要高性能的精确到帧地接收高指标的网络实时流媒体。这就要求从指定的视频画面(时间戳)开始收录、到指定的视频画面(时间戳)停止收录,同时又要满足音视频没有损失地收录下来。
现有的实现过程通常有如下两种方法:
第一种方法:在接收网络流时对所有音视频包解码,当到解码到指定开始画面(时间戳)时开始编码,当编码到指定结束画面(时间戳)时停止编码。这种方法确实能保证精确到帧的收录。但是所有的音视频包都进行了解码、编码,由于所有的视频都进行了编码,视频质量会降低,CPU占用率很高,不能满足高性能高指标收录。
第二种方法:在接收网络流时当视频包的时间戳大于等于指定的开始时间戳时直接封装到本地文件,直到视频时间戳等于指定的结束时间戳时停止收录。这种方法由于没有视频解码、编码过程,索引CPU占用极低。当开始收录时若指定的开始时间戳的视频不是I帧(关键帧)时,保存的本地文件的第一个GOP(图像)组不完整,解码器不能将第一个GOP组视频解码,只能从第二个GOP组开始解码,因此收录的文件不能满足精确到帧。该方法不能满足精确到帧地收录。
发明内容
本发明的目的在于,针对上述问题,提出一种无损高精度的流采集方法。
一种无损高精度的流采集方法,包括如下步骤:
S1:打开实时消息传输协议流或超文本传输协议流;
S2:创建读数据线程;
S3:获取流信息;
S4:创建封装线程。
进一步的,一种无损高精度的流采集方法,所述创建读数据线程包括如下子步骤:
S21:读流数据;
S22:解析数据,若流数据为视频包则将流数据添加到视频包链表中;若流数据为音频包则将流数据添加到音频包链表中。
进一步的,一种无损高精度的流采集方法,所述流信息包括视频流信息和音频流信息;视频流信息包括视频的宽、高、帧率、码率、编码格式、像素格式、画面组、profile和level;所述音频流信息包括音频的声道数、采样率、采样位数和格式。
进一步的,一种无损高精度的流采集方法,所述创建封装线程包括如下子步骤:
S41:根据音频源或视频源的信息打开编码器;
S42:准备第一个画面组视频数据;
S43:清除待输出视频数据包链表中指定时码前的所有视频包,将第一个视频画面组数据添加到待输出视频数据包链表头;
S44:清除音频包链表中指定时间戳timecode前所有音频数据包;
S45:循环执行封装数据。
进一步的,一种无损高精度的流采集方法,所述步骤S45包括如下子步骤:
S451:若视频包链表头数据时间戳小于音频包链表头数据时间戳,封装视频数据;否则封装音频数据。
本发明达到的有益效果:本发明的一种无损高精度的流采集方法,通过只精确编辑一个组包,节省了编码时间,同时降低了机器的负荷,CPU占用低,并能精确到帧地无损地采集音视频数据。
附图说明
图1是本发明的流采集方法流程图。
图2是本发明的创建封装线程流程图。
具体实施方式
为了使本发明的目的、技巧方案及优点更加清楚明白,下面将结合本发明实例中的附图,对本发明实例中的技术方案进行清楚、完整地描述。显然,所描述的实例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
实施例
在本实施例中,如图1所述,一种无损高精度的流采集方法,包括如下步骤:
S1:打开实时消息传输协议流或超文本传输协议流;
S2:创建读数据线程;
S3:获取流信息;
S4:创建封装线程。
本实施例中,一种无损高精度的流采集方法,所述创建读数据线程包括如下子步骤:
S21:读流数据;
S22:解析数据,若流数据为视频包则将流数据添加到视频包链表中;若流数据为音频包则将流数据添加到音频包链表中。
本实施例中,一种无损高精度的流采集方法,所述流信息包括视频流信息和音频流信息;视频流信息包括视频的宽、高、帧率、码率、编码格式、像素格式、画面组、profile和level;所述音频流信息包括音频的声道数、采样率、采样位数和格式。
本实施例中,一种无损高精度的流采集方法,所述创建封装线程包括如下子步骤:
S41:根据音频源或视频源的信息打开编码器;
S42:准备第一个画面组视频数据(headVideoPacket);
S43:清除待输出视频数据包链表中指定时码前的所有视频包,将第一个视频画面组数据(headVideoPacket)数据添加到待输出视频数据包链表(videoPackList)头;
S44:清除音频包链表中指定时间戳timecode前所有音频数据包;
S45:循环执行封装数据。
本实施例中,一种无损高精度的流采集方法,所述步骤S45包括如下子步骤:
S451:若视频包链表头数据时间戳小于音频包链表头数据时间戳,封装视频数据;否则封装音频数据。