首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TRTC 视频旋转场景方案

TRTC 视频旋转场景方案

原创
作者头像
erickyan
发布于 2022-04-12 07:27:15
发布于 2022-04-12 07:27:15
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

场景介绍

在网络会议、双人视频通话等场景时,将手机横屏、竖屏放置场景下,实现本地和远端都可以看到正常的画面效果。

效果演示

当左边手机进行旋转时,即进行横屏推流,右边手机的小画面订阅到的远端流,动态调整view进行适配,避免出现黑边;

当两端手机都进行旋转时,两端都进行横屏推流,各自订阅的远端流画面进行动态调整view;

无论如何旋转手机,两端看到的画面都是正的。

(大画面:本地摄像头; 小画面:远端流)

实现逻辑

推流端

1)开启 SDK 重力感应,默认就是开启的,如果关闭了,请调用接口打开 SDK 重力感应

2)监听手机旋转角度

3)根据不同的旋转角度,设置视频编码参数,即横屏/竖屏编码

4)发送 SEI 消息,告知房间内其他用户,当前是横屏还是竖屏

5)根据不同的旋转角度,旋转自己订阅的远端流的画面

6)根据不同的旋转角度,来调整 activity 为横屏或竖屏

拉流端

1)收到远端用户的第一帧视频,根据宽高数据,调整渲染远端流的 view 宽高,避免小窗口出现黑边

2)当推流端旋转手机时,可以收到发送的 SEI 消息,根据传递过来的横屏或竖屏,调整渲染远端流的 view 宽高,避免出现黑边

代码逻辑

1)TRTC SDK 版本号

这里可以指定使用 9.5.11347 版本的 SDK,体验下效果。

SDK 发布日志历史:参考文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
com.tencent.liteav:LiteAVSDK_TRTC:9.5.11347

2)修改清单文件

android:configChanges 避免重新启动 activity

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<activity 
    android:name="com.tencent.trtc.videocall.VideoCallingActivity"
    android:configChanges="orientation|keyboard|layoutDirection|screenSize"
    android:screenOrientation="portrait"
    />

3)开启重力感应

setGSensorMode 设置重力感应接口,默认开启,默认值为 TRTCGSensorMode_UIAutoLayout

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mTRTCCloud.setGSensorMode(TRTCCloudDef.TRTC_GSENSOR_MODE_UIAUTOLAYOUT);

4)监听手机的旋转

当手机旋转时,如:90度、180度、270度时,需要将 activity 调整设置对应的 横屏或竖屏

使用 OrientationEventListener 实时监听手机的旋转角度

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 获取到手机旋转的角度,取四个方向:0、90、180、270度
 * @param orientation 0、90、180、270度
 */
@Override
public void onOrientationChanged(int orientation) {
    // 手机平放,获取不到旋转角度
    if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {
        return;
    }

    // 获取手机旋转角度 : 0
    if (orientation > 350 || orientation < 10) {
        // 在当前旋转角度下,仅调用一次,切换角度后再去调用
        if (!isCall(0)) {
            // 根据旋转的角度,调整推流编码、发送SEI、调整渲染的view、activity方向
            adjustVideoEnc(0);
        }
    // 获取手机旋转角度 : 90
    } else if (orientation > 80 &amp;&amp; orientation < 100) {
        // 在当前旋转角度下,仅调用一次,切换角度后再去调用
        if (!isCall(90)) {
            // 根据旋转的角度,调整推流编码、发送SEI、调整渲染的view、activity方向
            adjustVideoEnc(90);
        }
    // 获取手机旋转角度 : 180
    } else if (orientation > 170 &amp;&amp; orientation < 190) {
        // 在当前旋转角度下,仅调用一次,切换角度后再去调用
        if (!isCall(180)) {
            // 根据旋转的角度,调整推流编码、发送SEI、调整渲染的view、activity方向
            adjustVideoEnc(180);
        }
    // 获取手机旋转角度 : 270
    } else if (orientation > 260 &amp;&amp; orientation < 280) {
        // 在当前旋转角度下,仅调用一次,切换角度后再去调用
        if (!isCall(270)) {
            // 根据旋转的角度,调整推流编码、发送SEI、调整渲染的view、activity方向
            adjustVideoEnc(270);
        }
    }
}

