通过网络传输 MediaProjection API 的输出
Transmit output of MediaProjection API over network
我一直在阅读有关 MediaProjection API 的内容,并在 Github 上查看了一些展示如何使用它的示例项目。
所有这些项目只展示了如何将屏幕捕获保存在文件中(记录屏幕),而没有将其实时传输到另一台设备(截屏)。
我不确定通过这个 API 是否可行,但后来我读了 docs :
Screen capturing and sharing
Android 5.0 lets you add screen capturing
and screen sharing capabilities to your app with the new
android.media.projection APIs. This functionality is useful, for
example, if you want to enable screen sharing in a video conferencing
app.
The new createVirtualDisplay() method allows your app to capture the
contents of the main screen (the default display) into a Surface
object, which your app can then send across the network. The API only
allows capturing non-secure screen content, and not system audio. To
begin screen capturing, your app must first request the user’s
permission by launching a screen capture dialog using an Intent
obtained through the createScreenCaptureIntent() method.
For an example of how to use the new APIs, see the MediaProjectionDemo
class in the sample project.
我一整天都在搜索有关如何使用 Surface 对象传输其数据、然后在另一台设备上接收和显示它们的示例,但一无所获。
所以问题是,如何才能做到?谁能指出我正确的方向?
好吧,您可以从传递到 createVirtualDisplay()
的表面中提取帧(使用 ImageReader
这是最简单的方法之一,或者使用 SurfaceTexture
,根据您的需要),在您获得位图后,您只需通过网络发送它(那部分是特定于应用程序的)。
例如,您可以建立到服务器的 websocket 连接并使用它来传输帧(这就是我玩 API 时所做的),或者您可以为此使用 WebRTC。
我一直在阅读有关 MediaProjection API 的内容,并在 Github 上查看了一些展示如何使用它的示例项目。
所有这些项目只展示了如何将屏幕捕获保存在文件中(记录屏幕),而没有将其实时传输到另一台设备(截屏)。
我不确定通过这个 API 是否可行,但后来我读了 docs :
Screen capturing and sharing
Android 5.0 lets you add screen capturing and screen sharing capabilities to your app with the new android.media.projection APIs. This functionality is useful, for example, if you want to enable screen sharing in a video conferencing app.
The new createVirtualDisplay() method allows your app to capture the contents of the main screen (the default display) into a Surface object, which your app can then send across the network. The API only allows capturing non-secure screen content, and not system audio. To begin screen capturing, your app must first request the user’s permission by launching a screen capture dialog using an Intent obtained through the createScreenCaptureIntent() method.
For an example of how to use the new APIs, see the MediaProjectionDemo class in the sample project.
我一整天都在搜索有关如何使用 Surface 对象传输其数据、然后在另一台设备上接收和显示它们的示例,但一无所获。
所以问题是,如何才能做到?谁能指出我正确的方向?
好吧,您可以从传递到 createVirtualDisplay()
的表面中提取帧(使用 ImageReader
这是最简单的方法之一,或者使用 SurfaceTexture
,根据您的需要),在您获得位图后,您只需通过网络发送它(那部分是特定于应用程序的)。
例如,您可以建立到服务器的 websocket 连接并使用它来传输帧(这就是我玩 API 时所做的),或者您可以为此使用 WebRTC。