【问题标题】:Transmit output of MediaProjection API over network通过网络传输 MediaProjection API 的输出
【发布时间】:2016-09-14 19:44:46
【问题描述】:

我一直在阅读 MediaProjection API,并在 Github 上查看了一些示例项目,展示了如何使用它。
所有这些项目只展示了如何将屏幕截图保存在文件中(记录屏幕),而没有展示如何将其实时传输到另一台设备(截屏)。

我不确定这是否可以通过此 API 实现,但后来我阅读了 docs

截屏和分享

Android 5.0 允许您添加屏幕捕获 和屏幕共享功能到您的应用程序与新 android.media.projection API。 此功能很有用,对于 例如,如果您想在视频会议中启用屏幕共享 应用程序。

新的 createVirtualDisplay() 方法允许您的应用捕获 将主屏幕(默认显示)的内容放入 Surface 对象,然后您的应用可以通过网络发送该对象。仅限 API 允许捕获非安全的屏幕内容,而不是系统音频。到 开始屏幕捕获,您的应用必须首先请求用户的 通过使用 Intent 启动屏幕捕获对话框来获得许可 通过createScreenCaptureIntent()方法获取。

有关如何使用新 API 的示例,请参阅 MediaProjectionDemo 示例项目中的类。

我整天都在搜索有关如何使用 Surface 对象传输数据,然后在另一台设备上接收和显示它们的示例,但没有运气。

所以问题是,怎么做?谁能指出我正确的方向?

【问题讨论】:

  • 嗨@rick-sanchez,你找到答案了吗?
  • @thomasbabuj 不,我没有发现任何有用的东西。但能够使用 WebRTC 添加相同的功能
  • 哇,太好了。你能分享一些参考 URL 相关的 WebRTC 和 MediaProjection API
  • 按照webrtc.org/native-code 上关于构建本机库的说明进行操作。然后获取示例应用 AppRtcMobile(它位于 webrtc 存储库中),您可以在其中看到 MediaProjection API 与 WebRTC 的关系。与此相关的类是 ScreenCapturerAndroid。
  • 谢谢你,这是很大的帮助。

标签: android android-mediaprojection


【解决方案1】:

好吧,您可以从传递给createVirtualDisplay() 的表面中提取帧(使用ImageReader,这是最简单的方法之一,或者使用SurfaceTexture,具体取决于您的需要),之后获取位图,您只需通过网络发送它(该部分是特定于应用程序的)。

例如,您可以建立与服务器的 websocket 连接并使用它来传输帧(这就是我在使用 API 时所做的),或者您也可以使用 WebRTC。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多