|
在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
二、重叠模式,只取最大有效部分,对边缘进行裁剪,常量定义为:ANYCHAT_VIDEOCLIPMODE_OVERLAP
三、缩小模式,缩小到合适的比例,不进行裁剪,常量定义为:ANYCHAT_VIDEOCLIPMODE_SHRINK
四、平铺模式,不进行裁剪,但可能导致画面不成比例,常量定义为:ANYCHAT_VIDEOCLIPMODE_STRETCH
五、动态模式,由上层应用根据分辩率来调整显示表面,保持画面不变形,常量定义为:ANYCHAT_VIDEOCLIPMODE_DYNAMIC,在动态模式下,视频画面旋转时将会触发异步事件(WM_GV_VIDEOSIZECHG),上层应用需要主动调整显示表面(控件)的大小,否则视频将会被拉伸处理导致画面变形。(注意:动态模式暂时不适应录制参数设置)
客户端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!");
复制代码 |
|