1. 程式人生 > >騰訊互動直播1.7橫豎屏切換以及畫面顛倒問題解決

騰訊互動直播1.7橫豎屏切換以及畫面顛倒問題解決

在使用騰訊互動直播的時候,Android 版本1.7demo裡面直播端和觀眾端手機螢幕的旋轉都做了監聽,這樣就會導致一個問題,就是直播端橫屏直播了,但是觀眾端是豎屏的,看到的就是小螢幕,所以我這裡的解決方案就是不監聽橫豎屏的切換,還有就是畫面顛倒,重設映象就可以了。下面是具體的問題;

問題1:直播端橫豎屏切換的時候,觀眾端不動,會看到小螢幕的情況

這裡寫圖片描述

這種情況就是,直播端橫屏直播了,但是觀眾端是豎屏看的,導致看到小螢幕的問題

修改方法:在直播介面將監聽橫豎屏的相關程式碼註釋或者刪除

    void registerOrientationListener() {
//        if (mOrientationEventListener == null) {
// mOrientationEventListener = new VideoOrientationEventListener(super.getApplicationContext(), SensorManager.SENSOR_DELAY_UI); // } } void startOrientationListener() { // if (mOrientationEventListener != null) { // mOrientationEventListener.enable(); // } } void
stopOrientationListener() { // if (mOrientationEventListener != null) { // mOrientationEventListener.disable(); // } }

原始碼是監聽螢幕旋轉,切換螢幕方向的。我覺得使用者體驗並不是很好,直接給註釋了。

這裡寫圖片描述

下圖是解決之後的效果:觀眾端看到的就是橫過來的畫面,圖片不清晰是我截圖的問題
這裡寫圖片描述

問題2:不監聽橫豎屏之後,在前置或者後置攝像頭進行直播的時候,直播端的畫面是反的,即人物是顛倒的

這裡寫圖片描述

直播端看到的畫面,在橫屏的情況下,主播看到自己的畫面一直是倒過來的。修改方法重置映象

//切換攝像頭呼叫的方法
private void onSwitchCamera() {
        boolean isFront = mQavsdkControl.getIsFrontCamera();
        Log.d(TAG, "onSwitchCamera 111111  " + isFront+",mHostIdentifier="+mHostIdentifier);

        //關鍵的地方,設定映象的方法
        mQavsdkControl.setMirror(isFront,mHostIdentifier);
        mSwitchCameraErrorCode = mQavsdkControl.toggleSwitchCamera();

        Log.d(TAG, "onSwitchCamera() switchCamera!!  " + mSwitchCameraErrorCode);
        refreshCameraUI();
        if (mSwitchCameraErrorCode != AVError.AV_OK) {
            showDialog(isFront ? DIALOG_SWITCH_BACK_CAMERA_FAILED : DIALOG_SWITCH_FRONT_CAMERA_FAILED);
            mQavsdkControl.setIsInSwitchCamera(false);
            refreshCameraUI();
        } else {
//            Log.d(TAG, "onSwitchCamera " + currentCameraIsFront);
        }
    }

主要是找到 mAVUIControl,在這層控制
public void setMirror(boolean isFront,String ident){
if(mAVUIControl!=null){
mAVUIControl.setCameraMirror(isFront,ident);
}
}

//這個方法是我手動新增的,demo 裡面沒有
public void setCameraMirror(boolean isFront,String identifier){
        Log.d(TAG, "setCameraMirror  isFront " + isFront+",identifier="+identifier);

        GLVideoView view = null;
        int index = getViewIndexById(identifier, AVView.VIDEO_SRC_TYPE_CAMERA);
        if (index < 0) {
            index = getIdleViewIndex(0);

            if (index >= 0) {
                view = mGlVideoView[index];
            }
        } else {
            view = mGlVideoView[index];
        }
        if (view != null) {
        //設定映象的地方
            view.setMirror(!isFront);
        }
    }

view.setMirror(!isFront); true 或者 false 更具自己攝像頭的情況定,我是後置是反的,所以是開啟後置攝像頭的時候,我設定的是true,
如果你前置是反的,開啟前置的時候,設定為 true 就好了。