Agora 4.1.1默认视频分辨率

https://docs.agora.io/cn/video-call-4.x/release_android_ng?platform=Android

>自该版本起,SDK 对视频编码的算法进行了优化,将默认的视频编码分辨率从 640 × 360 提升为 960 × 540,以适应设备性能和网络带宽的提升,在各种音视频互动场景下,为用户提供全链路的高清体验。

发版说明中提到, 4.1.1之后,默认的视频编码分辨率从 640 × 360 提升为 960 × 540,但实际升级之后,发现在 IRtcEngineEventHandler#onRemoteVideoStats的回调中,RemoteVideoStats的height和width还是原先的640 × 360,请问这个是文档有误,还是sdk有误,还是调用方式有误?

2个回答
H 回复于 2023-04-25 10:33 · IP属地上海


回复·0
H 回复于 2023-04-25 10:35 · IP属地上海

960 × 540 是默认视频编码分辨率,需要确认是否有调用 setVideoEncoderConfiguration 设置分辨率,如果调用接口设置了分辨率那么还是会以接口参数设置为准哈

https://docs.agora.io/cn/video-call-4.x/API%20Reference/java_ng/API/class_videoencoderconfiguration.html

回复·9

使用的默认设置, 没有单独设置setVideoEncoderConfiguration。。。

麻烦提供频道号、时间点、发送端UID与接收端UID,咱们先查询后台数据确认一下哈。

如果方便的话,请帮忙提供发送端的SDK 日志: https://docs.agora.io/cn/All/faq/logfile

主叫 1301444795

被叫 1228084838

channel 455f2cf3fe6fdcdcdcc7a6c61faf0d4e

时间 2023-04-26 19:19


部分日志如下:(960*540=>640*360,手机  iQOO10)

[04/26/23 19:19:05:353][29357][A]:(00003861):     VideoFrameAdapter::setOutputFormat(this:0xb400007c45840450, format:(width:960, height:540, fps:15))
[04/26/23 19:19:05:353][29357][I]:update request format, [w:960, h:540, fps:15], reset format table
[04/26/23 19:19:05:353][29357][A]:(00003862):   LocalVideoTrackImpl::addRenderer(this:0xb400007ca5bba2e0, videoRenderer:0xb400007bc57ad190)
[04/26/23 19:19:05:353][29357][A]:(00003863):     VideoFrameRotator::setOutputFormat(this:0xb400007bb5b33ff0, format:(width:640, height:360, fps:15, fixed:1))
[04/26/23 19:19:05:353][29357][A]:(00003864):   AgoraService::createMediaPlayerAudioTrack(this:0xb400007c45849570, playerSource:0xb400007c256bca28)
[04/26/23 19:19:05:353][29357][A]:(00003865):     MediaPlayerSourceFFMpeg::getAudioPcmDataSender(this:0xb400007c256bca10, void)
[04/26/23 19:19:05:353][29357][I]:[AFC]: AudioFilterCompositeWithExtension name:pcm_source_composites, extensionTypeSet size:1
[04/26/23 19:19:05:353][29357][I]:[AFC]: create extension audio filters, extensionTypeSet size:1


后台查询到这两个用户的视频设备采集到的图像分辨率就是 640*360,所以视频编码是640*360哈

如果希望调整视频采集分辨率,可以调用 setCameraCapturerConfiguration 接口设置: https://docs.agora.io/cn/live-streaming-premium-4.x/API%20Reference/java_ng/API/class_cameracapturerconfiguration.html

>后台查询到这两个用户的视频设备采集到的图像分辨率就是 640*360,所以视频编码是640*360哈

那这个视频采集的分辨率  640*360,这个也是默认的啊,没有另外设置的。

那文档里说的“将默认的视频编码分辨率从 640 × 360 提升为 960 × 540”,是不是也不准确?视频采集的分辨率不是也应该默认提示为960 × 540吗?

我测试了一下,如果不设置采集和编码分辨率,默认会自适应采集到 960 × 540 分辨率的视频。

关于咱们为什么默认采集了 640 × 360 分辨率的视频,可能需要提供完整的 SDK 日志来看下了。

另外,也可以试试看调整一下采集和编码分辨率,主要是为了验证这个设备是否可以采集到 960 × 540 分辨率的视频。

修改视频采集、视频编码的方法如下:

// 视频采集
RtcEngine.setCameraCapturerConfiguration(
    // default 640*480, 15fps
    CameraCapturerConfiguration(CameraCapturerConfiguration.CaptureFormat().apply {
        this.width = 960
        this.height = 540
        this.fps = 15
    }))
// 设置视频编码属性
RtcEngine.setVideoEncoderConfiguration(VideoEncoderConfiguration().apply {
    this.dimensions = VideoEncoderConfiguration.VD_960x540
})


测试结果如下(xiaomi是测试机器,huawei是另一端的观测机器):

#1. 不额外设置,都是默认值
#xiaomi (sender)
    #onLocalVideoStats, stats.captureFrame 360*640, stats.encodedFrame 360*640, stats.regulatedCaptureFrame 360*640
# huawei (receiver)
    #onRemoteVideoStats, stats 360*640


#2. 只设置 setVideoEncoderConfiguration(VD_960x540)
#xiaomi (sender)
    #onLocalVideoStats, stats.captureFrame 720*960, stats.encodedFrame 540*960, stats.regulatedCaptureFrame 540*960
# huawei (receiver)
    #onRemoteVideoStats, stats 540*960


#3. 只设置 setCameraCapturerConfiguration(width=960, height=540)
#xiaomi (sender)
    #onLocalVideoStats, stats.captureFrame 720*960, stats.encodedFrame 360*640, stats.regulatedCaptureFrame 540*960
# huawei (receiver)
    #onRemoteVideoStats, stats 360*640


#4. 同时设置 setCameraCapturerConfiguration(width=960, height=540), setVideoEncoderConfiguration(VD_960x540)
#xiaomi (sender)
    #onLocalVideoStats, stats.captureFrame 720*960, stats.encodedFrame 540*960, stats.regulatedCaptureFrame 540*960
# huawei (receiver)
    #onRemoteVideoStats, stats 540*960

从上面可以看出,默认采集、编码的分辨率都是360*640,和文档不一致。

相关的agora的日志文件,上传到百度云盘了,如下:

链接: https://pan.baidu.com/s/11fJX8cxj7ozP-w29YslorQ?pwd=0000 提取码: 0000


从测试结果来看,这个机型的相机不支持 540*960 的视频采集分辨率啊。

#1. 不额外设置,都是默认值:如果设备本身不支持该默认分辨率采集,那么会向下兼容支持的分辨率,即360*640

#2. 只设置 setVideoEncoderConfiguration(VD_960x540):可以看到采集到的是720*960,编码的是540*960,最后发送的是裁剪过后的540*960

#3. 只设置 setCameraCapturerConfiguration(width=960, height=540):可以看到采集到的还是720*960而不是540*960(说明相机本身就不支持540*960这个采集分辨率),没有设置编码分辨率,找不到默认分辨率540*960的视频,就会向下兼容到360*640

#4. 同时设置 setCameraCapturerConfiguration(width=960, height=540):表现和2一致的