前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TRTC零基础上手 -- 码上视频推流篇

TRTC零基础上手 -- 码上视频推流篇

原创
作者头像
天上云间
修改2022-01-13 12:13:13
2K0
修改2022-01-13 12:13:13
举报
文章被收录于专栏:云学堂云学堂

本文将介绍TRTC视频推流的API以及注意事项并加上示例代码,让读者对TRTC中视频推流方面有所了解。

TRTC上手系列文章

🚩 采集视频画面的三种方式

1. startLocalPreview()摄像头采集的画面

视频画面来自于摄像头,TRTC SDK会采集摄像头的画面,然后编码打包发送至云端链路,开发者只需要调用采集接口和设置编码器视频参数(码率、分辨率、帧率等)完成摄像头画面的采集。

示例代码

代码语言:java
复制
// 视频编码参数
TRTCCloudDef.TRTCVideoEncParam videoEncParams = new TRTCCloudDef.TRTCVideoEncParam();
videoEncParams.videoBitrate = 1500;         // 编码码率
videoEncParams.minVideoBitrate = 640;       // 最小码率
videoEncParams.videoFps = 15;               // 设置帧率
mTRTCCloud.setVideoEncoderParam(videoEncParams);
// 发起视频采集并预览
mTRTCCloud.startLocalPreview(mIsFrontCamera, mTXCVVLocalPreviewView);

注意事项

  • 为了达到秒开的效果,建议在进房前开始摄像头采集。
  • 如果是进房后不显示摄像头,可以调用muteLocalVideo,暂停视频

2. startScreenCapture() 采集屏幕共享画面

屏幕共享画面上在教育展示等场景直接让远端用户观看自己的屏幕画面,TRTC SDK会采集屏幕画面,编码打包后发送到云端链路。开发者只需设置好分辨率、码率等参数,然后一键发起屏幕共享;支持Window、iOS、Android和Web发起屏幕共享。

示例代码

代码语言:java
复制
// 视频编码参数
TRTCCloudDef.TRTCVideoEncParam encParams = new TRTCCloudDef.TRTCVideoEncParam();
encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1280_720;
encParams.videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_LANDSCAPE;
encParams.videoFps = 10;
encParams.enableAdjustRes = false;
encParams.videoBitrate = 1200;

TRTCCloudDef.TRTCScreenShareParams params = new TRTCCloudDef.TRTCScreenShareParams();
// 发起屏幕分享
mTRTCCloud.startScreenCapture(TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SUB, encParams, params);
  

注意事项

  • 屏幕共享通常是固定画面,对流畅性的要求不是太高,建议设置帧率8-10fps。
  • 如果是课件类屏幕共享应根据桌面的分辨率设置,比如1920x1080.
  • 最新移动版本已支持屏幕分享走辅路。
  • 屏幕分享画面不支持设置镜像效果。

3. sendCustomVideoData()自定义采集视频画面

TRTC 部分SDK支持采集自定义画面,开发者只需要按一定的帧率发送经过处理的帧数据包到TRTC SDK,SDK将自动打包并发送到云端链路。

如果开发者需要更灵活的场景,比如下列场景可以使用该功能:

  • 接入第三方美颜模块
  • 添加直播间特效。

示例代码

代码语言:java
复制
// 启用自定义采集
mTRTCCloud.enableCustomVideoCapture(TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG,true);

// 组装视频帧数据包
TRTCCloudDef.TRTCVideoFrame videoFrame = new
TRTCCloudDef.TRTCVideoFrame();
videoFrame.texture = new TRTCCloudDef.TRTCTexture();
videoFrame.texture.textureId = textureId;
videoFrame.texture.eglContext14 = eglContext;
videoFrame.width = width;
videoFrame.height = height;
videoFrame.pixelFormat = TRTCCloudDef.TRTC_VIDEO_PIXEL_FORMAT_Texture_2D;
 videoFrame.bufferType = TRTCCloudDef.TRTC_VIDEO_BUFFER_TYPE_TEXTURE;
 
 // 发送自定义视频帧数据包
