desktopCapturer

通过[navigator.mediaDevices.getUserMedia] API ,可以访问那些用于从桌面上捕获音频和视频的媒体源信息。

进程: Renderer

下面的示例演示如何从标题为 Electron 的桌面窗口捕获视频:

  1. // In the renderer process.
  2. const { desktopCapturer } = require('electron')
  3. desktopCapturer.getSources({ types: ['window', 'screen'] }, (error, sources) => {
  4. if (error) throw error
  5. for (let i = 0; i < sources.length; ++i) {
  6. if (sources[i].name === 'Electron') {
  7. navigator.mediaDevices.getUserMedia({
  8. audio: false,
  9. video: {
  10. mandatory: {
  11. chromeMediaSource: 'desktop',
  12. chromeMediaSourceId: sources[i].id,
  13. minWidth: 1280,
  14. maxWidth: 1280,
  15. minHeight: 720,
  16. maxHeight: 720
  17. }
  18. }
  19. }).then((stream) => handleStream(stream))
  20. .catch((e) => handleError(e))
  21. return
  22. }
  23. }
  24. })
  25. function handleStream (stream) {
  26. const video = document.querySelector('video')
  27. video.srcObject = stream
  28. video.onloadedmetadata = (e) => video.play()
  29. }
  30. function handleError (e) {
  31. console.log(e)
  32. }

若要从 desktopCapturer 提供的源捕获视频, 则传递给 [navigator.mediaDevices.getUserMedia] 的约束必须包括 chromeMediaSource: "desktop"audio: false

要从整个桌面同时捕获音频和视频, 传递给 [navigator.mediaDevices.getUserMedia] 的约束必须包括 chromeMediaSource: ' desktop ', 同时用于 audiovideo, 但不应包括 chromeMediaSourceId 约束。

  1. const constraints = {
  2. audio: {
  3. mandatory: {
  4. chromeMediaSource: 'desktop'
  5. }
  6. },
  7. video: {
  8. mandatory: {
  9. chromeMediaSource: 'desktop'
  10. }
  11. }
  12. }

方法

desktopCapturer 模块有以下方法:

desktopCapturer.getSources(options, callback)

  • options 对象

    • typesString[]-列出要捕获的桌面源类型的字符串数组, 可用类型为 screenwindow
    • thumbnailSize Size (可选)-媒体源缩略图应缩放到的大小。默认值为 150 x 150
  • callback Function - 回调函数

    • error Error
    • sources DesktopCapturerSource[]
      开始收集所有有效桌面媒体源的信息,当结束时将调用 callback(error, sources)

sourcesDesktopCapturerSource对象数组, 每个DesktopCapturerSource 代表一个屏幕或一个可捕获的独立窗口。