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、爲何有時視頻被其它窗口覆蓋,或是最小化後視頻被遮擋,不能自動刷新?

    這主要出現在DirectShow顯示模式下,主要原因是應用程序界面重繪之後,底層的DirectShow沒有獲得重繪的消息通知,所以導致視頻被遮擋,解決方案是響應窗口的WM_PAINT消息,在消息處理函數中調用BRAC_RepaintVideo進行視頻的重繪。

    AnyChat默認的GDI繪圖模式下,不存在該問題。

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章