WebRTC 动态设置视频码率

作者:追风剑情 发布于:2024-2-20 10:54 分类:Unity3d

我们的目标是在通话过程中实时更改视频码率,主要涉及对 RTCRtpEncodingParameters.maxBitrate 的修改。

首先在 Web 页面增加输入框,用来设置新的码率,如下面的代码清单所示。

<div>
设置视频码率(kbps):
<input id="bitrate" type="number" maxlength="12" required>
<input type="button" id="updateBitrate" value="更新" onclick="updateBitrate()" disabled>
</div>  

  “更新”按钮的初始状态是禁用,在用户尝试建立通话的invite流程中会启用此按钮。 点击该按钮,将会触发调用updateBitrate()函数,其实现如下面的代码清单所示。

function updateBitrate() {
	if(!pc || !isConnected) return;
	let bitrate = document.getElementById('bitrate').value;
	log("* Set MaxBitrate to : " + bitrate + "kbps");
	bitrate = bitrate * 1024;
	
	pc.getSenders().forEach(sender => {
		if(sender.track.kind === 'audio') return;
		
		let param = sender.getParameters();
		param.encodings[0].maxBitrate = bitrate;
		sender.setParameters(param);
		.then(() => {
			param = sender.getParameters();
			log(" * Video Sender Encodings * ");
			const senderParamsEncoding = param.encodings.map(encoding => JSON.stringify(encoding)).join("\n");
			log(senderParamsEncoding);
		})
		.catch(error => {
			error("Set MaxBitrate error! " + error.name);
		});
	});
}  

  如果 WebRTC 还没有建立连接,将会直接返回 updateBitrate() 函数。我们在代码中过滤掉了音频 RTP发送器,只针对视频RTP发送器设置码率,由于maxBitrate能够接受的码率单位是bps,而用户输入的单位是kbps,所以要做一个单位转换。setParameters()函数用于设置新的码率,如果设置成功,打印出新的编码参数,如果设置过程出错则打印失败信息。

标签: Unity3d

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号