WebRTC 报价缺少很多字段

WebRTC offer is missing lots of fields

我有一个网络应用程序可以播放使用 WebRTC 播放的视频。我正在使用 COTURN 简单实现(如此处所述:https://gabrieltanner.org/blog/turn-server)。我的 turnserver.conf 看起来像这样:

# TURN server name and realm
realm=<server_domain>
server-name=turnserver

# Use fingerprint in TURN message
fingerprint

# IPs the TURN server listens to
listening-ip=0.0.0.0

# External IP-Address of the TURN server
external-ip=<server_public_ip>

# Main listening port
listening-port=3478

# Further ports that are open for communication
min-port=10000
max-port=20000

# Log file path
log-file=/var/log/turnserver.log

# Enable verbose logging
verbose

# Specify the user for the TURN authentification
user=username:password

# Enable long-term credential mechanism
lt-cred-mech

# SSL certificates
cert=<crt_file>
pkey=<key_file>

# 443 for TURN over TLS, which can bypass firewalls
tls-listening-port=443

我在这里测试了这个服务器:https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ 它工作正常。

我正在做的 WebApp

  const test = () => {
    const configuration = {
      iceServers: [
        { urls: "stun:stun.l.google.com:19302" },
        {
          urls: "turn:<domain>:3478",
          username: "username",
          credential: "password",
        },
      ],
    };
    let pc = new RTCPeerConnection(configuration);
    pc.ontrack = function (event) {...}
    pc.createOffer()
      .then((offer) => { 
         console.log(offer);
      }

但是报价是这样的:

    RTCSessionDescription {type: "offer", sdp: "v=0
    ↵o=- 35287960452273588 2 IN IP4 127.0.0.1
    ↵s=-…0 0
    ↵a=extmap-allow-mixed
    ↵a=msid-semantic: WMS
    ↵"

这会导致另一个对等方抛出 SetRemoteDescription called with no fingerprint

我不确定为什么它缺少这么多信息,我做错了什么吗?

提前致谢!

我不确定它是否是对 RTCPeerConnection 构造函数的某种更新(因为它只是在没有任何人接触代码的情况下停止工作),但如果有人需要这个,我通过添加

    { offerToReceiveVideo: true }

我不确定它是不是直到今天才默认的东西,但它确实解决了几个月来没有出现的问题。

提供时您需要至少有一个媒体部分。您可以添加一个收发器或做一个数据通道。

let pc = new RTCPeerConnection()

// Create data channel
pc.createDataChannel('foobar')

// Create a audio or video transceiver
pc.addTransceiver('audio')
pc.addTransceiver('video')