在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!");
- 一、说明
- 面向读者
- 技术支持
- 二、、录像功能介绍
- 1、概述
- 2、API接口定义
- 3、录像API调用
- 4、录制功能示例
- 5、拍照、录像自定义文件名
- 6、多路视频流合成录制时,选择指定的流进行录制
- 7、视频显示、录制过程中的裁剪模式
- 8、录像过程中取消录像
- 9、更新录像参数
- 10、PCM音频格式录制
- 11、多路流拍照
- 12、录像本地缓存机制
- 13、其他
- 2.1 录制方式
- 2.2 录制模式
- 2.3 录像服务参数设置
- 2.4 录像开发流程
- 第二章、录像服务器部署
- 1、Windows录像服务器部署
- 2、Linux录像服务器部署
- 3、录像服务配置说明
- 4、录像回放
- 5、注意事项
- 三、录像开发说明
- 3.1、录像常量定义
- 3.1.1 参数设置常量
- 3.1.2 录制标志常量
- 3.1.3 录像裁剪常量
- 3.2、录像及拍照API接口及参数说明
- 3.2.1 客户端录像接口
- 1)Web端录像接口
- 2)Android端录像接口
- 3)iOS端录像接口
- 3.2.2 服务端录像接口
- 1)Java录像接口
- 2)C#录像接口
- 3.3、录像及拍照回调事件说明
- 3.3.1 初始化回调事件
- 3.3.2 回调事件参数说明
- 四、录像功能示例代码
- 4.1 客户端单方录制
- 4.2 客户端合成流录制
- 4.3 服务器合成流录制
- 4.4 多路视频流的录制
- 4.5 多路视频流的拍照
- 4.6 录像时自定义文件名
- 4.7 PCM音频格式录制
- 五、录像常见问题
- 5.1、录像失败
- 无录像服务导致录像失败
- UDP不通导致录像失败
- 录制时间不够5秒,导致失败
- 核心与录像闪断导致录像失败
- 未按标准流程开发导致录像失败
- 无授权导致的录像失败
- 多录像服务导致的录像失败
- 5.2、音视频不同步
- 勾选p2p接口或静音检测接口,单服务器录像超过7分钟出现音视频不同步
- 摄像头不支持设置的帧率导致音视频不同步
- 本地PC的cpu100%导致音视频不同步
- 合成录制时,录制标记位不正常导致音视频不同步
- 网络丢包、延时等导致音视频不同步
- 某些摄像头的兼容问题导致的音视频不同步
- 5.3、录像音视频卡顿、杂音
- 网络异常导致视频卡顿、有杂音
- 码率设置过高,或者码率与对应的分辨率不匹配导致的卡顿
- 回音消除等参数未配置,导致的录制音频杂音
- 电子设备干扰导致的杂音
- 耳塞异常导致的电流音,杂音
- 码率设置过低导致马赛克问题
- 5.4、录像无音频或者视频黑屏
- 无音视频设备导致录制黑屏无声音
- 音视频设备打开异常,或者被其他程序占用导致的录制黑屏
- 在音视频设备打开之前开启录制导致的录制黑屏
- 240*320等特殊分辨率导致的录制黑屏无声音
- 5.5、录像服务异常
- 录像服务器所在路径过长导致的录像服务启动失败
- 240*320等分辨率设备录制时,低版本录像服务异常
- 多并发的合成录制事件促使CPU过高,导致录制服务异常
- 6.3以下版本录像服务假死导致的多录像服务异常问题
- 5.6、其他