在使用腾讯互动直播的时候,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 就好了。