zhaoyang21cn / iLiveSDK_Android_Suixinbo

ILiveSDK samples
250 stars 86 forks source link

互动直播横屏方案(主播以横屏为基准横屏推流) #84

Open lingyunzhu opened 6 years ago

lingyunzhu commented 6 years ago

wechatimg28

我看了官方文档 如何旋转和裁剪画面 ,发现都是以竖屏为基准推流的,请问以横屏为基准,需要怎么样做?我目前这样做: avRootView.setAutoOrientation(false); avRootView.setRemoteRotationFix(270);//设置本地采集画面在远端上的角度 这样主播横屏推出去的流是就是横屏的。但是多人互动主播本地和观众端都会有各种方向错误的问题,目前就是在 avVideoView.setRecvFirstFrameListener中重写onFirstFrameRecved(int width, int height, int angle, String identifier),然后按照angle值判断然后旋转画面,但切换摄像头、切换大小视频(avVideoView)总是会有些问题?感觉自己的套路不对(这样做维护成本会很大),请问有没有更简便合理代价低的方法?

xkazer commented 6 years ago

《如何旋转和裁剪画面》这篇文档,是用于解决画面(显示控件与视频尺寸不匹配)一致问题的,这里与视频的旋转角度是无关(画面不一致时,旋转90度只是一种策略)的。

针对旋转问题,分两种情况: 一、自动旋转时方向调整 (1) 对于固定或无重力感应设备可以setDeviceRotation设置设备初始角度 (2) 对于非常规设备摄像头方向,通过下面两个接口来对视频方向进行纠正(视频上行方): setRemoteRotationFix 修正上行视频角度(以保证观众看到自己的视频正确) setLocalRotationFix 修正本地预览画面角度

二、手动旋转时方向调整(setAutoOrientation为false) 不推荐这种,因为用户还需要自己去上行角度,下行渲染角度方案如下: // 主播方设置上行视频角度 ((AVVideoCtrl)ILiveSDK.getInstance().getVideoEngine().getVideoObj()).setRotation(90);

// 主播或观众设置,只影响本地 AVVideoView的setRotation来纠正渲染时的视频角度

lingyunzhu commented 6 years ago

@xkazer 感谢您的回答,由于需求比较非常规,我目前是手动旋转的。