设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 17600|回复: 1

2014-10-26 开放视频显示、录制过程中的裁剪模式控制接口

[复制链接]

249

主题

2967

帖子

9080

积分

管理员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

249

主题

2967

帖子

9080

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9080
 楼主| 发表于 2014-11-6 14:22:38 | 显示全部楼层
可下载最新的AnyChat for Web SDK重新安装插件),运行AnyChatWebDemo示例代码(位于SDK包的src目录下),在“高级设置”-->“其它设置”栏目中增加了一个设置项“视频显示裁剪模式”。

当另一方用手机连接,且手机竖拿时,通过调节“视频显示裁剪模式”可以看到不同裁剪模式的实际效果。
clipmode.jpg
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|AnyChat ( 粤ICP备13022410号-1 )  

GMT+8, 2024-5-23 13:41 , Processed in 0.122506 second(s), 30 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表