Skip to content

当前版本:V1.0.37

苏州必捷网络有限公司

1 概述

1.1 目的

用于指导使用必捷SDK开发Android发送端应用程序。

1.2 读者对象

本文档适用于Android发送端应用程序的开发人员和测试人员。

1.3 缩略语定义

缩写名称英文中文
BJCast必捷无线投屏协议

2 范围

2.1 功能

本SDK为BJCast发射端SDK,和BJCast接收端SDK配合进行无线投屏。

本SDK为标准的Android AAR模块,提供java接口供应用集成。

2.2 SDK框架

总体框架分为两层:

  1. SDK层: bjcast_sender_lib-1.1.31.aar是一个Android Module,以aar方式提供。实现了投屏控制协议,录屏功能,媒体传输和处理协议。

  2. 应用层:开发的具体APP应用部分,我司交付的是DEMO APP,具体与客户应用集成,可做针对性开发。用户可参考修改,也可直接使用。其依赖于bjcast_sender_lib-1.1.26.aar。

2.3 SDK交付物

  • SDK库
  • DEMO APP源代码,Demo APP基于最新SDK,作为参考实现提供给客户
  • SDK接口文档

3 接口

3.1 BJCastSender类中的接口说明

3.1.1 初始化接口

java
public boolean init(Context context, BJCastSenderListener callback, BJCastSenderPara para)

描述

初始化BJCastSDK,App在启动做初始化时调用。

参数

名称描述
contextAndroid应用上下文
callback投屏状态回调接口
BJCastSenderParaSDK初始化参数

其中BJCastSenderPara支持以下常用属性的设置:

属性名描述必填
name设备名称
TranType已废弃,请填入TranType.TCP
PlayMode媒体模式,建议填入PlayMode.REALTIME
frameRate帧率
bitrate码率,区间512000~8000000,默认是4000000
Resolution分辨率
autodiscover自动发现接收端
licenseKey授权码
gop关键帧间隔
logLevel日志级别
BJCastExtPara扩展参数

其中Resolution支持以下取值:

属性名描述
Resolution.RESOLUTION_720P投屏分辨率为720P
Resolution.RESOLUTION_1080P投屏分辨率为1080P
Resolution.RESOLUTION_ACTUAL投屏分辨率为实际屏幕分辨率

其中logLevel支持以下属性:

参数描述
0打印所有日志
1打印Debug及以上日志
2打印Info及以上日志
3打印Warn及以上日志
4打印Error及以上日志

其中BJCastExtPara支持以下常用属性的设置:

属性名描述必填
enableWeakNetFeature是否启用弱网功能,请填入true
supportVideoCodecFlag支持的视频编码器格式
supportAudioCodecFlag支持的音频编码器格式,预留字段暂不需要设置
ctrlHeartBeatInterval心跳间隔,建议保持默认
ctrlHeartBeatLostWarnTimes心跳丢失多少次后警告,建议保持默认
ctrlHeartBeatMaxLostTimes心跳丢失最大次数,建议保持默认
testLostVideoRateDen视频丢包测试,不需要设置
testLostAudioRateDen音频丢包测试,不需要设置
testLostCtrlRateDen控制消息丢包测试,不需要设置
senderId发射端唯一ID

supportVideoCodecFlag支持以下属性:

属性名描述
BJCastSender.BJCAST_SUPPORT_VIDEO_CDDEC_H264_FLAGH264
BJCastSender.BJCAST_SUPPORT_VIDEO_CDDEC_H265_FLAGH265
BJCastSender.BJCAST_SUPPORT_VIDEO_CDDEC_H265_FLAG | BJCastSender.BJCAST_SUPPORT_VIDEO_CDDEC_H264_FLAGH264和H265均支持

返回值

返回值含义
0成功

示例代码:

