背景

最近项目需要接入直播系统,在调研了多家平台后,发现部分公司的针对electron的sdk存在一些问题,如适配的electron版本较低或sdk本身存在问题,所以使用了web的sdk,然而web的sdk在进行屏幕分享时存在一个权限问题,直接上教程:

在electron中使用屏幕分享

1.使用electron提供的接口获取桌面窗口信息
import { desktopCapturer } from 'electron'desktopCapturer.getSources({ types: ['window', 'screen'] }).then(sources=>{consolo.log(sources) // sources就是获取到的窗口和桌面数组})
2.获取需要的媒体流
2.1 获取指定窗口的媒体流
// 此处的sources是上一步中promise返回的sources
const source = sources.find(item => item.name === 'QQ音乐')
// 获取指定窗口的媒体流
navigator.mediaDevices.getUserMedia({audio: false,video: {mandatory: {chromeMediaSource: 'desktop',chromeMediaSourceId: source.id}}
}).then(stream => {console.log(stream) // stream就是媒体流
})
2.2 从整个桌面同时捕获音频和视频
// 从整个桌面同时捕获音频和视频
navigator.mediaDevices.getUserMedia({audio: {mandatory: {chromeMediaSource: 'desktop'}},video: {mandatory: {chromeMediaSource: 'desktop'}}
}).then(stream => {console.log(stream) // stream就是媒体流
})
2.3 本地预览
function previewStream (stream) {const video = document.querySelector('video') // 使用video标签// const video = this.$el.querySelector('video') // vue使用这个video.srcObject = streamvideo.onloadedmetadata = (e) => video.play()
}
3.获取当前媒体流的音视频轨信息

第三方提供的sdk一般存在两种方式获取媒体流信息,这里主要分享第二种方式

  1. 第一种
    sdk的api,针对这种情况,如果你使用的是electron的sdk,并且它的sdk可以在你的应用上正常使用(怨念颇深!),那么这种方式是最好的
  2. 第二种
    在使用第三方的创建媒体流函数时传递的参数换成音视频轨信息(调研了市面上的8,9家平台,在这一步都是支持使用音视频轨信息的),直接上代码,这里以腾讯的sdk举例!
// 此处的stream是上一步中promise返回的stream
this.shareStream = TRTC.createStream({ // 这个函数就是创建媒体流的函数audioSource: stream.getAudioTracks()[0], // 获取音轨信息videoSource: stream.getVideoTracks()[0]  // 获取视频轨信息
})
// 这个shareStream就是sdk需要的stream

完整代码

import { desktopCapturer } from 'electron'function getScreens() {desktopCapturer.getSources({ types: ['window', 'screen'] }).then(sources => {const source = sources.find(item => item.name === 'QQ音乐')getInitStream(source)})
}function getInitStream(source) {// 获取指定窗口的媒体流navigator.mediaDevices.getUserMedia({audio: false,video: {mandatory: {chromeMediaSource: 'desktop',chromeMediaSourceId: source.id}}}).then(stream => {getSdkStream(stream)})
}function getSdkStream(stream) {this.shareStream = TRTC.createStream({audioSource: stream.getAudioTracks()[0],videoSource: stream.getVideoTracks()[0]})
}

electron获取媒体流(实现屏幕分享)相关推荐

  1. WebRTC音视频采集和播放示例及MediaStream媒体流解析

    WebRTC音视频采集和播放示例及MediaStream媒体流解析 目录 示例代码--同时打开摄像头和麦克风,并在页面显示画面和播放捕获的声音 API解析 mediaDevices MediaStre ...

  2. webrtc janus服务器部署在公网,coturn转发媒体流

    janus本身部署在公网时,其内部使用的libnice库已经实现了stun的功能,在配置文件janus.jcfg里面,nat_1_1_mapping配置成公网地址,其位于NAT后面的局域网客户端之间可 ...

  3. WebRTC(三)用屏幕分享录制一段视频

    前一章节了解了屏幕分享的API,感觉跟我们常用的"屏幕共享"好像. 那么可不可以用此进行一个屏幕录制呢? "纸上得来终觉浅,觉知此事要躬行."看着挺简单的一个东 ...

  4. LIVE555中RTSP客户端接收媒体流分析及测试代码

    LIVE555中testProgs目录下的testRTSPClient.cpp代码用于测试接收RTSP URL指定的媒体流,向服务器端发送的命令包括:DESCRIBE.SETUP.PLAY.TERAD ...

  5. 电子白板,控件播放功能,屏幕分享

    仿照好视通的电子白板,做了一个小demo,记录一下,将office,pdf等文档转换成图片,然后把图片做成inkcanvas的背景,录放inkcanvas控件达到屏幕分享的目的 电子白班前台用到的是I ...

  6. AVFoundation – AVMetadataItem 获取媒体属性元数据

    目录 一.前言 1.AVAsset 2.AVAssetTrack 3.AVComposition / AVMutableComposition 4.AVMutableVideoComposition ...

  7. 【接口调用】EasyCVR获取直播流接口调用过程

    EasyCVR作为一款功能完善的视频结构化智能分析平台,支持多种协议的视频流的输出,同时也能够支持语音对讲,只要前端设备带语音功能,用户即可通过EasyCVR来进行隔空喊话.同时EasyCVR开放了很 ...

  8. 计算机无法启用媒体流,win10电脑媒体流启动不了怎么办_win10电脑媒体流无法启动解决方法-win7之家...

    我们要知道,win10电脑中的流媒体又叫流式媒体,它采用流式传输的方式在Internet播放媒体,有些用户由于一直不知道此功能的存在,因此在启动的时候就容易出现启动不了的问题,那么win10电脑媒体流 ...

  9. LiveNVR配置拉转RTSP传统海康大华安防摄像机直播流输出RTSP/RTMP/HLS/HTTP-FLV如何获取直播流地址

    LiveNVR配置拉转RTSP传统海康大华安防摄像机直播流输出RTSP/RTMP/HLS/HTTP-FLV如何获取直播流地址 1. Onvif/RTSP流媒体服务 2.配置拉转直播流 2.1 RTSP ...

最新文章

  1. 如何选择视觉CV光源颜色
  2. 超级计算机 任务提交,vasp在超算中心的任务提交 - 第一原理 - 小木虫 - 学术 科研 互动社区...
  3. NVIDIA专家实战演示,教你快速搭建基于Python的车辆信息识别系统
  4. mysql主从同步 sql_mysql主从同步报错;Slave_SQL_Running: No
  5. 题解:一些递推的题。
  6. ae制作数据可视化_我如何精心制作真正可怕的数据可视化
  7. 利用Onionshare 共享匿名文件
  8. 区块链 solidity 快排
  9. 一文看懂行业分类--基于wind行业分类标准
  10. linux df -h显示空间信息不正确
  11. win10调整鼠标滚轮方向
  12. 转专业计算机的面试自我介绍,关于转专业面试自我介绍参考
  13. 计算机打数据执行保护删除不掉,XP老是出现“数据执行保护”怎么办?教你方法轻松解决此问题...
  14. 【UE4】如何把Excel数据导入数据表格DataTable以及使用方法
  15. 12个有趣的c面试题目
  16. PTA 6-2 根据派生类写出基类(Java)
  17. 用python画多啦a梦源码_python 画多啦A梦
  18. echarts3实现世界地图
  19. Tableau 读书笔记
  20. mysql在注册表编辑器的哪里_如何清除mysql注册表

热门文章

  1. 思科路由器:开启telnet和ssh远程登陆
  2. Ubuntu系统初次使用
  3. GUI测试 东南大学 SEU 软件测试
  4. 浅浅轻吟如花的芬芳,开始散漫着
  5. SparkSql MAPJOIN优化之小表left join大表
  6. spring启动时只执行一次的方法实现
  7. python例子高考志愿填报系统入口_江苏2018年高考模拟志愿填报入口(官方)
  8. 【TJOI 2015】弦论
  9. 一张图看懂信息化和数字化的本质区别
  10. break跳出两重循环