我有一个网络应用程序,可以播放使用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
↵"
导致另一个对等端抛出CCD_ 1
我不知道为什么它遗漏了这么多信息,我做错了什么吗?
提前谢谢!
提供时,您需要至少有一个媒体部分。您可以添加收发器或创建数据通道。
let pc = new RTCPeerConnection()
// Create data channel
pc.createDataChannel('foobar')
// Create a audio or video transceiver
pc.addTransceiver('audio')
pc.addTransceiver('video')
我不确定这是否是RTCPeerConnection构造函数的某种更新(因为它刚刚停止工作,没有人接触代码(,但如果有人需要,我通过添加来解决它
{ offerToReceiveVideo: true }
我不确定这是不是直到今天才默认的,但它确实解决了一个几个月都没有的问题。