首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用在线SDP执行FFmpeg记录

使用在线SDP执行FFmpeg记录
EN

Stack Overflow用户
提问于 2020-12-03 04:50:26
回答 1查看 297关注 0票数 1

我试图使用NodeJS在webrtc服务器上使用FFmpeg录制音频。

如果我显式地创建一个input.sdp文件并将它与FFmpeg的"-i“标志一起使用,我就能够记录音频。

我的问题是:如何在代码中创建一个字符串来动态更改端口号,以便同时记录不同的流?

我试过这样做:

代码语言:javascript
复制
    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:处理输入时发现的无效数据

有人能帮忙吗?

EN

回答 1

Stack Overflow用户

发布于 2021-12-14 01:30:14

您必须将SDP输送到stdin。为此,您需要首先将其转换为流。使用以下代码可以实现您想要的结果:

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65120104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档