You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebRTC Android:本地高画质预览、远端低画质传输实现方案咨询

解决本地高清预览+远端低画质传输的方案

我来帮你搞定这个2G网络下的画质需求——核心是把本地预览的画面和发送给对方的视频流完全分离:本地直接渲染相机采集的原始高清帧,而给PeerConnection的则是经过降质处理的低画质流。具体步骤如下:

1. 让本地预览直接对接相机原始输出

AppRTC默认是把相机采集的流经过PeerConnection处理后再渲染,导致本地和远端画质绑定。我们要打破这个绑定:

  • 初始化CameraVideoCapturer后,不要用PeerConnection返回的MediaStream来渲染本地画面。
  • 单独给本地预览准备一个SurfaceView或TextureView,在调用CameraVideoCapturer.startCapture()时,把这个View的Surface传给相机作为预览输出。这样相机采集的原始高清帧会直接渲染到这个View上,本地看到的就是原生高清画质。

2. 为远端传输单独创建降质后的视频流

针对发送给对方的流,我们需要单独做降质处理:

  • 用PeerConnectionFactory创建一个独立的VideoSource(比如叫remoteSendSource),然后调用它的adaptOutputFormat()方法设置低参数:
    // 示例:设置为320x240分辨率、10帧/秒,适配2G网络
    remoteSendSource.adaptOutputFormat(320, 240, 10);
    
  • 把CameraVideoCapturer和这个remoteSendSource绑定,WebRTC会自动帮你把相机的原始帧降质成你设置的参数,再传给PeerConnection。

3. 将降质流发送给远端

从remoteSendSource创建对应的VideoTrack,把它加入到MediaStream里,再通过PeerConnection.addTrack()发送给对方。这样对方收到的就是低画质、适合2G网络的视频流,而你本地看的还是高清的相机原始画面。

关键提醒

  • 绝对不要复用本地预览的VideoSource给远端传输,必须分开两个独立的数据源,这样adaptOutputFormat只会影响发送给对方的流,不会干扰本地预览。
  • 相机采集的初始分辨率要设成你想要的高清规格(比如1280x720),本地预览直接用这个原始分辨率,远端则靠adaptOutputFormat自动降质。
  • 如果需要更精细的帧处理(比如自定义缩放算法),可以实现VideoSink接口接收相机原始帧,处理后再传给远端的VideoSource,但一般WebRTC内置的适配已经足够应付2G场景了。

内容的提问来源于stack exchange,提问作者Kristiyan Petrov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:12:50