java
BJCastExtPara extPara = new BJCastExtPara(true);
extPara.setSupportVideoCodecFlag(BJCastSender.BJCAST_SUPPORT_VIDEO_CDDEC_H265_FLAG| BJCastSender.BJCAST_SUPPORT_VIDEO_CDDEC_H264_FLAG);   //表示支持H264/H265编码
id = UUID.randomUUID().toString();
extPara.setSenderId(id);
BJCastSenderPara para = new BJCastSenderPara("sender", TranType.TCP, PlayMode.REALTIME,30, 4000000,Resolution.RESOLUTION_ACTUAL,true,"BJ_TEST_KEY", 10, extPara);
para.setLogLevel(4);
BJCastSender.getInstance().init(this,this,para);

3.1.2 去初始化接口

java
public int uninit()

描述

用于去初始化BJCast模块。App销毁BJCast发射端服务时调用。

3.1.3 是否处于投屏中接口

java
public boolean haveShareSession()

描述

通过此接口可判断当前是否处于投屏中。

返回值

true:投屏中

false:未投屏

3.1.4 探测接收端

java
public int probeReceiver(String ip)

描述

向接收端发起探测流程以获取接收端的能力集。探测结果会通过3.2.9,3.2.10接口返回。

参数

名称描述
ip接收端IP地址

返回值

返回值含义
-1探测任务执行中

3.1.5 发起投屏

java
public void createCtrlSession(MediaProjection mediaProjection,BJCastSessionPara para)

描述

通过此接口发起投屏。发起投屏的结果会已通过3.2.4,3.2.3接口异步通知用户。

参数

名称描述
mediaProjectionAndroid系统提供的录屏接口MediaProjection对象。
para投屏参数,BJCastSessionPara类型。

其中BJCastSessionPara支持以下常用属性的设置:

属性名描述必填
BJCastRenderBJCast接收端相关信息,详情请看BJCastSenderListener
userName发射端名称
pass投屏密码,无密码则填空字符串,注意不可填null
macAddr投屏设备唯一标识符
extInfo额外信息,用户可使用此字段携带自定义消息,该字符串不能超过512字节。
maxResolution发射端支持的最大分辨率
senderExtFt0x01代表支持UIBC V2协议,仅特殊设备支持,1.1.31版本开始支持。

示例代码:

java
BJCastSessionPara para = new BJCastSessionPara(render, mPass, deviceName);
BJCastSender.getInstance().createCtrlSession(mediaProjection, para);

3.1.6 投屏密码重试

java
public void reAuthCtrlSession(String pass)

描述

投屏密码校验错误后,通过此接口重新输入投屏密码。

参数

pass:用户输入的新的投屏密码。

3.1.7 启用音频

java
public boolean enableAudio(boolean enableAudio)

描述

投屏时启用音频内部录制,仅在Android 10及以上版本支持。

参数

enableAudio: true: 启用声音内部录制,false: 不启用。

返回值

返回值含义
true成功启用
false启用失败,当前设备不支持音频

3.1.8 音频是否已启用

java
public boolean isEnableAudio()

描述

判断音频是否启用。

返回值

返回值含义
true启用
false未启用

3.1.9 停止投屏

java
public void destroyCtrlSession()

描述

调用此接口停止投屏。

3.1.10 投屏控制

java
public void modifyCtrlSession(int type)

描述

向接收端发送控制消息。

参数

名称描述
type0为请求全屏,1为请求退出投屏,3为当前设备为竖屏,4为当前设备为横屏

3.1.11 设置详细投屏的场景配置参数

java
public void setUserSceneConf(String json)

描述

配置详细投屏的场景配置参数。

此接口用于设置编解码相关的策略,通常用户可以基于此接口实现高-中-低等编码质量等策略。这部分功能较复杂,若用户无类似业务需求可不做关注。

如关注此部分业务接口,请与必捷相关的业务接口人对接咨询。

参数

名称描述
jsonjson格式的详细参数,具体请参考demo实现。

示例代码:

java
BJCastSender.getInstance().setUserSceneConf(AssetsUtil.getUserSceneConfJson(this, 1));

3.2 BJCastSenderListener中的接口说明

