【问题标题】:Executing FFmpeg recording using in-line SDP使用在线 SDP 执行 FFmpeg 录制
【发布时间】:2021-03-15 02:55:38
【问题描述】:

我正在尝试使用 FFmpeg 在 NodeJS 中的 webrtc 服务器上录制音频。

如果我明确创建一个 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”标志将其作为输入,我会收到以下错误:

data:application/sdp;charset=UTF-8,v=0: 处理输入时发现无效数据

有人可以帮忙吗?

【问题讨论】:

    标签: javascript node.js ffmpeg sdp


    【解决方案1】:

    您必须通过管道将 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);
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      • 2017-08-11
      • 2014-02-20
      • 1970-01-01
      • 2015-11-22
      • 2016-03-15
      • 2012-03-04
      相关资源
      最近更新 更多