我一直在阅读MediaProjection API,并在Github上查看了一些展示如何使用它的示例项目。
所有这些项目仅显示如何将屏幕捕获保存在文件中(记录屏幕),而不是将其实时传输到另一个设备(截屏视频)。
我不确定这可以通过此API实现,但后来我读了docs:
屏幕截图和分享
Android 5.0可让您添加屏幕截图 使用新功能为您的应用提供屏幕共享功能 android.media.projection API。 此功能非常有用 例如,如果要在视频会议中启用屏幕共享 应用
新的 createVirtualDisplay()方法允许您的应用捕获 主屏幕的内容(默认显示)进入Surface 对象,您的应用随后可以通过网络发送。仅限API 允许捕获非安全屏幕内容,而不是系统音频。至 开始屏幕捕获,您的应用必须首先请求用户 通过使用Intent启动屏幕捕获对话框来获得权限 通过createScreenCaptureIntent()方法获得。
有关如何使用新API的示例,请参阅MediaProjectionDemo 示例项目中的类。
我整天搜索了一个关于如何使用Surface对象传输数据的示例,然后接收并在另一台设备上显示它们,但没有运气。
所以问题是,怎么办呢?有人能指出我正确的方向吗?
答案 0 :(得分:0)
好吧,您可以从传递到createVirtualDisplay()
的表面提取帧(使用ImageReader
是最简单的方法之一,也可以使用SurfaceTexture
,具体取决于您的需求),获得位图后,只需通过网络发送即可(该部分是特定于应用程序的。)
例如,您可以建立与服务器的Websocket连接,并使用它来传输帧(这是我在使用API时所做的事情),或者可以使用WebRTC。