一种基于移动终端的视频数据处理方法及系统的制作方法

文档序号:9768046阅读:364来源:国知局
一种基于移动终端的视频数据处理方法及系统的制作方法
【技术领域】
[0001]本发明涉及数据处理技术领域,特别是涉及一种基于移动终端的视频数据处理方法及系统。
【背景技术】
[0002]当今,随着4G网络的普及和视频监控在个人、物业及智能楼宇上的广泛应用,人们越来越关注和重视基于移动终端的远程视频监控。
[0003]在实际应用中,具有视频监控功能的移动终端主要通过通信网络获取摄像头端采集到的视频数据,然后在对视频数据进行拆包、组帧、解码以及渲染等处理之后进行显示。
[0004]然而,在Android移动终端对视频数据进行处理的过程中,存在如下问题:在对组帧后的视频数据进行解码的过程中,需要Android端(S卩SDK层)与底层解码端(即NDK层)进行频繁的数据交互并且是基于拷贝机制实现数据的交互。频繁的数据交互意味着频繁的拷贝操作,并且当两端运行的程序语言是不一样时需要互相转换来适应彼此,而频繁的拷贝操作和转换操作都需要消耗一段时间,这样易造成解码不及时进而造成数据交互出现阻塞,最终会造成前端显示出现抖动、大量花屏甚至程序崩溃的问题。

【发明内容】