3.2.1 接收端设备上线回调

java
void onDiscoverRender(BJCastRender render)

描述

当启用自动发现后,接收端如果上线信息会通过此接口返回。

参数

render: 已经搜索到的接收端。

BJCastRender的属性参考3.2.1.1

3.2.1.1 BJCastRender属性

deviceId接收端设备唯一标识符
deviceName接收端设备名称
ip接收端设备IP
port接收端设备端口
maxResolution接收端设备支持的最大分辨率
maxFramerate接收端设备支持的最大帧数
ft接收端设备的能力集

3.2.2 接收端设备离线回调

java
void onLostRender(BJCastRender render)

描述

当启用自动发现后,接收端如果离线信息会通过此接口返回。

参数

render: 已经离线的接收端。

BJCastRender的属性参考3.2.1.1

3.2.3 发起投屏错误码回调

java
void onCreateCtrlSessionFailed(int err)

描述

投屏失败会通过此接口返回错误码。

错误码

错误码含义
-6连接接收端失败,检查网络是否正确
-14投屏被拒
-16投屏密码不正确
-8无效参数

3.2.4 发起投屏成功回调

java
void onCreateCtrlSessionSuccess()

描述

投屏成功会通过此接口返回。通知应用层投屏已经成功。

3.2.5 投屏结束回调

java
void onCaptureStop()

描述

投屏结束会通过此接口通知,应用可进行相应处理,更新UI状态。

通常该接口的触发分为以下几种情况:

  1. 发射端主动退出投屏
  2. 接收端主动退出投屏
  3. 由于网络中断等异常情况导致投屏退出

3.2.6 是否全屏回调

java
void onNotifyFullScreenStatus(int status)

描述

接收端发起全屏操作会通过此接口返回。

参数

名称描述
status0:非全屏状态; 1:全屏状态

3.2.7 心跳丢失回调

java
int heartbeatLost(int lostTimes)

描述

当投屏出现心跳丢失时通过此接口回调。

参数

名称描述
lostTimes心跳丢失次数

返回值

返回值含义
0SDK内部保持投屏连接,等待恢复。
1SDK内部立即断开此处投屏会话。

3.2.8 心跳恢复回调

java
void heartbeatRecovered()

描述

当投屏出现心跳丢失后恢复时会通过此接口回调。应用可更新UI状态。

3.2.9 探测接收端接口失败回调

java
void onProbeErr(int errorCode)

描述

当向接收端发起探测时会通过此接口返回错误码。

错误码

错误码含义
-1连接接收端失败,检查网络是否正确。
-2探测信息有误,请检查接收端SDK信息是否正确。

3.2.10 探测接收端接口成功回调

java
void onProbeRsp(BJCastProbeReceiverRsp receiverRsp)

描述

当向接收端发起探测成功时会通过此接口返回接收端信息。

BJCastProbeReceiverRsp属性

deviceID接收端设备唯一标识符
deviceName接收端设备名称
remoteMaxResolution接收端设备支持的最大分辨率
remoteMaxFrameRate接收端设备支持的最大帧数
ft接收端设备的能力集

注意

发起投屏时以探测返回的值为准。

4 如何使用SDK

4.1 混淆规则

# 保留本地native方法不被混淆
-keepclasseswithmembernames class * {
    native <methods>;
}
-keep class com.bjnet.project.sender.** { *; }
-keep class com.bjnet.project.util.** { *; }
-keep class com.bjnet.project.ctrl.** { *; }
-keep class com.bjnet.project.Log { *; }
-keep class com.bjnet.project.media.VideoTrackInfo { *; }

4.2 集成SDK简要说明

  1. 导入aar,在app目录下新建libs目录,并将aar文件放在该目录下,然后在build.gradle(app)中dependencies上方及内部分别添加如下代码:repositories{ flatDir { dirs ’libs ’} },compile (name: ‘bjcast_sender_lib-1.1.31.aar’, ext: ‘aar’)。
  2. 混淆规则请按照4.1节要求设置。