天天看點

Windows平台視訊顯示問題

1、如何顯示本地視訊,或是其它計算機上的視訊?

    a)AnyChat的用戶端必須初始化、登入系統、進入房間成功之後,才能顯示本地視訊或是其它使用者的視訊。

    b)AnyChat有兩種方式來顯示視訊,分别是:自動顯示(BRAC_FUNC_VIDEO_AUTODISP)、回調視訊資料(BRAC_FUNC_VIDEO_CBDATA),應用程式需要在初始化(BRAC_InitSDK)時設定相關的标志來告訴AnyChat如何處理視訊的顯示。

當設定了自動顯示(BRAC_FUNC_VIDEO_AUTODISP)時,應用程式需要設定視訊顯示位置(BRAC_SetVideoPos),當打開本地使用者的視訊,或是請求遠端使用者的視訊時,AnyChat内部會自動将視訊顯示在指定的位置;

如果沒有設定自動顯示标志,而隻設定了回調視訊資料(BRAC_FUNC_VIDEO_CBDATA)标志時,AnyChat内部不會顯示視訊,而是将視訊資料通過回調的方式(130. 視訊資料回調函數)送出給應用程式,由應用程式自己來繪制;

    c)當使用者使用API接口(BRAC_UserCameraControl)打開本地攝像頭後,本地計算機的視訊即可顯示出來;

    d)當使用者使用API接口(BRAC_UserCameraControl)請求其它使用者的視訊資料時,隻有該使用者打開自己的攝像頭之後,本地計算機才能收到對方使用者的視訊;

2、什麼是視訊顯示驅動,如何選擇?

    Windows平台有多種方式來實作視訊的顯示,常見的有GDI繪圖和DirectShow兩種模式。當設定AnyChat自動顯示視訊标志時,應用程式可以在這兩種模式之間進行選擇,視訊顯示驅動的選擇需要在初始化(BRAC_InitSDK)成功之後設定,下面的代碼示範了選擇DirectShow顯示驅動:

1.

// 選擇AnyChat顯示驅動

2.

DWORD

dwVideoDriver = BRAC_VSD_DIRECTSHOW;

3.

BRAC_SetSDKOption(BRAC_SO_VIDEOSHOW_DRIVERCTRL,(

const

char

*)&dwVideoDriver, 

sizeof

(

DWORD

));

    AnyChat為了簡化應用程式開發流程,同時也為了相容更早期的版本,預設采用GDI繪圖方式來顯示視訊;GDI繪圖方式适合分辯率不大于CIF(352x288),同時幀率低于20FPS的視訊顯示;DirectShow顯示模式适合高分辨率、高幀率的視訊顯示。

DirectShow顯示模式在高視訊品質下更節約資源;

    (*注:視訊顯示驅動選擇功能為AnyChat Platform Core SDK V4.0版本新增功能)

3、顯示的視訊為何有些變形,如何設定?

    當視訊顯示區域的大小與視訊的原始大小不成比例時,所顯示的視訊将會變形,是以要保證顯示的視訊不變形,則必須保證視訊顯示區域與視訊的原始大小成正比關系;

    通過WM_GV_VIDEOSIZECHG消息(V4.0版本新增)可以知道每一個使用者目前原始視訊的大小,應用程式可以根據原始視訊的大小來确定視訊顯示區域的大小,也可以通過API(BRAC_QueryUserState)來擷取使用者目前的視訊大小;

    當使用者進入房間時,AnyChat内部會每一個線上使用者觸發一次WM_GV_VIDEOSIZECHG消息;

    當使用者修改視訊采集分辨率時,房間内所有使用者都将收到該使用者的WM_GV_VIDEOSIZECHG消息;

4、為何有時視訊被其它視窗覆寫,或是最小化後視訊被遮擋,不能自動重新整理?

繼續閱讀