手机的旋转角度事件,非常频繁,避免重复调用,需要控制下请求:

(这里仅是示例,根据实际需要进行调整逻辑!)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 在指定旋转角度,是否已经操作了,避免连续在同一个旋转角度操作多次
 * @param mOrientation 0、90、180、270度
 * @return true: 之前一次已经操作过了,不要再次操作了;  false:之前一次没操作过,你去操作吧
 */
public boolean isCall(int mOrientation) {
    Boolean flag = mRotationCall.get(mOrientation);
    if (flag == null) {
        flag = false;
    }

    switch (mOrientation) {
        case 0:
            mRotationCall.put(0, true);
            mRotationCall.put(90, false);
            mRotationCall.put(180, false);
            mRotationCall.put(270, false);
            break;
        case 90:
            mRotationCall.put(0, false);
            mRotationCall.put(90, true);
            mRotationCall.put(180, false);
            mRotationCall.put(270, false);
            break;
        case 180:
            mRotationCall.put(0, false);
            mRotationCall.put(90, false);
            mRotationCall.put(180, true);
            mRotationCall.put(270, false);
            break;
        case 270:
            mRotationCall.put(0, false);
            mRotationCall.put(90, false);
            mRotationCall.put(180, false);
            mRotationCall.put(270, true);
            break;
        default:
            break;
    }
    return flag;
}

5)根据不同的旋转角度,调整编码参数、发送SEI消息、旋转远端用户的画面、activity横竖屏

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 1)推到远端流的编码参数
 *    1.1)如果是竖屏,就设置竖屏的编码参数
 *    1.2)如果是横屏,就设置横屏的编码参数
 * 2)发送 SEI 消息
 *    1.1)如果当前是横屏推流,就告诉房间内其他人,我当前在推横屏
 *        1.1.1)房间内其他用户收到后,调整对应用户的 view 的宽高比,避免出现黑边
 *    1.2)如果当前是竖屏推流,就告诉房间内其他人,我当前在推竖屏
 *        1.1.1)房间内其他用户收到后,调整对应用户的 view 的宽高比,避免出现黑边
 * 3)旋转远端用户的画面
 *    3.1)我当前拉取到了其他人的流,我当前切换成 横屏/竖屏 ,需要旋转远端用户的画面,避免方向不一致
 * 4)设置当前 activity 横屏 或 竖屏
 * @param mOrientation 旋转的角度,如:0 90 180 270
 */
