Appearance
当前版本:V1.0.0
©苏州必捷网络有限公司
1 概述
1.1 目的
用于指导用户使用 addon 集成 BJSDK。
1.2 读者对象
本文档适用于使用 addon 集成 BJSDK 的开发人员。
1.3 缩略语定义
缩写名称 | 英文 | 中文 |
---|---|---|
BJCast | BJCast | 必捷无线投屏协议 |
2 范围
2.1 功能
本文档用于Linux发射端 addon 集成 BJSDK 方法指导。
2.2 SDK框架
1.bjcast_project_addon.node :基于node api 编译出的node文件,它定义了一系列接口,提供给应用层调用处理,完成与支持BJCAST协议的接收端投屏连接操作。
2.linux平台相关库。
3.encoder_ext_conf.json,encoder_scene_conf.json 投屏参数的自定义,某些对于投屏参数有要求的用户可以自行修改来进行调试。
3 API接口集成
3.1 初始化SDK接口
apl
initBJSdk(logAddress,watermark,sdkPath,heartbeat_attemps,heartbeat_interval,uuid,encodesceneconf,encoderextconf,on_init_down);
描述
初始化SDK接口,App在启动时作初始化调用。
参数
名称 | 类型 | 描述 |
---|---|---|
logAddress | String | 自定义log文件存放位置和log.properties的位置。 |
watermark | String | 初始化设置水印,通过startbjsession接口可修改。 |
sdkPath | String | BJSDK 放置的绝对路径。 |
heartbeat_attemps | int | 心跳超时次数:当心跳次数超过该参数,调用心跳超时回调。 |
heartbeat_interval | int | 心跳间隔:单位:s 。 |
uuid | String | 用于唯一指定一个设备。 |
encodesceneconf | String | 根据encoder_scene_conf.json文件初始化设置投屏模式,如不需要设置传空字符即可。 |
encoderextconf | String | 根据encoder_ext_conf.json 文件初始化设置ffmpeg值 ,如不需要设置传空字符即可(仅windows生效)。 |
on_init_down | funtion() | 预留回调,目前未实现。 |
参考用例: <初始化函数> 用于BJSDK的初始化。
js代码:
js
var addon = require("./build/Release/bjcast_project_addon.node");
var x = addon.initBJSdk(
log_conf_path, // 日志路径
"test", // deviceName
"/BJSDK/linux/uos/lib/", // SdkPath
3, // heartbeat_attemps
2, // heartbeat_interval
"xaaavvvaasasas", // 随机uuid
JSON.stringify(encoder_scene_conf.scene_define[2]), // 编码场景配置文件json字符串
"", // encoder的额外参数设置,参照ffpmeg
() => {}
);
3.2 获取屏幕个数接口
apl
getScreenCount();
描述
获取物理屏幕个数,在一般情况下为1,如果有双显示屏,返回值为2。
参数
无。
返回值
屏幕个数。
3.3 音频控制接口
apl
audioControl(audio_type);
描述
SDK初始化后,投屏前可通过此接口对是否采集音频进行控制,默认不启用音频。
参数
参数名 | 描述 | 必填 |
---|---|---|
audio_type | 音频类型: 0: 关闭声音 1:开启声音。 | 是 |
返回值
返回值 | 含义 |
---|---|
0 | 设置成功。 |
-1 | 参数非法。 |
参考用例:<音频控制函数>,只有在正确初始化SDK函数后才能进行音频控制操作!
js代码:
js
var addon = require("./build/Release/bjcast_project_addon.node");
var x = addon.initBJSdk(
log_conf_path, // 日志路径
"test", // deviceName
"/BJSDK/linux/uos/lib/", // SdkPath
3, // heartbeat_attemps
2, // heartbeat_interval
"xaaavvvaasasas", // 随机uuid
JSON.stringify(encoder_scene_conf.scene_define[2]), // 编码场景配置文件json字符串
"", // encoder的额外参数设置,参照ffpmeg
() => {}
);
//initSDk返回值 != -1 时才能进行其他操作
if(x!=-1)
{
//需要在initBJSdk初始化后再设置!
addon.audioControl(0)
}
3.4 屏幕选择接口
apl
SetScreen(screen_type);
描述
设置屏幕类型。
参数
名称 | 类型 | 描述 |
---|---|---|
screen_type | int | 0:主屏幕 1:拓展屏。 |
返回值
返回值 | 描述 |
---|---|
0 | 设置成功。 |
-1 | 设置失败。 |
3.5 编码选择接口
apl
encodeChoice(encode_type);
描述
设置屏幕类型。
参数
名称 | 类型 | 描述 |
---|---|---|
encode_type | int | 0:主屏幕 1:拓展屏 |
返回值
返回值 | 描述 |
---|---|
0 | 设置成功 |
-1 | 设置失败 |
3.6 开始投屏接口
apl
startBJCastSession(ip,port,pin,ft,max_resolution,watermark,ext,on_call_end,on_start_session)
描述
用户通过probe获取当接收端的信息后,进行投屏的接口。
参数
名称 | 类型 | 描述 |
---|---|---|
ip | String | 接收端IP地址。 |
port | int | 接收端接收消息的端口号。 |
pin | String | 接收端投屏密码。 |
ft | int | 接收端能力集。 |
max_resolution | int | 支持最大分辨率设置,根据接收端probe返回值max_resolution属性设置,若接收端未返回改值则设置为0即可(兼容老接收端)。 |
watermark | String | 水印 ,可以设置为发射端使用者名称字段,也可以是其他用于唯一标识用户的ID。“”则水印为initBJSDK中的参数值。 |
ext | String | 扩展字段,目前未使用。 |
on_call_end | funtion(error) | 结束投屏回调。参数: error:错误码 |
on_start_session | funtion(error) | 发起投屏结果回调 。参数:: error:错误码 |
on_session_update | funtion(reason) | 自动应答回调。参数:reason: (0:非全屏|1:全屏) 接收端全屏状态。 |
参考用例: <开始投屏函数>,只有在正确初始化SDK函数后才能进行开始投屏操作!
js代码:
js
var addon = require("./build/Release/bjcast_project_addon.node");
onSessionEnd = function (err) {
//会话异常中断,返回出错原因
console.log("session is failed, err = ", err);
};
onSessionHeartbeatRecovered = function () {
//会话失败时的通知函数
console.log("onSessionHeartbeatRecovered result = ");
};
onStartSessionResult = function (result) {
//会话失败时的通知函数
console.log("onStartSessionResult result = ", result);
}
var x = addon.initBJSdk(
log_conf_path, // 日志路径
"test", // deviceName
"/BJSDK/linux/uos/lib/", // SdkPath
3, // heartbeat_attemps
2, // heartbeat_interval
"xaaavvvaasasas", // 随机uuid
JSON.stringify(encoder_scene_conf.scene_define[2]), // 编码场景配置文件json字符串
"", // encoder的额外参数设置,参照ffpmeg
() => {}
);
//initSDk返回值 != -1 时才能进行其他操作
if(x!=-1)
{
addon.startBJCastSession(
"192.168.4.33", // IpAddress
8190, // Port
"4170", // Pin码
parseInt(31), // ft值
3, // remote_max_resolution
"test", // username
"", // externMsg
onSessionEnd,
onStartSessionResult,
onSessionUpdate
)
}
3.7 PIN码校验接口
apl
ReAuth(pin)
描述
开始投屏结果回调错误码为 -16 时调用,用于发起PIN码验证。
参数
名称 | 类型 | 描述 |
---|---|---|
pin | string | 用于续接会话通道,当PIN码错误会继续调用startBJSession 发起投屏结果回调返回-16。 |
3.8 结束投屏接口
apl
stopBJCastSession()
描述
当用户需要主动结束投屏时调用。
参数
无。
3.9 请求全屏接口
apl
requestFullscreen();
描述
设置BJ盒子为全屏模式。
参数
无。
3.10 退出全屏接口
apl
exitFullscreen();
描述
设置BJ盒子退出全屏模式。
参数
无。
3.11 设置日志等级接口
apl
setLoglevel(level,log_path)
描述
SDK初始化后,可通过此接口对日志等级进行控制。
参数
名称 | 类型 | 描述 |
---|---|---|
level | int | 日志级别。 |
log_path | string | initBJSDK方法中的自定义的log.properties 路径。 |
参考用例: <设置日志等级函数>
js代码:
js
var addon = require("./build/Release/bjcast_project_addon.node");
var log_conf_path = process.cwd() + "/BJSDK/conf/linux/log.properties";
addon.setLoglevel(5, log_conf_path);
日志配置参考文件 log.properties:
properties
log4cplus.logger.file_logger=DEBUG,logFile
log4cplus.additivity.file_logger=FALSE
log4cplus.appender.logFile=log4cplus::RollingFileAppender
log4cplus.appender.logFile.File=./logs/bj_cast.log
log4cplus.appender.logFile.UseLockFile=false
log4cplus.appender.logFile.MaxFileSize=512KB
log4cplus.appender.logFile.MaxBackupIndex=4
log4cplus.appender.logFile.CreateDirs=true
log4cplus.appender.logFile.ImmediateFlush=false
log4cplus.appender.logFile.Encoding=utf-8
log4cplus.appender.logFile.layout=log4cplus::PatternLayout
log4cplus.appender.logFile.layout.ConversionPattern=[%D{%Y/%m/%d %H:%M:%S,%Q} %-5p] - %m%n
3.12 设置投屏质量场景配置接口
apl
setSceneConfig(config)
描述
SDK初始化后,投屏前可通过此接口对投屏质量进行控制。
参数
名称 | 类型 | 描述 |
---|---|---|
config | string | 读取BJ提供的 encode_scene_config.json文件值来重新设置投屏参数。 |
**参考用例: ** <设置投屏质量函数>,只有在正确初始化SDK函数后才能进行操作!
js代码:
js
var addon = require("./build/Release/bjcast_project_addon.node");
const fs = require("fs");
var encoder_scene_conf = JSON.parse(
fs.readFileSync(
process.cwd() + "/BJSDK/json/linux/encoder_scene_conf.json",
"utf8"
)
);
var x = addon.initBJSdk(
log_conf_path, // 日志路径
"test", // deviceName
"/BJSDK/linux/uos/lib/", // SdkPath
3, // heartbeat_attemps
2, // heartbeat_interval
"xaaavvvaasasas", // 随机uuid
JSON.stringify(encoder_scene_conf.scene_define[2]), // 编码场景配置文件json字符串
"", // encoder的额外参数设置,参照ffpmeg
() => {}
);
//initSDk返回值 != -1 时才能进行其他操作
if(x!=-1)
{
//设置投屏质量为2(高)
addon.setSceneConfig(JSON.stringify(encoder_scene_conf.scene_define[2])));
}
json参考文件 encoder_scene_conf.json:
json
{
"scene_define":[
{
"scene_name":"",
"scene_id":0,
"scene_encoder_config":
[
{
"codec": 1,
"width":1918,
"height":1078,
"min_width":0,
"min_height":0,
"bitrate": 1000,
"framerate": 30,
"qmin":-1,
"qmax":-1
},
{
"codec": 1,
"width":1920,
"height":1080,
"min_width":1918,
"min_height":1078,
"bitrate": 2000,
"framerate": 30,
"qmin":-1,
"qmax":-1
},
{
"codec": 1,
"width":2560,
"height":1440,
"min_width":1922,
"min_height":1082,
"bitrate": 2000,
"framerate": 15,
"qmin":-1,
"qmax":-1
},
{
"codec": 1,
"width":3840,
"height":2160,
"min_width":2562,
"min_height":1442,
"bitrate": 3000,
"framerate": 15,
"qmin":-1,
"qmax":-1
}
]
},
{
"scene_name":"",
"scene_id":1,
"scene_encoder_config":
[
{
"codec": 1,
"width":1918,
"height":1078,
"min_width":0,
"min_height":0,
"bitrate": 3000,
"framerate": 45,
"qmin":-1,
"qmax":-1
},
{
"codec": 1,
"width":1920,
"height":1080,
"min_width":1918,
"min_height":1078,
"bitrate": 4000,
"framerate": 45,
"qmin":-1,
"qmax":-1
},
{
"codec": 1,
"width":2560,
"height":1440,
"min_width":1922,
"min_height":1082,
"bitrate": 3000,
"framerate": 30,
"qmin":-1,
"qmax":-1
},
{
"codec": 1,
"width":3840,
"height":2160,
"min_width":2562,
"min_height":1442,
"bitrate": 4000,
"framerate": 30,
"qmin":-1,
"qmax":-1
}
]
},
{
"scene_name":"",
"scene_id":2,
"scene_encoder_config":
[
{
"codec": 1,
"width":1918,
"height":1078,
"min_width":0,
"min_height":0,
"bitrate": 6000,
"framerate": 60,
"qmin":-1,
"qmax":-1
},
{
"codec": 1,
"width":1920,
"height":1080,
"min_width":1918,
"min_height":1078,
"bitrate": 8000,
"framerate": 60,
"qmin":-1,
"qmax":-1
},
{
"codec": 1,
"width":2560,
"height":1440,
"min_width":1922,
"min_height":1082,
"bitrate": 6000,
"framerate": 60,
"qmin":-1,
"qmax":-1
},
{
"codec": 1,
"width":3840,
"height":2160,
"min_width":2562,
"min_height":1442,
"bitrate": 8000,
"framerate": 30,
"qmin":-1,
"qmax":-1
}
]
}
]
}