[0005]有鉴于此,本发明提供了一种基于移动终端的视频数据处理方法及系统,以解决现有技术中因频繁的拷贝操作和转换操作导致解码不及时进而造成数据交互出现阻塞的问题。
[0006]为解决上述技术问题,本发明提供一种基于移动终端的H264视频数据处理方法,该方法包括:
[0007]Andro id端接收来自视频采集端的H264视频数据包,对所述H264视频数据包进行拆包组帧操作,得到组帧后的视频数据,并将所述组帧后的视频数据存入共享内存;
[0008]底层解码端通过所述共享内存与所述Android端进行对所述组帧后的视频数据进行解码过程中的数据交互,得到解码后的视频数据;
[0009]所述Android端从所述共享内存提取所述解码后的视频数据。
[0010]上述方法中,优选的,所述Android端与所述底层解码端之间通过共享内存地址来实现所述数据交互。
[0011 ]上述方法中,优选的,在所述Android端从所述共享内存提取所述解码后的视频数据之后,还包括:
[0012]对所述解码后的视频数据进行渲染操作,并将渲染得到的视频数据转为位图数据。
[0013]上述方法中,优选的,在将所述渲染得到的视频数据转为所述位图数据之后,还包括:
[0014]将所述位图数据按预设分段规则分段缓存至环形数据缓冲区;
[0015]利用SurfaceView组件将所述环形数据缓冲区中的缓存数据绘制到播放面板并进行播放。
[0016]上述方法中,优选的,所述底层解码端利用FFmpeg解码库对所述组帧后的视频数据进行解码。
[0017]本发明还提供了一种基于移动终端的H264视频数据处理系统,该系统包括:
[0018]Android端,用于接收来自视频采集端的H264视频数据包,对所述H264视频数据包进行拆包组帧操作,得到组帧后的视频数据,并将所述组帧后的视频数据存入共享内存;
[0019]底层解码端,用于通过所述共享内存与所述Android端进行对所述组帧后的视频数据进行解码过程中的数据交互,得到解码后的视频数据;
[0020]所述Android端还用于从所述共享内存提取所述解码后的视频数据。
[0021]上述系统中,优选的,所述Android端与所述底层解码端之间通过共享内存地址来实现所述数据交互。
[0022]上述系统中,优选的,所述Android端还用于在从所述共享内存提取所述解码后的视频数据之后,对所述解码后的视频数据进行渲染操作,并将渲染得到的视频数据转为位图数据。
[0023]上述系统中,优选的,所述Android端还用于在将所述渲染得到的视频数据转为所述位图数据之后,将所述位图数据按预设分段规则分段缓存至环形数据缓冲区;利用SurfaceView组件将所述环形数据缓冲区中的缓存数据绘制到播放面板并进行播放。
[0024]上述系统中,优选的,所述底层解码端用于对所述组帧后的视频数据进行解码,包括:
[0025]所述底层解码端具体用于利用FFmpeg解码库对所述组帧后的视频数据进行解码。
[0026]以上本发明提供的一种基于移动终端的视频数据处理方法及系统,能够在An droid移动终端实现H264视频数据的稳定播放显示,具体地,An droid端接收来自视频采集端的H264视频数据包,对所述H264视频数据包进行拆包组帧操作,得到组帧后的视频数据,并将所述组帧后的视频数据存入共享内存;底层解码端通过所述共享内存与所述Android端进行对所述组帧后的视频数据进行解码过程中的数据交互,得到解码后的视频数据;所述Android端从所述共享内存提取所述解码后的视频数据。可见,本发明充分利用了移动终端的内存空间,在Android端与底层解码端进行频繁的数据交互时,可以直接从共享内存中读取或写入数据,并不需要拷贝操作,同时也减少了两端所用编程语言不一致需要转换所需时耗。因此,本发明有效解决了现有技术中因频繁的拷贝操作和转换操作导致解码不及时进而造成数据交互出现阻塞的问题。
【附图说明】
[0027]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
[0028]图1为本发明实施例提供的一种基于移动终端的H264视频数据处理方法的流程图;
[0029]图2为本发明实施例提供的Android端和底层解码端之间的数据交互示意图;
[0030]图3为本发明实施例提供的一种轻量级的高性能异步处理框架示意图;
[0031]图4为本发明实施例提供的一种基于移动终端的H264视频数据处理系统的结构框图示意图。
【具体实施方式】
[0032]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0033]本发明的核心是提供一种基于移动终端的视频数据处理方法及系统,以解决现有技术中因频繁的拷贝操作和转换操作导致解码不及时进而造成数据交互出现阻塞的问题。
[0034]为了使本技术领域的人员更好地理解本发明方案,下面结合附图和【具体实施方式】对本发明作进一步的详细说明。
[0035]参考图1,图1示出了本发明实施例提供的一种基于移动终端的H264视频数据处理方法的流程图,该方法具体可以包括如下步骤:
[0036]步骤SlOO、Android端接收来自视频采集端的H264视频数据包,对H264视频数据包进行拆包组帧操作,得到组帧后的视频数据,并将组帧后的视频数据存入共享内存。
[0037]本发明实施例提供的方法的执行主体为基于移动终端的H264视频数据处理系统,在实际应用中,该系统以软件的形式承载于移动终端,并且,本发明主要针对的是基于Android的移动终端,比如智能手机、平板等等。为便于本领域技术人员理解本发明所提供的技术方案,以下以移动终端为执行主体进行方案阐述。
[0038]本发明中,移动终端包括Android端和底层解码端,底层解码端负责与Android端进行数据交互实现解码操作,其它的操作内容有由Android端来处理。具体地,Android端包括预处理模块和播放模块:
[0039]预处理模块主要负责执行步骤S100,其目的在于提供一种自定义的基于Java语言的RTP(Real_time Transport Protocol,实时传输协议)拆包方法及实现RTP数据包信息缓存的序列化组件,以实现基于Android平台下的针对H264视频数据的拆包组帧组件,进而解决与Android系统内核的兼容性问题及在码流不稳定的情况下视频数据会出现乱序、丢包情况的问题。在具体实施过程中,对预处理模块进行自定义设置,具体地,预处理模块可以包括RTP包信息缓存序列化组件!12641^1^1^€6厂1^13缓存拆包组件!12641^1306111111丨丨?1616『及RTP包分析组件H264BufferUtils。这三个组件能够配合协作实现RTP包的拆包组帧,并将组帧后的视频数据通过共享内存传递至底层解码端。
[0040]其中,上述H264RTPBuff er组件用于缓存RTP荷载、视频文件数据格式、帧率、分辨率、时间戳等信息,并提供一个掩模标志FLAG描述当前H264RTPBuffer的布尔属性。上述H264RTPDemultiplexer组件主要实现RTP包的解耦合,并缓存组帧数据。上述H264BufferUtils用于对分片包数据类型进行分析,判断每一个输入分片包的帧类型,如单帧、分片帧判断,SPS, PPS、I帧及P帧判断。
[0041]对于上述预处理模块而言,其使用Java语言能实现与Android平台无缝对接。通过H264RTPBufTer组件缓存数据,对于荷载数据的读取更加方便,且可根据需要扩展数据类型,序列号及FLAG掩模标志的设置则能避免帧乱序的发生。
[0042 ]另外,对于Andro i d端中的播放模块,其详细内容参见后文。
[0043]步骤SlOl、底层解码端通过共享内存与Android端进行对组帧后的视频数据进行解码过程中的数据交互,得到解码后的视频数据。
[0044]本发明中,底层解码端利用FFmpeg解码库对组帧后的视频数据进行解码。
[0045]参考图2示出的Android端和底层解码端之间的数据交互示意图,具体地,在实际应用中,执行视频数据拆包组帧及播放的Android端是基于Java语言实现的,而执行解码操作的底层解码端是通过C语言实现的。为了减少两端所用编程语言不一致需要转换所需时耗,本发明利用移动终端的内存空间,为Android端和底层解码端在解码过程中的数据交互分配共享内存,并且两者通过共享JNI层内存地址的传递,底层代码可以直接对内存中数据进行处理,实现Android
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1