Merge pull request '代码格式化并添加类型' (#2) from yj into master
Reviewed-on: #2
This commit is contained in:
commit
31e0e89c92
|
|
@ -1027,50 +1027,43 @@ const Meeting: React.FC = () => {
|
||||||
|
|
||||||
window.electron.getSources().then(async (sources: any) => {
|
window.electron.getSources().then(async (sources: any) => {
|
||||||
const screenId = sources[0].id;
|
const screenId = sources[0].id;
|
||||||
|
|
||||||
const stream = await navigator.mediaDevices.getUserMedia({
|
const stream = await navigator.mediaDevices.getUserMedia({
|
||||||
audio: {
|
audio: {
|
||||||
mandatory: {
|
mandatory: {
|
||||||
chromeMediaSource: 'desktop',
|
chromeMediaSource: 'desktop',
|
||||||
chromeMediaSourceId: screenId,
|
chromeMediaSourceId: screenId,
|
||||||
}
|
}
|
||||||
},
|
} as any,
|
||||||
video: {
|
video: {
|
||||||
mandatory: {
|
mandatory: {
|
||||||
chromeMediaSource: 'desktop',
|
chromeMediaSource: 'desktop',
|
||||||
chromeMediaSourceId: screenId,
|
chromeMediaSourceId: screenId,
|
||||||
}
|
}
|
||||||
}
|
} as any
|
||||||
});
|
});
|
||||||
|
|
||||||
// 获取所有音频输入设备
|
// 获取所有音频输入设备
|
||||||
const devices = await navigator.mediaDevices.enumerateDevices();
|
const devices = await navigator.mediaDevices.enumerateDevices();
|
||||||
const audioInputDevices = devices.filter(device => device.kind === 'audioinput' &&
|
const audioInputDevices = devices.filter(device => device.kind === 'audioinput' &&
|
||||||
device.deviceId !== 'default' &&
|
device.deviceId !== 'default' &&
|
||||||
device.deviceId !== 'communications');
|
device.deviceId !== 'communications');
|
||||||
|
|
||||||
// 使用Web Audio API来捕获系统声音和麦克风声音,将它们合并到同一个MediaStream中。
|
// 使用Web Audio API来捕获系统声音和麦克风声音,将它们合并到同一个MediaStream中。
|
||||||
const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
|
const audioCtx = new (window.AudioContext || (window as any).webkitAudioContext)();
|
||||||
const systemSoundSource = audioCtx.createMediaStreamSource(stream);
|
const systemSoundSource = audioCtx.createMediaStreamSource(stream);
|
||||||
const systemSoundDestination = audioCtx.createMediaStreamDestination();
|
const systemSoundDestination = audioCtx.createMediaStreamDestination();
|
||||||
systemSoundSource.connect(systemSoundDestination);
|
systemSoundSource.connect(systemSoundDestination);
|
||||||
|
|
||||||
// 录制所有音频输入设备
|
// 录制所有音频输入设备
|
||||||
audioInputDevices.forEach(async device => {
|
audioInputDevices.forEach(async device => {
|
||||||
const micStream = await navigator.mediaDevices.getUserMedia({ audio: { deviceId: { exact: device.deviceId } } });
|
const micStream = await navigator.mediaDevices.getUserMedia({ audio: { deviceId: { exact: device.deviceId } } });
|
||||||
const micSoundSource = audioCtx.createMediaStreamSource(micStream);
|
const micSoundSource = audioCtx.createMediaStreamSource(micStream);
|
||||||
micSoundSource.connect(systemSoundDestination);
|
micSoundSource.connect(systemSoundDestination);
|
||||||
})
|
})
|
||||||
|
|
||||||
// 合并音频流与视频流
|
// 合并音频流与视频流
|
||||||
const combinedSource = new MediaStream([...stream.getVideoTracks(), ...systemSoundDestination.stream.getAudioTracks()]);
|
const combinedSource = new MediaStream([...stream.getVideoTracks(), ...systemSoundDestination.stream.getAudioTracks()]);
|
||||||
|
|
||||||
// 开始录制
|
// 开始录制
|
||||||
const recorder = new MediaRecorder(combinedSource, {
|
const recorder = new MediaRecorder(combinedSource, {
|
||||||
mimeType: 'video/webm;codecs=vp9,opus',
|
mimeType: 'video/webm;codecs=vp9,opus',
|
||||||
videoBitsPerSecond: 1.5e6,
|
videoBitsPerSecond: 1.5e6,
|
||||||
});
|
});
|
||||||
|
|
||||||
setMediaStream(combinedSource);
|
setMediaStream(combinedSource);
|
||||||
setRecorder(recorder);
|
setRecorder(recorder);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue