gpt4 book ai didi

javascript - 在 webrtc 中动态控制视频发送帧率

转载 作者:行者123 更新时间:2023-12-01 15:11:46 26 4
gpt4 key购买 nike

现在,我在 offer SDP 中使用 b=AS:1000 来设置上游视频的上限(即 1Mbps),以控制我发送给远程对等方的视频量。我正在研究一种不同的方法,所以我想知道是否有一种方法可以在当前事件视频 session 的运行中控制视频帧速率?

编辑:
我发现 getUserMedia 支持 minFrameRate 和 maxFrameRate 参数。那么我可以在我的对等连接处于 session 状态时调用 getUserMedia 吗?另一个合理的类似用例是能够在我已经处于对等 session 中时更换相机?无需重新谈判 SDP、ICE、……这可行吗?

最佳答案

你问了几个问题,当第一次写这个答案时,大多数问题的简短答案是:还没有 (尽管由于 DJ House 的 answer below,我已经对其进行了更新!)。

应用约束

您应该能够在事件 session 期间更改约束,使用 applyConstraints像这样:

const videotrack = stream_from_getUserMedia.getVideoTracks()[0];
videotrack.applyConstraints({ frameRate: { max: 10 } });

今天的大多数实现都能够降低帧速率,而不仅仅是提供相机中可用的模式。

试试 this fiddle .

RTCRtpSender

您应该能够使用 setParameters 控制发送者对象中的编码和传输:
const pc = RTCPeerConnection(config);

const videotrack = stream.getVideoTracks()[0];
const sender = pc.addTrack(videotrack, stream);

// get the current parameters first
const params = sender.getParameters();

if (!params.encodings) params.encodings = [{}]; // Firefox workaround!

params.encodings[0].maxBitrate = 60000;
params.encodings[0].scaleResolutionDownBy = 2;
sender.setParameters(params);
encodings是一个数组,但除非使用联播,否则只有一个条目。

试试 this fiddle ! (在 Chrome、Firefox、Safari 和 Edge 中测试!)

RTCRtpSender.replaceTrack

您还应该能够在正在进行的对等 session 中替换相机轨道,如下所示:
const videotrack2 = a_different_stream.getVideoTracks()[0];
await sender.replaceTrack(videotrack2);

它改变了 Remote 看到的东西,而不改变这端的东西。试试 this fiddle .

关于javascript - 在 webrtc 中动态控制视频发送帧率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29302617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com