You need to enable JavaScript to run this app.
导航
基础功能
最近更新时间:2024.06.28 11:08:03首次发布时间:2023.06.05 21:38:14

本文介绍如何实现 Android 开播 SDK 的基础功能。

前提条件

您已集成 Android 开播 SDK。详见 集成 Android 开播 SDK

进入和退出直播间

在定义如何进入直播间的文件中,添加以下代码:

说明

通过调用 CreateActivityAPIV2ListActivityAPI 获取直播间的活动 ID,调用 GetTemporaryLoginTokenAPI 获取开播密钥。

/**
  *  进入直播间
  *
  *  @param activity   用于调用直播间所在页面的 Activity
  *  @param activityId 直播间的活动 ID
  *  @param secretKey  开播密钥
  */
TVUPushLiveRoom.startPushLiveRoom(activity, activityId, secretKey);

在定义如何退出直播间的文件中,添加以下代码:

/**
  *  退出直播间
  *
  *  @param context 上下文
  */
TVUPushLiveRoom.leavePushLiveRoom(context);

自定义配置

定制前台通知

App 在后台运行时,SDK 会通过显示前台通知来保证后台不断流。您可以定制通知的图标和文案。

NotificationInfo info = new NotificationInfo(
        R.mipmap.ic_launcher_round, // 图标
         "企业直播", // 标题
         "App 后台运行中"); // 详情
PushSettings.Holder.mSettings.setKeepLiveServiceNotifyInfo(info);

设置是否显示评论区

设置开播后是否显示评论区的消息和输入框。
默认值:true

  • true:显示评论区
  • false:不显示评论区
PushSettings.Holder.mSettings.getUiSettings().setEnableCommentArea(true);

添加自定义组件

在直播间提供一个撑满屏幕且层级在当前界面元素之上的 UI 区域,供您添加自定义组件。

注意

该配置自 1.30.0 版本开始不再支持使用。请使用 onCustomUIAreaEnabled 回调替代之。

CustomUIAreaListener uiAreaListener = container -> {
    View view = new View(container.getContext());
    view.setBackgroundColor(Color.RED);
    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(SizeUtils.dp2px(40),
            SizeUtils.dp2px(40));
    lp.gravity = Gravity.CENTER;
    container.addView(view, lp);
};
PushSettings.Holder.mSettings.getUiSettings().setCustomUIAreaListener(uiAreaListener);

定制开播页背景图

定制横屏或竖屏开播页的背景图。
横屏

PushSettings.Holder.mSettings.getUiSettings().setLandscapeBackgroundDrawableListener(new ITVUSingleDrawableListener() {
    // 在需要显示开播页背景图时调用该方法,可返回 Drawable 对象(定制背景图)
    @Override
    public Drawable onGetSingleDrawable() {
        return AppCompatResources.getDrawable(getApplicationContext(), R.drawable.background_landscape);
    }
});

竖屏

PushSettings.Holder.mSettings.getUiSettings().setPortraitBackgroundDrawableListener(new ITVUSingleDrawableListener() {
    // 在需要显示开播页背景图时调用该方法,可返回 Drawable 对象(定制背景图)
    @Override
    public Drawable onGetSingleDrawable() {
        return AppCompatResources.getDrawable(getApplicationContext(), R.drawable.background_portrait);
    }
});

设置是否显示模板入口按钮

public void enableShowCloudTemplateEntrance(boolean enable)

参数

名称

类型

说明

enable

Boolean

是否显示模板入口按钮。
默认值:true

  • true:显示模板入口按钮。
  • false:不显示模板入口按钮。

设置是否支持新增和编辑模板

public void enableEditCloudTemplateEnable(boolean enable)

参数

名称

类型

说明

enable

Boolean

是否支持新增和编辑模板。
默认值:true

  • true:支持新增和编辑。
  • false:不支持新增和编辑。

设置是否支持编辑直播间的横屏封面和标题

public void enableEditLiveInfo(boolean enable)

参数

名称

类型

说明

enable

Boolean

是否支持编辑直播间的横屏封面和标题。
默认值:true

  • true:支持编辑。
  • false:不支持编辑。

设置是否显示美颜入口按钮

public void setShowBeautyEntrance(boolean showBeautyEntrance)

参数

名称

类型

说明

showBeautyEntrance

Boolean

是否显示美颜入口按钮。
默认值:true

设置是否显示道具入口按钮

public void setShowPropsEntrance(boolean showPropsEntrance)

参数

名称

类型

说明

showPropsEntrance

Boolean

是否显示道具入口按钮。
默认值:true

设置是否显示挂件和图层入口按钮

public void setShowPendentEntrance(boolean showPendentEntrance)

参数

名称

类型

说明

showPendentEntrance

Boolean

是否显示挂件和图层入口按钮。
默认值:true

  • true:显示。
  • false:不显示,并关闭模板功能,即不显示模板入口按钮、不支持新增和编辑模板。

设置是否显示前后摄像头翻转入口按钮

public void setShowSwitchCamera(boolean showSwitchCamera)

参数

名称

类型

说明

showSwitchCamera

Boolean

是否显示前后摄像头翻转入口按钮。
默认值:true

  • true:显示。
  • false:不显示。

设置是否显示横竖屏切换入口按钮

public void setShowRotateScreen(boolean showRotateScreen)

参数

名称

类型

说明

showRotateScreen

Boolean

是否显示横竖屏切换入口按钮。
默认值:true

  • true:显示。
  • false:不显示。

设置是否显示清晰度切换入口按钮

public void setShowChangeResolution(boolean showChangeResolution)

参数

名称

类型

说明

showChangeResolution

Boolean

是否显示清晰度切换入口按钮。
默认值:true

  • true:显示。
  • false:不显示。

