0

我已经为音频呼叫构建了一个不错的应用程序,非常感谢 MediaSoup !

为了更上一层楼,我需要记录我的一些电话。我使用了这个教程作为参考: mediasoup 录制演示

我遵循了 FFmpeg 的方式,并且已经达到了创建一个 plainTransport 的地步

    router.createPlainTransport({
        // No RTP will be received from the remote side
        comedia: false,
        // FFmpeg and GStreamer don't support RTP/RTCP multiplexing ("a=rtcp-mux" in SDP)
        rtcpMux: false,
        listenIp: {ip:"0.0.0.0", announcedIp:"MY_PUBLIC_IP"},
    });

然后我连接到这个传输:

    rtpPlainTransport.connect({
        ip: 127.0.0.1,
        port: "port1",
        rtcpPort: "port2",
    });

我的第一个疑问:上面提供的 .connect({}) 参数中的 IP 地址是否正确?

其次,FFMPEG 命令需要一个 SDP 标头。这是我的:

    v=0
    o=- 0 0 IN IP4 127.0.0.1
    s=-
    c=IN IP4 127.0.0.1
    t=0 0
    m=audio port1 RTP/AVPF 111
    a=rtcp:port2
    a=rtpmap:111 opus/48000/2
    a=fmtp:111 minptime=10;useinbandfec=1

当我开始录制时,FFMPEG 进程没有收到任何数据。此外,在停止时,我收到以下消息

输出文件为空,未编码(检查 -ss / -t / -frames 参数是否使用) 正常退出,收到信号 2. 录制过程退出,代码:255,信号:null

当服务器本身在本地主机上运行时,我能够使用 127.0.0.1 将录音保存在本地主机上。

但是,使用 Nginx 托管的实际服务器,我无法弄清楚出了什么问题。

我可以看到正在我的音频端口上发送的数据:

1 0.000000000    127.0.0.1 → 127.0.0.1    UDP 117 10183 → 5004 Len=75
2 0.020787740    127.0.0.1 → 127.0.0.1    UDP 108 10183 → 5004 Len=66
3 0.043201757    127.0.0.1 → 127.0.0.1    UDP 118 10183 → 5004 Len=76

我该如何处理 FFmpeg 以便它开始录制!?

有人可以帮忙吗?

4

1 回答 1

0

解决了错误。我没有在 mediaCodecs 中将音频的“preferredPayloadType”值设置为 111,这是 FFmpeg 所要求的。

100 不起作用。虽然我不完全明白为什么。必须是 111。如果有人能解释这一点,那就太好了。但无论如何,我现在可以录音了!

所以媒体编解码器必须是:

        {
          kind: "audio",
          mimeType: "audio/opus",
          preferredPayloadType: 111,
          clockRate: 48000,
          channels: 2,
          parameters: {
            minptime: 10,
            useinbandfec: 1,
          },
        },

和 sdp 应该是:

v=0
o=- 0 0 IN IP4 127.0.0.1
s=-
c=IN IP4 127.0.0.1
t=0 0
m=audio 5004 RTP/AVPF 111
a=rtcp:5005
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
于 2020-11-30T04:41:27.193 回答