我正在尝试构建一个机器人,它将捕获来自谷歌会议的传入视频和音频流。
我使用chatgpt来帮助我,我设法下载了视频录制,但无论我尝试什么,我似乎都找不到音频流的方式/位置。
以下是我用来下载传入视频流的剪辑:
// Object to store active recorders by stream ID
const recorders = {};
// Override setRemoteDescription method to intercept incoming tracks
const originalSetRemoteDescription = RTCPeerConnection.prototype.setRemoteDescription;
RTCPeerConnection.prototype.setRemoteDescription = async function(desc) {
const result = await originalSetRemoteDescription.call(this, desc).catch(console.error);
// Handle incoming tracks
this.ontrack = (event) => {
console.log('ontrack event:', event);
const streamId = event.streams[0].id; // Unique ID for each stream
if (!recorders[streamId]) {
// If recorder for this stream does not exist, create a new one
const recorder = createRecorder(event.streams[0], streamId);
recorders[streamId] = recorder;
}
};
return result;
};
// Function to create a MediaRecorder and handle recording logic
function createRecorder(stream, id) {
const recorder = new MediaRecorder(stream);
const chunks = [];
recorder.ondataavailable = event => {
if (event.data.size > 0) {
chunks.push(event.data);
}
};
recorder.onstop = () => {
const blob = new Blob(chunks, { type: 'video/webm' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = `${id}__${new Date().toISOString()}.webm`;
document.body.appendChild(a);
a.click();
setTimeout(() => {
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 100);
};
recorder.start();
return recorder;
}
// To stop all recordings:
function stopAllRecordings() {
Object.values(recorders).forEach(recorder => {
recorder.stop();
delete recorders[recorder.streamId];
});
}
在这方面的任何帮助都将是惊人的,此外,如果有人能为我指明一个方向,让我了解更多关于这方面的东西,那也将是很好的。