赞
踩
1、桌面
ffmpeg()
.input('desktop') // 推送桌面配置
.inputFormat('gdigrab')
.inputOptions('-offset_x 0')
.inputOptions('-offset_y 0')
.inputOptions('-video_size 640x480')
2、音视频
// video和audio是摄像头和麦克风名称, // 可通过navigator.mediaDevices.enumerateDevices // 或者ffmpeg命令获取 .input(`video=${video[0]}`) // 推送摄像头 .inputFormat('dshow') .inputOptions('-s 320*180') .complexFilter([{ filter: 'overlay', options: { x: 'main_w-overlay_w', y: 'main_h-overlay_h' }, inputs: ['[0:v]', '[1:v]'] }]) .input(`audio=${audio[0]}`) // 推送音频 .inputFormat('dshow')
3、窗口
// title是窗口的名称
// desktopCapturer.getSources({types: ['window', 'screen']})获取
.input(`title=${title}`) // 推送桌面配置
.inputFormat('gdigrab')
.inputOptions('-offset_x 0')
.inputOptions('-offset_y 0')
.inputOptions('-video_size 640x480')
4、获取设备名称
// 先获取授权 否则获取的devices名称都是空的
navigator.mediaDevices.getUserMedia({audio: true,video:true});
navigator.mediaDevices.enumerateDevices().then((devices)=> {
});
import ffmpegPath from '@ffmpeg-installer/ffmpeg'; import cp from "child_process"; /** * 获取设备列表 * @returns {Promise<any>} */ const devices = () => { return new Promise((resolve, reject) => { // 视频设备 const videoList = []; // 音频设备 const audioList = []; // 视频设备标记 let videoFlag = false; // 音频设备标记 let audioFlag = false; const devicesCmd = cp.spawn(ffmpegPath.path, ["-f", "dshow", "-list_devices", "true", "-i", "dummy"]); let devices = ''; devicesCmd.stderr.on("data", data => { devices += data.toString(); }); devicesCmd.on("close", code => { // 换行符 const splitFlag = (process.platform === 'win32' ? '\r\n' : '\n') const lines = devices.split(splitFlag); for (let i = 0; i < lines.length; i++) { const device = lines[i] if (device.indexOf('[dshow') > -1) { if (device.indexOf('DirectShow video devices') > -1) { videoFlag = true; audioFlag = false; } else if (device.indexOf('DirectShow audio devices') > -1) { videoFlag = false; audioFlag = true; } else if (video_device_name_flag && device.indexOf('Alternative name') == -1) { if (device.match(/\"(.*)\"/)) { const videoName = device.match(/\"(.*)\"/)[1] videoList.push(videoName); } } else if (audioFlag && device.indexOf('Alternative name') == -1) { if (device.match(/\"(.*)\"/)) { let audioNname = device.match(/\"(.*)\"/)[1]; audioList.push(audioNname); } } } } resolve({ audio: audioList, video: videoList }) }); }) }; export default devices;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。