Skip to content

当前版本:V1.0.0

©苏州必捷网络有限公司

1 概述

1.1 目的

用于指导用户使用 addon 集成 BJSDK。

1.2 读者对象

本文档适用于使用 addon 集成 BJSDK 的开发人员。

1.3 缩略语定义

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

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在启动时作初始化调用。

参数

名称类型描述
logAddressString自定义log文件存放位置和log.properties的位置。
watermarkString初始化设置水印,通过startbjsession接口可修改。
sdkPathStringBJSDK 放置的绝对路径。
heartbeat_attempsint心跳超时次数:当心跳次数超过该参数,调用心跳超时回调。
heartbeat_intervalint心跳间隔:单位:s 。
uuidString用于唯一指定一个设备。
encodesceneconfString根据encoder_scene_conf.json文件初始化设置投屏模式,如不需要设置传空字符即可。
encoderextconfString根据encoder_ext_conf.json 文件初始化设置ffmpeg值 ,如不需要设置传空字符即可(仅windows生效)。
on_init_downfuntion()预留回调,目前未实现。

参考用例: <初始化函数> 用于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_typeint0:主屏幕 1:拓展屏。

返回值

返回值描述
0设置成功。
-1设置失败。

3.5 编码选择接口

apl
encodeChoice(encode_type);

描述

设置屏幕类型。

参数

名称类型描述
encode_typeint0:主屏幕 1:拓展屏

返回值

返回值描述
0设置成功
-1设置失败

3.6 开始投屏接口

apl
startBJCastSession(ip,port,pin,ft,max_resolution,watermark,ext,on_call_end,on_start_session)

描述

用户通过probe获取当接收端的信息后,进行投屏的接口。

参数

名称类型描述
ipString接收端IP地址。
portint接收端接收消息的端口号。
pinString接收端投屏密码。
ftint接收端能力集。
max_resolutionint支持最大分辨率设置,根据接收端probe返回值max_resolution属性设置,若接收端未返回改值则设置为0即可(兼容老接收端)。
watermarkString水印 ,可以设置为发射端使用者名称字段,也可以是其他用于唯一标识用户的ID。“”则水印为initBJSDK中的参数值。
extString扩展字段,目前未使用。
on_call_endfuntion(error)结束投屏回调。参数: error:错误码
on_start_sessionfuntion(error)发起投屏结果回调 。参数:: error:错误码
on_session_updatefuntion(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码验证。

参数

名称类型描述
pinstring用于续接会话通道,当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初始化后,可通过此接口对日志等级进行控制。

参数

名称类型描述
levelint日志级别。
log_pathstringinitBJSDK方法中的自定义的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初始化后,投屏前可通过此接口对投屏质量进行控制。

参数

名称类型描述
configstring读取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
			}
		]
	}
]
}