public void adjustVideoEnc(int mOrientation) {
    // 本地画面旋转角度设置 0
    TRTCCloudDef.TRTCRenderParams params = new TRTCCloudDef.TRTCRenderParams();
    params.rotation = TRTC_VIDEO_ROTATION_0;
    mTRTCCloud.setLocalRenderParams(params);

    switch (mOrientation) {
        case 0:
            Log.d(TAG, "旋转角度 0");
            // 1)设置推到远端的编码参数
            TRTCCloudDef.TRTCVideoEncParam param = new TRTCCloudDef.TRTCVideoEncParam();
            param.videoResolutionMode = TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT; // 竖屏
            mTRTCCloud.setVideoEncoderParam(param);

            // 2)发送消息给房间内其它用户,说自己调整了横竖屏
            JSONObject buildInfoJson = new JSONObject();
            try {
                buildInfoJson.put("TRTC_VIDEO_RESOLUTION_MODE", "PORTRAIT");
            } catch (Exception e) {
            }
            mTRTCCloud.sendSEIMsg(buildInfoJson.toString().getBytes(), 1);

            // 3)旋转订阅的远端画面
            for (String uid : mRemoteUidList){
                TRTCCloudDef.TRTCRenderParams renderParams = new TRTCCloudDef.TRTCRenderParams();
                renderParams.rotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0;
                renderParams.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FIT;  // 默认值fill,这里手动指定fit
                mTRTCCloud.setRemoteRenderParams(uid, TRTC_VIDEO_STREAM_TYPE_BIG, renderParams);
            }

            // 4)设置 activity 竖屏
            VideoCallingActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            break;
        case 90:
            Log.d(TAG, "旋转角度 90");
            // 1)设置推到远端的编码参数
            param = new TRTCCloudDef.TRTCVideoEncParam();
            param.videoResolutionMode = TRTC_VIDEO_RESOLUTION_MODE_LANDSCAPE; // 横屏
            mTRTCCloud.setVideoEncoderParam(param);

            // 2)发送消息给房间内其它用户,说自己调整了横竖屏
            buildInfoJson = new JSONObject();
            try {
                buildInfoJson.put("TRTC_VIDEO_RESOLUTION_MODE", "LANDSCAPE");
            } catch (Exception e) {
            }
            mTRTCCloud.sendSEIMsg(buildInfoJson.toString().getBytes(), 1);

            // 3)旋转订阅的远端画面
            for (String uid : mRemoteUidList){
                TRTCCloudDef.TRTCRenderParams renderParams = new TRTCCloudDef.TRTCRenderParams();
                renderParams.rotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_180;
                renderParams.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FIT;  // 默认值fill,这里手动指定fit
                mTRTCCloud.setRemoteRenderParams(uid, TRTC_VIDEO_STREAM_TYPE_BIG, renderParams);
            }

            // 4)设置 activity 横屏
            VideoCallingActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            break;
        case 180:
            Log.d(TAG, "旋转角度 180");
            // 1)设置推到远端的编码参数
            param = new TRTCCloudDef.TRTCVideoEncParam();
            param.videoResolutionMode = TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT; // 竖屏
            mTRTCCloud.setVideoEncoderParam(param);

            // 2)发送消息给房间内其它用户,说自己调整了横竖屏
            buildInfoJson = new JSONObject();
            try {
                buildInfoJson.put("TRTC_VIDEO_RESOLUTION_MODE", "PORTRAIT");
            } catch (Exception e) {
            }
            mTRTCCloud.sendSEIMsg(buildInfoJson.toString().getBytes(), 1);

            // 3)旋转订阅的远端画面
            for (String uid : mRemoteUidList){
                TRTCCloudDef.TRTCRenderParams renderParams = new TRTCCloudDef.TRTCRenderParams();
                renderParams.rotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_180;
                renderParams.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FIT;  // 默认值fill,这里手动指定fit
                mTRTCCloud.setRemoteRenderParams(uid, TRTC_VIDEO_STREAM_TYPE_BIG, renderParams);
            }

            // 4)设置 activity 竖屏
            VideoCallingActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            break;
        case 270:
            Log.d(TAG, "旋转角度 270");
            // 1)设置推到远端的编码参数
            param = new TRTCCloudDef.TRTCVideoEncParam();
            param.videoResolutionMode = TRTC_VIDEO_RESOLUTION_MODE_LANDSCAPE; // 横屏
            mTRTCCloud.setVideoEncoderParam(param);

            // 2)发送消息给房间内其它用户,说自己调整了横竖屏
            buildInfoJson = new JSONObject();
            try {
                buildInfoJson.put("TRTC_VIDEO_RESOLUTION_MODE", "LANDSCAPE");
            } catch (Exception e) {
            }
            mTRTCCloud.sendSEIMsg(buildInfoJson.toString().getBytes(), 1);

            // 3)旋转订阅的远端画面
            for (String uid : mRemoteUidList){
                TRTCCloudDef.TRTCRenderParams renderParams = new TRTCCloudDef.TRTCRenderParams();
                renderParams.rotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0;
                renderParams.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FIT;  // 默认值fill,这里手动指定fit
                mTRTCCloud.setRemoteRenderParams(uid, TRTC_VIDEO_STREAM_TYPE_BIG, renderParams);
            }

            // 4)设置 activity 横屏
            VideoCallingActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            break;
        default:
            break;
    }
}

6)收到SEI消息、首帧视频

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/***
 * 收到元旦用户告知,远端用户切换了横屏/竖屏,赶紧调整下 view 的窗口大小
 * @param userId 发送消息的用户
 * @param data 发送的数据
 */
