浏览器进行webrtc推流的时候,有时候需要保证视频清晰度,那就需要设置视频推送时的码率以及分辨率,下面是设置码率和分辨率的方法
设置码率
获取peerConnection的senders,遍历senders中获取类型为video的sender,通过setParameters设置sender的params就能操控码率:params.encodings[0].maxBitrate = 1024 * 1024 * 10; // 设置码率为10MB
js
const video = document.createElement('video');
video.crossOrigin = 'anonymous';
video.src = '视频地址';
video.muted = true; // 静音才能实现自动播放
video.preload = 'auto';
video.loop = true;
video.onloadedmetadata = () => {
let stream = null;
try {
stream = video.captureStream();
console.log('音视频流', stream);
// 创建webrtc
const peerConnection = new RTCPeerConnection(null);
stream.getTracks().forEach((track) => {
peerConnection.addTrack(track, stream);
});
const senders = peerConnection.getSenders();
// 遍历每个 sender
senders.forEach(async (sender) => {
// 找到视频的 sender
if (sender && sender.track.kind === 'video') {
const params = sender.getParameters();
params.encodings[0].maxBitrate = 1024 * 1024 * 10; // 设置码率为10MB
await sender.setParameters(params);
}
});
} catch (error) {}
};
设置分辨率
设置分辨率只用操作视频流的宽高就能设置分辨率
我们可以通过操作源流的分辨率,或者通过canvas重新调整视频流的宽高
如:视频流只有1280*720,想要调整为1920*1080的分辨率
1.创建一个canvas,设置宽高为1920*1080
2.通过requestAnimationFrame和ctx.drawImage(video, 0, 0, 1920, 1080)将视频帧绘制到canvas上
js
const video = document.createElement('video');
video.crossOrigin = 'anonymous';
video.src = '视频地址';
video.muted = true; // 静音才能实现自动播放
video.preload = 'auto';
video.loop = true;
...
// 绘制视频帧
ctx = canvas.getContext("2d");
ctx.drawImage(video, 0, 0, 1920, 1080)
3.获取canvas的流stream:video.captureStream
获取到是stream就是调整后分辨率为1920*1080的流