You need to enable JavaScript to run this app.
企业直播

企业直播

复制全文
Android 开播 SDK
基础功能
复制全文
基础功能

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

前提条件

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

进入直播间

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

说明

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

/**
  *  进入直播间。
  *
  *  @param activity 用于调用直播间所在页面的 Activity。
  *  @param PushJoinRoomConfig 进入直播间所需的配置。
  */      

TVUPushLiveRoom.startPushLiveRoom(activity, new PushJoinRoomConfig(activityId, secretKey, new JoinResultListener() {
    // 进入直播间成功回调。
    @Override
    public void onJoinSuccess() {
        Log.d(TAG, "TVUPushLiveRoom.startPushLiveRoom onJoinSuccess");
    }
/**
  *  进入直播间失败回调。
  *  @param errCode 错误码。
  *  -1:网络错误。
  *  -2:权限错误。
  *  -3:JSON 解析错误。
  *  -4:超时错误。
  *  -5:用户手动退出错误。
  *  2000001: activityId(直播间活动 ID)或 secretKey(开播密钥)错误。
 *
 * @param errMsg 错误信息。
 */
    @Override
    public void onJoinFailed(int errCode, String errMsg) {
        Log.d(TAG, "TVUPushLiveRoom.startPushLiveRoom onJoinFailed:" + " errCode:" + errCode +
                " errMsg:" + errMsg);
    }
}));

PushJoinRoomConfig 详情如下所示。

public class PushJoinRoomConfig {
    // 直播间的活动 ID。必选。
    public long activityId;
    // 开播密钥。必选。
    public String secretKey;
    // 进入直播间结果的回调类。可选。
    public JoinResultListener joinResultListener;
}

退出直播间

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

/**
  *  退出直播间
  *
  *  @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:将默认帧率模式设为默认。

设置 SDK 语言类型

在进入直播间前,设置 SDK 的语言类型,即开播端所有页面展示的语言。如不设置,则默认与系统语言一致,如系统语言非 SDK 支持的语言类型,则默认为英文。

public void setPreferLanguage(LanguageManager.LANGUAGE preferLanguage)

参数

名称

类型

说明

preferLanguage

LanguageManager.LANGUAGE

SDK 的语言类型,即开播端所有页面展示的语言。取值如下:

  • ZH_HANS:简体中文。
  • EN:英文。
  • JA:日文。
  • ZH_HANT:繁体中文。
  • KO:韩语。
  • TH:泰语。
  • VI:越南语。
  • AR:阿拉伯语。
  • TR:土耳其语。
  • ES:西班牙语。
  • ID:印尼语。
  • PT:葡萄牙语。
  • RU:俄语。

设置自定义系统文案监听器

调用该方法,自定义 SDK 中展示的文案。适用于对 SDK 中展示的文案不满意,想替换为自定义文案的场景。

public void setCustomLanguageStringListener(CustomLanguageStringListener customLanguageStringListener)

参数

名称

类型

说明

customLanguageStringListener

CustomLanguageStringListener

自定义系统文案监听器。

示例代码
以下示例代码将 SDK 语言类型为简体中文、keymore 的文案变更为 123

PushSettings settings = PushSettings.Holder.mSettings;
settings.setCustomLanguageStringListener(new CustomLanguageStringListener() {
    @Override
    /**
     * @param language SDK 的语言类型,即开播端所有页面展示的语言。取值如下:ZH_HANS(简体中文)、EN(英文)、JA(日文)、ZH_HANT(繁体中文)、KO(韩语)、TH(泰语)、VI(越南语)、AR(阿拉伯语)、TR(土耳其语)、ES(西班牙语)、ID(印尼语)、PT(葡萄牙语)、RU(俄语)。
     * @param originString 默认展示的文案内容。
     * @param key 文案的 key。
     * @return 自定义的文案内容,用于替换默认展示的文案内容。
     */
    public String onCustomLanguageString(LanguageManager.LANGUAGE language, String key, String originString) {
        if (language == ZH_HANS && "more".equals(key)) {
            return "123";  
        }
        return originString;
    }
});

设置直播间事件回调

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

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

    @Override // 在主持人进入直播间成功后触发该回调
    public void onPushRoomJoined(Activity activity, TVUPushServer tvuPushServer) {
        // 添加自定义的 IM(长链接消息)信令监听器。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);
    }
});
最近更新时间:2025.04.29 18:15:54
这个页面对您有帮助吗?
有用
有用
无用
无用