mTRTCCloud.sendCustomVideoData(TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG ,videoFrame);

注意事项

  • 需要先用 enableCustomVideoCapture 启用并指定流类型才会真正开始接管正常采集。
  • 自定义采集需要按照指定的帧率发送数据,才可以保证观看端的流畅。
  • 自定义采集分辨率有视频帧的width和height决定。

自定义采集文档

🚩 视频编码器设置

1. VideoResolution 设置画面分辨率

示例代码

代码语言:txt
复制
TRTCCloudDef.TRTCVideoEncParam encParams = new TRTCCloudDef.TRTCVideoEncParam();
... 
// 设置分辨率
encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1280_720;

注意事项

  • 枚举值已包含大多数场景的分辨率。

2. VideoResolutionMode 设置画面方向

分辨率主要分横屏或竖屏,对应的桌面端和移动端摄像头采集的视频画面。

示例代码

代码语言:txt
复制
TRTCCloudDef.TRTCVideoEncParam encParams = new TRTCCloudDef.TRTCVideoEncParam();
...
// 设置分辨率方向
encParams.videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT;

注意事项

  • 部分平板设备摄像头的方向跟手机不一致,同时又没有重力传感器的时候,需要手动设置分辨率的方向。

3. setVideoEncoderMirror()设置镜像画面

人们在视频通话过程中,更希望看到的是自己的镜像图像。设置后预览画面和远端观看的画面将是镜像。

-- 注意,屏幕分享时候镜像无效。

示例代码

代码语言:txt
复制
boolean isMirror = true ; //设置是否镜像
 mTRTCCloud.setVideoEncoderMirror( isMirror );

注意事项

  • 屏幕分享不支持设置镜像。

4. VideoBitrate 设定推流码率

示例代码

代码语言:txt
复制
 TRTCCloudDef.TRTCVideoEncParam videoEncParams = new TRTCCloudDef.TRTCVideoEncParam();
 videoEncParams.videoBitrate = 1500;         // 编码码率
 videoEncParams.minVideoBitrate = 640;       // 最小码率 
 mTRTCCloud.setVideoEncoderParam(videoEncParams);

注意事项

  • SDK会根据网络状况在最小码率和和设定码率之间调整上行码率。可能会影响画面质量。
  • 如果对画面质量有要求可以把 minVideoBitrate和 videoBitrate 设为相近值。
  • 如果videoBitrate和minVideoBitrate设为相同值,将禁用动态码率功能。

5. enableEncSmallVideoStream()启用小流画面

为了能够兼容不同的带宽,可以开启通过TRTC SDK开启大小流画面编码(双路编码),在低码率环境,用户只需要拉小画面视频流,正常码率环境的用户拉大画面视频流。需要开发者手动启用,并设定小画面的码率、分辨率等参数。

示例代码

代码语言:java
复制
TRTCCloudDef.TRTCVideoEncParam videoEncParams = new TRTCCloudDef.TRTCVideoEncParam();
videoEncParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_240_180;
...
...
// 启用并设置小流的编码器参数
mTRTCCloud.enableEncSmallVideoStream(true, videoEncParams );

注意事项

  • 部分IoT设备不支持双路编码,需要评估是否开启。
  • 部分移动设备的性能有限,建议只在台式机开启大小流。

🚩 预览画面设置

1. setLocalRenderParams 预览画面参数设置

示例代码

代码语言:java
复制
// 画面渲染参数 
TRTCCloudDef.TRTCRenderParams renderParams = new TRTCCloudDef.TRTCRenderParams();
...
// 设置预览画面渲染参数使其生效
mTRTCCloud.setLocalRenderParams(renderParams);

2. fillMode 预览画面渲染模式

SDK支持两种画面渲染模式: Fill和Fit,前者无论原分辨率如何都将画面铺满View组件,多出部分画面将被剪裁;后者将会显示完整的视频画面,多出的部分View区域将黑屏显示。

示例代码

