一种Android实现带摄像头采集的录屏推流的解决方法与流程

文档序号:14717818发布日期:2018-06-16 01:57阅读:3022来源:国知局

本发明涉及一种图像采集技术,具体是一种Android实现带摄像头采集的录屏推流的解决方法。



背景技术:

目前市场上的同类产品的做法:

在直播过程中,通过Android的摄像头和麦克风采集老师的画面和声音,并将其推送到服务器,供学生观看。

其特点是:能够将当前教师的画面和声音采集后推送到到服务器,供学生端观看,学生端能够通过老师的讲解学习到相关的内容。

其缺点是:直播的内容很容易受到限制,仅仅采集了教师的画面和声音,并没有向学生展示一些额外的内容,这样会让学生觉得直播过于生硬,导致学习的效果不佳。



技术实现要素:

本发明的目的在于提供一种Android实现带摄像头采集的录屏推流的解决方法,以解决上述背景技术中提出的问题。

为实现上述目的,本发明提供如下技术方案:

一种Android实现带摄像头采集的录屏推流的解决方法,包含以下步骤:

A、使用TextureView展示当前摄像头采集的内容并展示到屏幕上;

B、使用服务来控制摄像头悬浮窗的展示生命周期;

C、使用VirtualDisplay获取屏幕和摄像头悬浮窗的图像元数据;

D、使用 MediaCodec 将VirtualDisplay 获取的图像元数据封装生成视频数据流;

E、使用AudioRecord 和 MediaCodec 采集音频元数据并封装生成音频数据流;

F、使用RTMP协议将生成的音视频流推送到服务器。

作为本发明的进一步技术方案:所述步骤A具体是:使用TextureView将Camera采集的数据,通过Camera.setPreviewTexture(surface)方法展示出来,并通过WindowManager.LayoutParams.TYPE_PHONE的参数设置,将展示摄像头内容的界面作为悬浮窗口呈现在界面的最上方。

作为本发明的进一步技术方案:所述步骤B具体是:创建一个服务,然后通过控制服务的生命周期,保证摄像头悬浮窗能够正确的展示和隐藏,并且服务生命周期和前端界面绑定,能够很大程度上有利于保活当前录屏推流应用的后台运行。

作为本发明的进一步技术方案:所述步骤C具体是:通过Android原生API中的MediaCodec创建一个Surface,再通过MediaProjection可以创建一个VirtualDisplay对象,VirtualDisplay能够将Android屏幕的和摄像头悬浮窗的图像元数据一起获取,并渲染到之前MediaCodec创建的Surface里面。

与现有技术相比,本发明的有益效果是:本发明解决了在教育类直播软件老师直播讲课的过程中,老师使用Android推流时存在的直播内容不丰富的问题,让学生技能看到老师的声音和画面,又能看到老师在手机上的操作,丰富了老师使用Android推流的软件在教学过程中的内容的可扩展性。

附图说明

图1为本发明的整体方框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1,A.使用TextureView展示当前摄像头采集的内容并展示到屏幕上;

使用TextureView将Camera采集的数据,通过Camera.setPreviewTexture(surface)方法展示出来,并通过WindowManager.LayoutParams.TYPE_PHONE的参数设置,将展示摄像头内容的界面作为悬浮窗口呈现在界面的最上方。

B.使用服务来控制摄像头悬浮窗的展示生命周期;

创建一个服务,然后通过控制服务的生命周期,保证摄像头悬浮窗能够正确的展示和隐藏,并且服务生命周期和前端界面绑定,能够很大程度上有利于保活当前录屏推流应用的后台运行。

服务:服务是安卓系统中可以在后台执行长时间运行操作而没有用户界面的应用组件。服务可由其他应用组件启动,服务一旦被启动将在后台一直运行,即使启动服务的组件已销毁也不受影响。 此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信。 例如,服务可以处理网络事务、播放音乐,执行文件 I/O 或与内容提供程序交互,而所有这一切均可在后台进行。

C.使用VirtualDisplay获取屏幕和摄像头悬浮窗的图像元数据;

通过Android原生API中的MediaCodec创建一个Surface,再通过MediaProjection可以创建一个VirtualDisplay对象,VirtualDisplay能够将Android屏幕的和摄像头悬浮窗的图像元数据一起获取,并渲染到之前MediaCodec创建的Surface里面。

D.使用 MediaCodec 将VirtualDisplay 获取的图像元数据封装生成视频数据流;

在将屏幕和摄像头悬浮窗的图像元数据获取之后,我们可以通过Android原生的硬编码方式,将屏幕的图像数据和摄像头悬浮窗的图像数据合并成一路视频数据流,关键代码如下:

int index = mEncoder.dequeueOutputBuffer(mBufferInfo, TIMEOUT_US); // 将当前的图像元数据编码,一般生成的是H264格式

ByteBuffer encodedData = mEncoder.getOutputBuffer(index);

… // 获取编码后的数据流对象

E.使用AudioRecord 和 MediaCodec 采集音频元数据并封装生成音频数据流;

AudioRecord的主要作用就是采集音频数据数据,MediaCodec的作用是将采集到的音频数据进行硬编码,生成音频数据流。

F. 使用RTMP协议将生成的音视频流推送到服务器;

RTMP是音视频直播中常见的一个协议,通过RTMP协议,我们能够将音视频传到服务器,这样学生就能在观看端获取到当前我们推送的数据,观看老师的直播了。

对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。

此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1