@Override
public void onRecvSEIMsg(String userId, byte[] data) {
    // 解析数据
    Map<String, Object> objectMap = new Gson().fromJson(new String(data), Map.class);
    Object mode = objectMap.get("TRTC_VIDEO_RESOLUTION_MODE");
    if (mode instanceof String) {
        // 横屏
        if (mode.equals("LANDSCAPE")) {
            // 当前收到远端用户告知为横屏,调整该远端用户 view 的大小,以免出现黑边
            // 设置传入的宽高,仅表示 宽 > 高
            adjustRemoteViewResolutionMode(userId, 1, 0);
        // 竖屏
        } else if (mode.equals("PORTRAIT")) {
            // 当前收到远端用户告知为竖屏,调整该远端用户 view 的大小,以免出现黑边
            // 设置传入的宽高,仅表示 宽 < 高
            adjustRemoteViewResolutionMode(userId, 0, 1);
        }
    }
}

/***
 * 收到用户的第一帧视频画面
 * 如果 userId 为空值,代表 SDK 已经开始渲染自己本地的视频画面
 * 如果 userId 不为空,代表 SDK 已经开始渲染远端用户的视频画面
 * @param userId 哪个用户的视频首帧
 * @param streamType 流类型
 * @param width 宽
 * @param height 高
 */
@Override
public void onFirstVideoFrame(String userId, int streamType, int width, int height) {
    /**
     * 不为空,即为远端用户的,也仅仅调整远端用户的 view
     */
    if (userId != null) {
        // 根据首帧收到的宽高,来确定流的分辨率,以便调整 view 的宽高
        // 宽 > 高,说明要 view的 宽 > 高
        // 宽 < 高,说明要 view的 宽 < 高
        adjustRemoteViewResolutionMode(userId, width, height);
    }
}

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 调整远端 view 的大小
 * 当传入的 宽 > 高,说明是要横着展示远端的流,那么 view 的 宽 > 高 来设置
 *    1)如果 view 的 宽 > 高 , 就不做处理
 *    2)如果 view 的 宽 < 高 , 那就把 宽和高 对调下大小
 * 当传入的 宽 < 高,说明是要横着展示远端的流,那么 view 的 宽 < 高 来设置
 *    1)如果 view 的 宽 < 高 , 就不做处理
 *    2)如果 view 的 宽 > 高 , 那就把 宽和高 对调下大小
 * @param userId 对应的远端用户
 * @param width 宽度
 * @param height 高度
 */
private void adjustRemoteViewResolutionMode(String userId, int width, int height) {
    // 获取对应 userId 的下标
    int index = mRemoteUidList.indexOf(userId);
    // index 不等于 -1,说明存在该 userId
    if (index != -1) {
        // 根据 index 获取对应用户的 view
        TXCloudVideoView videoView = mRemoteViewList.get(index);
        // 获取该 userId 对应 view 的 LayoutParams
        ViewGroup.LayoutParams layoutParams = videoView.getLayoutParams();
        // 如果传入过来要求的 宽 > 高,即 横着
        if (width > height) {
            // 如果已经给它的 宽 < 高,那么就要调整他,使它的 宽 > 高,宽高对调即可
            if (layoutParams.width < layoutParams.height) {
                int tempWidth = layoutParams.width;
                layoutParams.width = layoutParams.height;
                layoutParams.height = tempWidth;
                videoView.setLayoutParams(layoutParams);
            }
        // 如果传入过来要求的 宽 < 高,即 竖着
        } else if (width < height) {
            // 如果已经给它的 宽 > 高,那么就要调整他,使它的 宽 < 高,宽高对调即可
            if (layoutParams.width > layoutParams.height) {
                int tempWidth = layoutParams.width;
                layoutParams.width = layoutParams.height;
                layoutParams.height = tempWidth;
                videoView.setLayoutParams(layoutParams);
            }
        }
    }
}

代码示例

当运行demo时,记得修改 GenerateTestUserSig 文件中的 SDKAPPID、SECRETKEY,才能正常运行起来。

文件:Debug\src\main\java\com\tencent\trtc\debug\GenerateTestUserSig.java

控制台上获取对应的应用信息
控制台上获取对应的应用信息

演示示例代码:如附件

TRTC-API-Example.zip