代码语言:java
复制
    TRTCCloudDef.TRTCRenderParams params = new TRTCCloudDef.TRTCRenderParams();
	// 填充模式
    params.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL;
	// 平铺模式
    params.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FIT;
    ...
    // 设置本地预览画面参数
    mTRTCCloud.setLocalRenderParams(params);
	

3. rotation 预览画面旋转角度

代码语言:java
复制
    TRTCCloudDef.TRTCRenderParams params = new TRTCCloudDef.TRTCRenderParams();
	// 旋转画面90度
    params.rotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_90;
    ...
    // 设置本地预览画面参数
    mTRTCCloud.setLocalRenderParams(params);
	

4. mirrorType 预览画面的镜像策略

示例代码

代码语言:java
复制
    TRTCCloudDef.TRTCRenderParams params = new TRTCCloudDef.TRTCRenderParams();
	// 自动模式,如果前置摄像头将会镜像,后置将不会镜像
    params.mirrorType  = TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_AUTO;
	// 强制镜像,前置后置摄像头将开启镜像
	params.mirrorType  = TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_ENABLE;
	// 禁用镜像
	params.mirrorType  = TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_DISABLE; 
    // 设置本地预览画面参数
    mTRTCCloud.setLocalRenderParams(params);
	

🚩 视频推流控制

1. muteLocalVideo 禁用/启用视频推流

muteLocalVideo(true) 将暂停推流视频,远端画面将暂停,本地视频采集还会继续,muteLocalVideo(false):取消暂停视频推流,远端视频画面将恢复显示。

代码语言:java
复制
// 禁用视频推流
mTRTCCloud.muteLocalVideo(TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG , true );
// 恢复视频推流
mTRTCCloud.muteLocalVideo(TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG , false );

注意事项

  • muteLocalVideo true之后,请延时600ms再调用muteLocalVideo false
  • 拉流端将收到 onUserVideoAvailable 事件,请根据该事件决定是否拉流。
  • 可以设置setVideoMuteImage图片,mute期间将显示该图片

setVideoMuteImage 设置被暂停期间的替代图片(垫片)

设置后muteLocalVideo true将推该图片

代码语言:java
复制
 Bitmap bitmap = ...
 // 设置垫片,帧率为 5 
 mTRTCCloud.setVideoMuteImage(bitmap,5);
 
			

2. stopLocalPreview 停止视频推流

停止视频采集已经视频推流,同时预览画面也将黑屏显示。

代码语言:java
复制
mTRTCCloud.stopLocalPreview();   

注意事项

  • 如果主播退出房间后,将自动调用stopLocalPreview停止采集
  • 如果需要在退出房间后继续显示预览画面,请在onExitRoom回到后,用异步方式调用startLocalPreview。

参考文档

代码示例

视频质量

屏幕共享

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TRTC上手系列文章
  • 🚩 采集视频画面的三种方式
    • 1. startLocalPreview()摄像头采集的画面
      • 2. startScreenCapture() 采集屏幕共享画面
        • 3. sendCustomVideoData()自定义采集视频画面
        • 🚩 视频编码器设置
          • 1. VideoResolution 设置画面分辨率
            • 2. VideoResolutionMode 设置画面方向
              • 3. setVideoEncoderMirror()设置镜像画面
                • 4. VideoBitrate 设定推流码率
                  • 5. enableEncSmallVideoStream()启用小流画面
                  • 🚩 预览画面设置
                    • 1. setLocalRenderParams 预览画面参数设置
                      • 2. fillMode 预览画面渲染模式
                        • 3. rotation 预览画面旋转角度
                          • 4. mirrorType 预览画面的镜像策略
                          • 🚩 视频推流控制
                            • 1. muteLocalVideo 禁用/启用视频推流
                              • setVideoMuteImage 设置被暂停期间的替代图片(垫片)
                                • 2. stopLocalPreview 停止视频推流
                                  • 参考文档
                                  相关产品与服务
                                  实时音视频
                                  实时音视频(Tencent RTC)基于腾讯21年来在网络与音视频技术上的深度积累,以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,致力于帮助开发者快速搭建低成本、低延时、高品质的音视频互动解决方案。
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档