android通過MediaProjection獲取螢幕內容

山有木xi發表於2020-12-06

在android5.0之後,android官方提供了擷取螢幕的新手段,那就是MediaProjection,它是一個准許應用擁有擷取螢幕內容以及記錄系統音訊的功能

其使用方法大致可以分為:

  • 獲取MediaProjection的例項

private val mediaProjectionManager by lazy { fa.activity?.getSystemService(Context.MEDIA_PROJECTION_SERVICE) as? MediaProjectionManager }

(by lazy可以讓我們在需要使用到的時候再初始化)

  • 通過MediaProjection的管理類 MediaProjectionManager的createVirtualDisplay建立 VirtualDisplay

virtualDisplay = mediaProjection?.createVirtualDisplay(
    "Name", width, height, displayMetrics.densityDpi,
    DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, surface, null, null
)
  • 將VirtualDisplay當做一個 虛擬的呈現器

  • VirtualDisplay捕獲螢幕的內容

  • 將捕捉到的內容渲染到surface上面

  • 通過MediaRecord封裝成MP4檔案

mediaRecorder?.start()

(mediarecord開始記錄)

在最後結束並儲存完檔案後,要記得將mediarecord關閉

需要注意的是,mediarecord的關閉需要先stop再reset,否則在執行的時候就會報異常

而如果想要錄製環境音,在setaudiosource中可以設定

setAudioSource(MediaRecorder.AudioSource.MIC)

這個時候,其實想到一個需求,就是使用者可能回想著在錄製視訊的時候直接新增背景音樂,而直接新增音樂會使環境音和背景音樂重疊,那麼,一個較好的解決方案就是,剝離環境音再將背景音樂和沒有音訊的視訊檔案合併處理

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2739831/,如需轉載,請註明出處,否則將追究法律責任。

相關文章