在360网站做公告怎么弄,公司介绍网站怎么做,品牌设计logo vi设计,百度指数行业排行梳理了下项目中使用的腾讯直播SDK相关#xff0c;为再接入一套声网RTC SDK做些准备工作。
1.sdk集成
dependencies {implementation com.tencent.liteav:LiteAVSDK_Professional:latest.release
}初始化与摄像头推流相关
初始化与摄像头推流相关
2.给 SDK 配置 License 授…梳理了下项目中使用的腾讯直播SDK相关为再接入一套声网RTC SDK做些准备工作。
1.sdk集成
dependencies {implementation com.tencent.liteav:LiteAVSDK_Professional:latest.release
}初始化与摄像头推流相关
初始化与摄像头推流相关
2.给 SDK 配置 License 授权
获取 License 授权 获得相关 License 授权需在 云直播控制台 获取 License URL 和 License Key。在您的 App 调用 SDK 相关功能之前建议在 Application 类中进行如下设置 官方推荐如下
public class MApplication extends Application {Override
public void onCreate() {super.onCreate();String licenceURL ; // 获取到的 licence urlString licenceKey ; // 获取到的 licence keyV2TXLivePremier.setLicence(this, licenceURL, licenceKey);V2TXLivePremier.setObserver(new V2TXLivePremierObserver() {Overridepublic void onLicenceLoaded(int result, String reason) {Log.i(TAG, onLicenceLoaded: result: result , reason: reason);}});
}而在开发中我们选择在启动页SplashActivity中处理配置授权逻辑以及相关初始化操作这个设计到启动优化的相关思维。
val licenceURL 获取到的 licence url //
val licenceKey 获取到的 licence key //
TXLiveBase.getInstance().setLicence(application, licenceURL, licenceKey)3.初始化TXLivePusher以及配置相关配置垫片
官方推荐如下 创建一个 V2TXLivePusher 对象该对象负责完成推流的主要工作。
// 指定对应的直播协议为 RTMP该协议不支持连麦
V2TXLivePusher mLivePusher new V2TXLivePusherImpl(this, V2TXLiveDef.V2TXLiveMode.TXLiveMode_RTMP);
// 指定对应的直播协议为 RTC该协议支持连麦。如果在直播过程中有连麦需求需要选择该协议
V2TXLivePusher mLivePusher new V2TXLivePusherImpl(this, V2TXLiveDef.V2TXLiveMode.TXLiveMode_RTC);ps如果您有连麦需求需要创建V2TXLivePusher对象时选择RTC协议。RTC协议与RTMP协议在 API 使用上没有区别。 而在开发中依旧是在启动页SplashActivity中处理配置授权逻辑以及相关初始化操作。
通过 TXLivePushConfig 中的setPauseImg接口可以设置垫片用的背景图片、垫片的最大时长以及视频帧率。 通过 TXLivePushConfig 中的setPauseFlag接口可以设置是暂停视频采集、还是暂停声音采集还是两者都暂停
TXLivePushConfig mLivePushConfig new TXLivePushConfig();
TXLivePusher mLivePusher new TXLivePusher(this); // bitmap: 用于指定垫片图片最大尺寸不能超过 1920*1920
// time垫片最长持续时间单位是秒300即代表最长持续300秒
// fps垫片帧率最小值为 5fps最大值为 20fps。
Bitmap bitmap decodeResource(getResources(), R.drawable.pause_publish);
mLivePushConfig.setPauseImg(bitmap);
mLivePushConfig.setPauseImg(300, 5);
//表示仅暂停视频采集不暂停音频采集
//mLivePushConfig.setPauseFlag(PAUSE_FLAG_PAUSE_VIDEO);
//表示同时暂停视频和音频采集
mLivePushConfig.setPauseFlag(PAUSE_FLAG_PAUSE_VIDEO|PAUSE_FLAG_PAUSE_AUDIO);
mLivePusher.setConfig(mLivePushConfig); 设置完成之后就可以调用 TXLivePusher 中的pausePusher进入隐私模式也可以调用resumePusher退出隐私模式 但请注意保持正确的调用顺序startPush ( pausePush resumePush ) stopPush错误的调用顺序会导致 SDK 表现异常 因此使用成员变量对执行顺序进行保护是很有必要的。
// 进入隐私模式
mLivePusher.pausePusher();
...
// 退出隐私模式
mLivePusher.resumePusher(); 项目中
object BaobanAppLifecycle : AppLifecycleManager() {lateinit var mLivePausePusher: TXLivePusherval mLivePushConfigget() TXLivePushConfig().also {// bitmap: 用于指定垫片图片最大尺寸不能超过 1920*1920// time垫片最长持续时间单位是秒300即代表最长持续300秒// fps垫片帧率最小值为 5fps最大值为 20fps。val bitmap BitmapFactory.decodeResource(DangkouApplication.app.resources,R.mipmap.ic_live_pause_img)it.setPauseImg(bitmap)it.setPauseImg(30 * 60, 5)it.setPauseFlag(TXLiveConstants.PAUSE_FLAG_PAUSE_AUDIO or TXLiveConstants.PAUSE_FLAG_PAUSE_VIDEO)}
}
//SplashActivity
BaobanAppLifecycle.mLivePausePusher TXLivePusher(application).also { it.config BaobanAppLifecycle.mLivePushConfig }4.开启摄像头预览
想要开启摄像头的预览画面您需要先给 SDK 提供一个用于显示视频画面的TXCloudVideoView对象 1.在 xml 文件中添加一个视频渲染控件
com.tencent.rtmp.ui.TXCloudVideoViewandroid:idid/pusher_tx_cloud_viewandroid:layout_widthmatch_parentandroid:layout_heightmatch_parent /2.通过调用 V2TXLivePusher 中的startCamera接口开启当前手机摄像头的预览画面
//启动本地摄像头预览 TXCloudVideoView mPusherView (TXCloudVideoView) findViewById(R.id.pusher_tx_cloud_view); mLivePusher.startCameraPreview(mPusherView);
需要注意这里需要检查下权限。需要申请相机、存储、通话、音频权限。开启之后再调用摄像头预览。
5. 启动和结束推流
如果已经启动了摄像头预览就可以调用 TXLivePusher 中的startPusher接口开始推流。
int ret mLivePusher.startPusher(rtmpurl 推流地址.trim());
if (ret -5) { Log.i(TAG, startRTMPPush: license 校验失败);
} 推流结束后可以调用 TXLivePusher 中的stopPusher接口结束推流。请注意如果已经启动了摄像头预览请在结束推流时将其关闭否则会导致 SDK 的表现异常。
mLivePusher.stopPusher();
mLivePusher.stopCameraPreview(true); //如果已经启动了摄像头预览请在结束推流时将其关闭。 项目开发中需要留意在onDestroy中执行这些方法。 private fun stopLive() {mPresenter.removeImMsgListener()mLivePusher.stopPusher()testSpeedThreadPool.shutdown()video_view.onDestroy()video_view.stop(true)mLivePusher.stopCameraPreview(true) livePlayer.stopPlay(true)
6.设定画面清晰度
可以设定观众端的画面清晰度 标清VIDEO_QUALITY_STANDARD_DEFINITION 高清VIDEO_QUALITY_HIGH_DEFINITION 超清VIDEO_QUALITY_SUPER_DEFINITION
mLivePusher.setVideoQuality(TXLiveConstants.VIDEO_QUALITY_STANDARD_DEFINITION,true,false
)7.美颜美白和红润特效
调用 TXLivePush 中的setBeautyFilter接口可以设置美颜效果SDK 中提供了三种磨皮算法style TXLiveConstants.BEAUTY_STYLE_SMOOTH 光滑风格算法更加注重皮肤的光滑程度适合秀场直播类场景下使用。
TXLiveConstants.BEAUTY_STYLE_NATURE 自然风格算法更加注重保留皮肤细节适合对真实性要求更高的主播。
TXLiveConstants.BEAUTY_STYLE_HAZY 朦胧风格算法会更加侧重画面去噪使整体画面风格偏柔和。 //style 美颜算法 0光滑 1自然 2朦胧 //beautyLevel 磨皮等级 取值为 0-9.取值为 0 时代表关闭美颜效果.默认值: 0,即关闭美颜效果. //whiteningLevel 美白等级 取值为 0-9.取值为 0 时代表关闭美白效果.默认值: 0,即关闭美白效果. //ruddyLevel 红润等级 取值为 0-9.取值为 0 时代表关闭美白效果.默认值: 0,即关闭美白效果. // public boolean setBeautyFilter(int style, int beautyLevel, int whiteningLevel, int ruddyLevel); mLivePusher.setBeautyFilter(1, meiYanLevel, meiBaiLevel, meiBaiLevel)8.控制摄像头
TXLivePusher 提供了一组 API 用户控制摄像头的行为
切换前后摄像头: switchCamera
打开或关闭闪光灯(仅在当前是后置摄像头时有效):turnOnFlashLight
调整摄像头的焦距可以通过 TXLivePusher 的getMaxZoom()函数获取最大焦距setZoom的取值范围即为 1 - 最大焦距。:setZoom
9.主播端弱网提醒
TXLivePushListener 里的 onPlayEvent 可以捕获 PUSH_WARNING_NET_BUSY 事件它代表当前主播的网络已经非常糟糕出现此事件即代表观众端会出现卡顿。 此时就可以像上图一样在 UI 上弹出一个“弱网提示”。
Override public void onPushEvent(int event, Bundle param) { if (event TXLiveConstants.PUSH_ERR_NET_DISCONNECT || event TXLiveConstants.PUSH_ERR_INVALID_ADDRESS || event TXLiveConstants.PUSH_ERR_OPEN_CAMERA_FAIL || event TXLiveConstants.PUSH_ERR_OPEN_MIC_FAIL) { // 遇到以上错误则停止推流 //... } else if (event TXLiveConstants.PUSH_WARNING_NET_BUSY) { //您当前的网络环境不佳请尽快更换网络保证正常直播 showNetBusyTips(); } } 可以这么处理
livePlayer.setPlayListener(object : ITXLivePlayListener {override fun onPlayEvent(p0: Int, p1: Bundle?) {}override fun onNetStatus(bundle: Bundle?) {bundle?.also {setNetSpeed(it.getInt(NET_STATUS_NET_SPEED) / 1000f)}}})mLivePusher.setPushListener(object : ITXLivePushListener {override fun onNetStatus(bundle: Bundle?) {bundle?.also {setNetSpeed(it.getInt(NET_STATUS_NET_SPEED) / 1000f)}}override fun onPushEvent(code: Int, bundle: Bundle) {}})TXLivePlayer
视频播放器
请参见 TXLivePlayer。TXLivePlayer 主要负责将直播流的音视频画面进行解码和本地渲染包含如下技术特点 针对腾讯云的拉流地址可使用低延时拉流实现直播连麦等相关场景。 针对腾讯云的拉流地址可使用直播时移功能能够实现直播观看与时移观看的无缝切换。 支持自定义的音视频数据处理让您可以根据项目需要处理直播流中的音视频数据后进行渲染以及播放。
TXLivePusher
直播推流类
请参见 TXLivePusher。TXLivePusher 主要负责将本地的音视频画面进行编码和 RTMP 推送包含如下技术特点 针对腾讯云的推流地址会采用 QUIC 协议进行加速配合改进后的 BBR2 带宽测算方案可以最大限度的利用主播的上行带宽降低直播卡顿率。 内嵌套的 Qos 流量控制技术具备上行网络自适应能力可以根据主播端网络的具体情况实时调节音视频数据量。 内嵌多套美颜磨皮算法自然光滑和多款色彩空间滤镜支持自定义滤镜可以根据需要自行选择。 商业版包含了基于优图 AI 识别技术的大眼、瘦脸、隆鼻以及动效挂架只需要购买优图 License 就可以零成本集成。 支持自定义的音视频采集和渲染让您可以根据项目需要选择自己的音视频数据源。
主要的、常用的直播推流api与流程已梳理完毕。 完整的api可以看 API文档