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.33.aar是一个Android Module,以aar方式提供。实现了投屏控制协议,录屏功能,媒体传输和处理协议。

  2. 应用层:开发的具体APP应用部分,我司交付的是DEMO APP,具体与客户应用集成,可做针对性开发。用户可参考修改,也可直接使用。其依赖于bjcast_sender_lib-1.1.33.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(String deviceId)

描述

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

参数

deviceId: 已经离线的接收端的设备唯一标识码。

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.33.aar’, ext: ‘aar’)。
  2. 混淆规则请按照4.1节要求设置。