我试图使用NodeJS在webrtc服务器上使用FFmpeg录制音频。
如果我显式地创建一个input.sdp文件并将它与FFmpeg的"-i“标志一起使用,我就能够记录音频。
我的问题是:如何在代码中创建一个字符串来动态更改端口号,以便同时记录不同的流?
我试过这样做:
const sdpInfo = `data:application/sdp;charset=UTF-8,v=0\no=- 0 0 IN IP4 ${ipAddr}\ns=-\nc=IN IP4 ${ipAddr}\nt=0 0\nm=audio ${port} RTP/AVPF 111\na=rtcp:${port+1}\na=rtpmap:111 opus/48000/2\na=fmtp:111 minptime=10;useinbandfec=1`但是,如果我将它作为带有"-i“标志的输入,则会得到以下错误:
数据:application/sdp;charset=utf-8,v=0:处理输入时发现的无效数据
有人能帮忙吗?
发布于 2021-12-14 01:30:14
您必须将SDP输送到stdin。为此,您需要首先将其转换为流。使用以下代码可以实现您想要的结果:
import * as childProcess from 'child_process';
import FFmpegStatic from 'ffmpeg-static';
function convertStringToStream(stringToConvert)
{
const stream = new Readable();
stream._read = () => { };
stream.push(stringToConvert);
stream.push(null);
return stream;
}
const sdpInfo = `v=0\no=- 0 0 IN IP4 ${ipAddr}\n` +
`s=-\nc=IN IP4 ${ipAddr}\n` +
`t=0 0\nm=audio ${port} RTP/AVPF 111\n` +
`a=rtcp:${port+1}\na=rtpmap:111 opus/48000/2\n` +
`a=fmtp:111 minptime=10;useinbandfec=1`;
const ffmpegArgs = [
'-loglevel',
'debug',
'-protocol_whitelist',
'pipe,udp,rtp',
'-f',
'sdp',
'-i',
'pipe:0',
// Rest of your parameters
];
const process = childProcess.spawn(FFmpegStatic, ffmpegArgs);
const sdpStream = convertStringToStream(sdpInfo);
sdpStream.resume();
sdpStream.pipe(process.stdin);https://stackoverflow.com/questions/65120104
复制相似问题