webrtc视频流设置码率和分辨率

浏览器进行webrtc推流的时候,有时候需要保证视频清晰度,那就需要设置视频推送时的码率以及分辨率,下面是设置码率和分辨率的方法

设置码率

获取peerConnection的senders,遍历senders中获取类型为video的sender,通过setParameters设置sender的params就能操控码率:params.encodings0.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的流

相关推荐
用户11977079480736 分钟前
GitHub 电商开源项目分享:用 sharp 批量出饰品主图,试了裁剪、细节图和色彩配置文件三个坑
前端·node.js
deli00711 分钟前
地图定位为什么偏了 500 米?GPS 与火星坐标实测
前端
TK泰妞13 分钟前
节日促销前,TikTok 商品视频应该提前准备什么?
前端·人工智能·节日
CCIE-Yasuo25 分钟前
网络安全-学习web开发-列表、标签
前端·学习·web安全
小大宇29 分钟前
Vue知识点-ElementPlus-06 单选+多选+下拉+日期选择
前端·vue.js·elementui
用户114818678948431 分钟前
Nuxt 3 学习版 Demo:跟着做一遍,从跑起来到自己会改
前端
hiahiahia1231 小时前
Streaming Model Output
开发语言·前端
paopaokaka_luck1 小时前
基于springboot+vue的益暖微光公益服务平台(DeepSeek公益助手、善款信息追溯、志愿服务积分闭环、ECharts运营分析、活动状态自动流转)
java·前端·javascript·spring boot·mysql·架构·echarts
栀椩1 小时前
Electron 内嵌页面跨域问题(CORS/PNA)解决全记录
前端·javascript·electron
asaotomo1 小时前
截图识题、AI 讲解、笔记沉淀:Chrome 扩展体验
前端·chrome·笔记