设置是否显示录屏直播入口

public void setShowRecordScreenEntrance(boolean showRecordScreenEntrance)

参数

名称

类型

说明

showRecordScreenEntrance

Boolean

是否显示录屏直播入口。
默认值:true

  • true:显示。
  • false:不显示。

设置是否显示媒体合流入口按钮

public void setShowMediaMergeEntrance(boolean showMediaMergeEntrance)

参数

名称

类型

说明

showMediaMergeEntrance

Boolean

是否显示媒体合流入口按钮。
默认值:false

  • true:显示。
  • false:不显示。

设置是否显示文字合流入口按钮

public void setShowTextMergeEntrance(boolean showTextMergeEntrance)

参数

名称

类型

说明

showTextMergeEntrance

Boolean

是否显示文字合流入口按钮。
默认值:false

  • true:显示。
  • false:不显示。

设置是否将高帧率模式设为默认

录屏直播的主持人在开播前可选择 2 种帧率模式:高帧率模式和默认帧率模式。
在主持人共享高帧率画面时,高帧率模式可为观众提供更流畅的观看体验。该模式适用于游戏直播等场景。
高帧率模式可能导致设备耗电快、过热以及带宽使用量增加。因此,建议主持人在共享屏幕画面帧率为 30 fps 及以上且上行带宽为 100 Mbps 及以上时使用该模式。

public void setPreferHighFramePublishScreen (boolean preferHighFramePublishScreen)

参数

名称

类型

说明

preferHighFramePublishScreen

Boolean

是否将高帧率模式设为默认。
默认值:false

  • true:将高帧率模式设为默认。
  • false:将默认帧率模式设为默认。

设置直播间事件回调

设置回调监听直播间变化。

PushSettings.Holder.mSettings.setPushRoomListener(new PushRoomListener() {
    TextView textView;

    @Override // 在主持人进入直播间成功后触发该回调
    public void onPushRoomJoined(Activity activity, TVUPushServer tvuPushServer) {
        // 添加自定义的 IM(即时消息)信令监听器
        tvuPushServer.getWsConnector().addListener(new WSCustomIMListener() {
            /**
             * 通过 SendCustomSystemMessageAPI 接口发送的自定义的 IM 信令收到回调
             * @param str 通过 SendCustomSystemMessageAPI 接口发送的自定义的 IM 信令
            */
            @Override 
            public void onReceiveIMString(String str) {
                if (textView != null) {
                    textView.setText(str);
                }
            }
        
            @Override // IM 建立连接失败回调
            public void onConnectFailed() {
        
            }
        
            @Override // IM 建立连接成功回调
            public void onConnected() {
        
            }
        });

        ToastUtil.displayToast("主持人进入直播间");
    }
    
    @Override // 在主持人进入直播间成功且直播间页面渲染完成后触发该回调
    public void onCustomUIAreaEnabled(FrameLayout container) {
        // 在直播间中添加自定义的 View
        textView = new TextView(container.getContext());
        textView.setBackgroundColor(Color.RED);
        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(SizeUtils.dp2px(40),
                SizeUtils.dp2px(40));
        lp.gravity = Gravity.CENTER_VERTICAL;
        lp.leftMargin = SizeUtils.dp2px(20);
        container.addView(textView, lp);
    }

    @Override // 在主持人退出直播间时触发该回调。注意清理相关资源,避免内存泄露
    public void onPushRoomDestroyed(Activity activity) {
        ToastUtil.displayToast("主持人退出直播间");
    }

    @Override // 在屏幕朝向改变时触发该回调
    public void onPushRoomOrientationChanged(Activity activity, boolean isPortrait) {
        ToastUtil.displayToast("屏幕朝向改变:" + (isPortrait ? "竖屏" : "横屏"));
    }

    @Override // 在直播推流开始时触发该回调
    public void onPushStreamStarted() {
        ToastUtil.displayToast("直播开始");
    }

    @Override // 在直播推流结束时触发该回调
    public void onPushStreamStopped() {
        ToastUtil.displayToast("直播结束");
    }
});

设置评论区自定义回调

在 SDK 渲染完单条评论内容后触发该回调,用于自定义评论的文字内容、样式或替换表情图片。
示例代码
以下示例代码将文字评论中的 123 变为黄色,将微笑表情替换为其他图片。

PushSettings.Holder.mSettings.setCommentCustomizeListener(new CommentCustomizeListener() {
    /**
     * 
     * @param commentModel 单条评论的数据信息 Model
     * @param languageManager 直播间的多语言管理器
     * @param spannableStringBuilder TextView 当前设置的 spannableString
     * @param textView 单条评论对应的 TextView
     */
    @Override
    public void onCustomizeCommentContent(SingleCommentModel commentModel, LanguageManager languageManager, SpannableStringBuilder spannableStringBuilder, TextView textView) {

        // 判断评论是否为主持人发送
        boolean presenter = commentModel.isPresenter();

        // 获取直播间当前选中的语言
        LanguageManager.LANGUAGE curLanguage = languageManager.getCurLanguage();
        
        String s = spannableStringBuilder.toString();
        
        // 将文字评论中的 123 变为黄色
        if (s.contains("123")) {
            spannableStringBuilder.setSpan(new ForegroundColorSpan(Color.YELLOW),
                    s.indexOf("123"), s.indexOf("123") + 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        }
        
        // 将微笑表情替换为其他图片
        if (s.contains("[微笑]")) {
            spannableStringBuilder.setSpan(new GlideImageSpan(textView, "https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/055f8e4f26c04fd39aa3a3935a43866e~tplv-goo7wpa0wc-image.image"),
                    s.indexOf("[微笑]"), s.indexOf("[微笑]") + "[微笑]".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        }
        textView.setText(spannableStringBuilder);
    }
});