Page History

Floatingview

Last edited by 王琳

悬浮窗预览

自2017-9-20日起,更新demo后,支持在预览过程中动态设置预览view 通过该特性,开发者可以实现从全屏推流界面切换到其他界面(Activity)后,预览视图可以以悬浮窗的形式继续存在的特性。 具体实现可以参看demo中的 FloatView 以及 FloatActivity.

实现思路

  1. 离开全屏预览界面时,不停止预览(即不调用mStreamer.stopCameraPreview());

  2. 在新的Activity中获取创建好的Streamer实例;

  3. 创建包含GLSurfaceView或TextureView的悬浮窗,添加到WindowManager中;

  4. 将悬浮窗中的GLSurfaceView或TextureView设置给前面获取的Streamer实例;

  5. 回到全屏预览界面时,重新将全屏的预览view设置给Streamer实例。

参考实现

  • 在其他Activity中获取创建好的Streamer实例可以参看 CNGlobalStreamer 的实现。

    i. 离开全屏预览界面时将Streamer实例设置给CNGlobalStreamer,然后在新的Activity中通过CNGlobalStreamer获取该实例;

    ii. 回到全屏预览界面前需要给CNGlobalStreamer设置null实例,以避免内存泄漏。

  • 创建悬浮窗可以参见FloatActivity中的initSurfaceWindow函数的实现,另外需注意悬浮窗需要申请 ACTION_MANAGE_OVERLAY_PERMISSION 权限;

  • 重新设置预览view,调用 setDisplayPreview 即可;