在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!");
- 一、說明
- 面向讀者
- 技術支持
- 二、、錄像功能介紹
- 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、其他