Appearance
当前版本: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框架
总体框架分为两层:
SDK层: bjcast_sender_lib-1.1.31.aar是一个Android Module,以aar方式提供。实现了投屏控制协议,录屏功能,媒体传输和处理协议。
应用层:开发的具体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在启动做初始化时调用。
参数
名称 | 描述 |
---|---|
context | Android应用上下文 |
callback | 投屏状态回调接口 |
BJCastSenderPara | SDK初始化参数 |
其中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_FLAG | H264 |
BJCastSender.BJCAST_SUPPORT_VIDEO_CDDEC_H265_FLAG | H265 |
BJCastSender.BJCAST_SUPPORT_VIDEO_CDDEC_H265_FLAG | BJCastSender.BJCAST_SUPPORT_VIDEO_CDDEC_H264_FLAG | H264和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接口异步通知用户。
参数
名称 | 描述 |
---|---|
mediaProjection | Android系统提供的录屏接口MediaProjection对象。 |
para | 投屏参数,BJCastSessionPara类型。 |
其中BJCastSessionPara支持以下常用属性的设置:
属性名 | 描述 | 必填 |
---|---|---|
BJCastRender | BJCast接收端相关信息,详情请看BJCastSenderListener | 是 |
userName | 发射端名称 | 是 |
pass | 投屏密码,无密码则填空字符串,注意不可填null | 是 |
macAddr | 投屏设备唯一标识符 | 否 |
extInfo | 额外信息,用户可使用此字段携带自定义消息,该字符串不能超过512字节。 | 否 |
maxResolution | 发射端支持的最大分辨率 | 否 |
senderExtFt | 0x01代表支持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)
描述
向接收端发送控制消息。
参数
名称 | 描述 |
---|---|
type | 0为请求全屏,1为请求退出投屏,3为当前设备为竖屏,4为当前设备为横屏 |
3.1.11 设置详细投屏的场景配置参数
java
public void setUserSceneConf(String json)
描述
配置详细投屏的场景配置参数。
此接口用于设置编解码相关的策略,通常用户可以基于此接口实现高-中-低等编码质量等策略。这部分功能较复杂,若用户无类似业务需求可不做关注。
如关注此部分业务接口,请与必捷相关的业务接口人对接咨询。
参数
名称 | 描述 |
---|---|
json | json格式的详细参数,具体请参考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状态。
通常该接口的触发分为以下几种情况:
- 发射端主动退出投屏
- 接收端主动退出投屏
- 由于网络中断等异常情况导致投屏退出
3.2.6 是否全屏回调
java
void onNotifyFullScreenStatus(int status)
描述
接收端发起全屏操作会通过此接口返回。
参数
名称 | 描述 |
---|---|
status | 0:非全屏状态; 1:全屏状态 |
3.2.7 心跳丢失回调
java
int heartbeatLost(int lostTimes)
描述
当投屏出现心跳丢失时通过此接口回调。
参数
名称 | 描述 |
---|---|
lostTimes | 心跳丢失次数 |
返回值
返回值 | 含义 |
---|---|
0 | SDK内部保持投屏连接,等待恢复。 |
1 | SDK内部立即断开此处投屏会话。 |
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简要说明
- 导入aar,在app目录下新建libs目录,并将aar文件放在该目录下,然后在build.gradle(app)中dependencies上方及内部分别添加如下代码:repositories{ flatDir { dirs ’libs ’} },compile (name: ‘bjcast_sender_lib-1.1.31.aar’, ext: ‘aar’)。
- 混淆规则请按照4.1节要求设置。