参考文档

视频画面旋转和缩放:https://cloud.tencent.com/document/product/647/32237

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TRTC零基础上手 -- 码上视频推流篇
视频画面来自于摄像头,TRTC SDK会采集摄像头的画面,然后编码打包发送至云端链路,开发者只需要调用采集接口和设置编码器视频参数(码率、分辨率、帧率等)完成摄像头画面的采集。
天上云间
2022/01/13
2.4K0
TRTC 9.5 之前版本解决小众平板(蓝莓、希沃)角度问题
背景:教育类客户反馈学生使用市面上一些小众 Android 平板设备出现上课时摄像头角度偏移 90 度的问题
尼尔包曼
2022/07/19
1.5K0
TRTC 9.5 之前版本解决小众平板(蓝莓、希沃)角度问题
TRTC横竖屏切换
用户要的只是4种效果:自己横竖屏切换+对方看到的横竖屏切换,但是sdk却有4X4X4=64种实现方式,一旦遇到问题就很费解。以下将引导:用最简单的方式,体验sdk的横竖屏切换功能。
腾讯云-chaoli
2020/08/16
3.4K0
TRTC横竖屏切换
TRTC零基础上手 -- 码上视频订阅篇
当作为拉流端,在远端推流后即可开始拉流,为了用户体验,建议按照规范要求,在收到SDK的事件回调后开始拉流,并在控件上显示远端画面
天上云间
2022/01/19
1.3K0
实时音视频(TRTC)常见问题
一般而言,媒体音量指播放音乐、视频的声音、游戏声音等的音量,而通话音量指打电话的音量,视频通话的音量。
腾讯云-yyuanchen
2019/09/27
13.7K1
trtc-electron音视频学习初体验
TRTC 支持四种不同的进房模式,其中视频通话(VideoCall)和语音通话(VoiceCall)统称为通话模式,视频互动直播(Live)和语音互动直播(VoiceChatRoom)统称为 直播模式。在学习测试中主要使用到VideoCall和VoiceCall模式 通话模式下的 TRTC,支持单个房间最多300人同时在线,支持最多30人同时发言。适合1对1视频通话、300人视频会议、在线问诊、远程面试、视频客服、在线狼人杀等应用场景
金林学音视频
2020/10/31
1.4K0
trtc-electron音视频学习初体验
实时音视频 TRTC 常见问题汇总---质量篇
如下代码所示,播放远端观众的画面渲染模式选择 TRTC_VIDEO_RENDER_MODE_FIT模式, 当渲染控件 View 的宽高比与视频宽高此不一致时,有黑边情况。
腾讯视频云-Zachary
2021/10/10
4.1K0
【最佳实践】巡检项:实时音视频 (TRTC) 原生平台 SDK 的进入同一房间的用户是否设定相同的 应用场景(TRTCAppScene)参数
在视频通话场景(VideoCall),出现Android端推流绿屏现象,具体表现是,房间内其他用户拉流观看,显示该用户的画面出现绿色色块,并且在进房后一直持续出现。这种现象不是该用户每次进房都出现,是偶现的。
jackwlchen
2022/04/29
9190
TRTC Android端开发接入学习之实现实时屏幕分享(四)
在完成上一篇文章中我们知道了如何集成到项目中,本节我们来实现其中比较简单的一个功能,熟悉SDK的用法。屏幕分享代码在DEMO->trtcmeetingdemo module中
腾讯云-hongyang
2020/09/02
2K0
TRTC Android端开发接入学习之实现实时屏幕分享(四)
你问我答 | 实时音视频TRTC(2021年8月-10月)
实时音视频TRTC 你问我答 第2季 本期共解答10个问题 Q1:TRTC通话,实现大小屏切换,类似微信通话效果,点击自己的画面和对方的画面展示位置互换。 支持大小屏切换,使用updateView功能,但需要给TXCloudVideoView调用addview添加一个textureview。 解决方案: 通话过程中,保证双方通话画面正常; 直接调用stop,再调用start,会有一段时间黑屏; 直接调用updateView对调,会导致远端画面不显示,或者没有效果; updateView
腾讯云音视频
2021/11/26
1.2K0
Android TRTC 推自定义采集的视频数据
如果开发者想在 TRTC 中集成第三方美颜库来实现美颜、滤镜等功能,第三方库的美颜功能输入数据格式支持有 camera 的原始数据(YUV 数据)、纹理数据(Textureid)。开发者想实现该功能,需要采用自定义采集视频数据接口,然后复用 LiteAVSDK 的编码和推流功能。
腾讯云-chaoli
2019/07/07
2K0
Android TRTC 推自定义采集的视频数据
【最佳实践】巡检项:实时音视频 (TRTC) 原生平台 SDK 拉流时序是否正确
客户业务侧调用mTRTCCloud.startRemoteView()接口订阅远端视频流,出现偶现的失败情况,具体操作是在用户进入房间的回调事件onEnterRoom之前调用startRemoteView(),大概率会出现黑屏现象。客户告知希望可以根据自己的业务逻辑去订阅远端流。
jackwlchen
2022/04/29
5430
实时音视频 TRTC 常见问题汇总---集成接入篇
TRTC 的日志默认压缩加密,后缀为 .xlog。日志是否加密是可以通过 setLogCompressEnabled 来控制,生成的文件名里面含 C(compressed) 的就是加密压缩的,含 R(raw) 的就是明文的。
腾讯视频云-Zachary
2019/11/01
14.6K1
实时音视频 TRTC 常见问题汇总---集成接入篇
TRTC学习之旅(四)-- 用electron实现视频聊天室
前面我们已经学习过在web端用TRTC实时音视频SDK实现了多人会议室和互动直播模式,今天我们学习一下在桌面应用层用electron实现视频聊天。
黑眼圈云豆
2020/07/08
4.9K7
TRTC横竖屏切换1,手动切换
用户要的只是4种效果:自己横竖屏切换+对方看到的横竖屏切换,但是sdk却有4X4X4=64种实现方式,一旦遇到问题就很费解。以下将引导:用最简单的方式,体验sdk的横竖屏切换功能。
ppchao
2020/12/14
2.4K0
TRTC横竖屏切换1,手动切换
微信小程序TRTC使用custom自定义面板(实现篇)
本文主要是使用 custom 面板实现直播互动,上下麦操作。如有疑问可参考 微信小程序TRTC使用custom自定义面板(理解篇)。本文只是简单演示如何实现主播与观众进行连麦互动,在实际中,通常是有主播端发起与粉丝进行直播互动,通过粉丝来接受,进行连麦。发送这种消息可以使用IM(即时通讯)完成。
yuliang
2021/03/16
1.4K0
TRTC终端混流示例
使用TRTCSDK直播时,如果角色都是大主播、小主播,类似会议场景,每个角色都是参与者,且人数较少(30以内),彼此通过渲染对方的view,来实现一屏多画面;
ppchao
2020/12/11
1.3K0
TRTC终端混流示例
TRTC横竖屏切换2,重力感应
如前篇文章《TRTC横竖屏切换1,手动切换》介绍,TRTCSDK提供了三个api,支持手动调整横竖屏切换,组合起来有4X4X4=64种变化,满足所有横竖屏切换需求。
ppchao
2020/12/14
1.5K0
TRTC横竖屏切换2,重力感应
【最佳实践】巡检项:实时音视频 (TRTC) 原生平台 SDK 视频码率设置是否合理
在直播场景中,主播的推流分辨率已经设置为1080p,但观众端看到的画面还是很模糊。通过分析这个案例,发现问题不是出现在推流端分辨率过低导致的模糊。从仪表盘上观察推流数据发现,上行分辨率是1080p,但是推流的码率过低。1080p x 15fps的码率只有500kbps左右,在排除了推流端的网络带宽不足情况,跟客户确认了,应用侧设置码率是只有500kbps。
jackwlchen
2022/04/29
7480
Android 实时音视频(TRTC)实现横屏视频通话
如果您因业务场景需求,需要用户将手机横着放,然后进行视频通话。可以参考以下文档实现该功能。
腾讯云-yyuanchen
2019/08/22
10.2K1
推荐阅读
相关推荐
TRTC零基础上手 -- 码上视频推流篇
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验