ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
在PC(Web)与移动终端(手机、Pad)进行视频通讯的过程中,由于移动终端的手持方向将会影响到视频采集的方向,如横向放置时采集的视频大小是320x240(4:3)方向正立,而竖向放置时采集的视频大小是240x320(3:4)方向为横向,为了保持在PC(Web)端所看到的画面始终是正立的就需要对视频画面进行旋转,然后调整到合适的大小,而视频画面经过旋转之后,分辩率会发生变化,在调整的过程中会对视频进行裁剪,自AnyChat r4319版本开始,我们开放了裁剪模式控制接口,可以由上层应用根据实际的应用场景来选择: 视频裁剪模式定义 #define ANYCHAT_VIDEOCLIPMODE_AUTO 0 ///< 默认模式,以最大比例进行裁剪,然后再整体拉伸,画面保持比例,但被裁剪画面较大 #define ANYCHAT_VIDEOCLIPMODE_OVERLAP 1 ///< 重叠模式,只取最大有效部分,对边缘进行裁剪 #define ANYCHAT_VIDEOCLIPMODE_SHRINK 2 ///< 缩小模式,缩小到合适的比例,不进行裁剪 #define ANYCHAT_VIDEOCLIPMODE_STRETCH 3 ///< 平铺模式,不进行裁剪,但可能导致画面不成比例 #define ANYCHAT_VIDEOCLIPMODE_DYNAMIC 4 ///< 动态模式,由上层应用根据分辩率来调整显示表面,保持画面不变形 每种模式的工作原理介绍如下: 一、默认模式,以最大比例进行裁剪,然后再整体拉伸,画面保持比例,但被裁剪画面较大,常量定义为:ANYCHAT_VIDEOCLIPMODE_AUTO ![](https://box.kancloud.cn/d6d94c5b66d67107e9de1e8ffda3b182_843x428.jpg) 二、重叠模式,只取最大有效部分,对边缘进行裁剪,常量定义为:ANYCHAT_VIDEOCLIPMODE_OVERLAP ![](https://box.kancloud.cn/816504916bde73ec18b25f78b1f4459b_843x428.jpg) 三、缩小模式,缩小到合适的比例,不进行裁剪,常量定义为:ANYCHAT_VIDEOCLIPMODE_SHRINK ![](https://box.kancloud.cn/f0068ea54ed54981dcfec64a7c97d2a3_843x428.jpg) 四、平铺模式,不进行裁剪,但可能导致画面不成比例,常量定义为:ANYCHAT_VIDEOCLIPMODE_STRETCH ![](https://box.kancloud.cn/5f3c13d97f5bd2ffefefd23df999cc73_843x428.jpg) 五、动态模式,由上层应用根据分辩率来调整显示表面,保持画面不变形,常量定义为:ANYCHAT_VIDEOCLIPMODE_DYNAMIC,在动态模式下,视频画面旋转时将会触发异步事件(WM_GV_VIDEOSIZECHG),上层应用需要主动调整显示表面(控件)的大小,否则视频将会被拉伸处理导致画面变形。(注意:动态模式暂时不适应录制参数设置) ![](https://box.kancloud.cn/e691b5acc1b72ac24e5b51c824c91797_1167x428.jpg) 客户端SDK增加视频显示、录制过程中的视频裁剪模式控制接口: #define BRAC_SO_VIDEOSHOW_CLIPMODE 86 ///< 远程视频显示旋转裁剪模式(参数为int型, 0 自动[默认]) #define BRAC_SO_RECORD_CLIPMODE 144 ///< 录制视频裁剪模式(参数为:int型) 服务器SDK增加录制过程中的视频裁剪模式控制接口: #define BRAS_SO_RECORD_CLIPMODE 8 ///< 录制视频裁剪模式(参数为:int型) 调用示例代码(JavaScript): 一、视频显示时采用动态模式 var iVideoClipMode = ANYCHAT_VIDEOCLIPMODE_DYNAMIC; BRAC_SetSDKOption(BRAC_SO_VIDEOSHOW_CLIPMODE, iVideoClipMode); 二、视频录制时采用重叠模式 var iVideoClipMode = ANYCHAT_VIDEOCLIPMODE_OVERLAP; BRAC_SetSDKOption(BRAC_SO_RECORD_CLIPMODE, iVideoClipMode); var dwFlags = ANYCHAT_RECORD_FLAGS_VIDEO + ANYCHAT_RECORD_FLAGS_AUDIO + ANYCHAT_RECORD_FLAGS_MIXAUDIO + ANYCHAT_RECORD_FLAGS_MIXVIDEO + ANYCHAT_RECORD_FLAGS_ABREAST; BRAC_StreamRecordCtrlEx(-1, 1, dwFlags, 0, "Hello, AnyChat!");