Appearance
当前版本: V1.1.0 苏州必捷网络有限公司
1 概述
1.1 目的
用于指导使用必捷Airplay接收端SDK的开发人员进行开发及测试。
1.2 读者对象
本文档适用于开发Windows平台Airplay接收端的开发人员。
1.3 缩略语定义
缩写名称 | 英文 | 中文 |
---|---|---|
Airplay | 苹果公司制定的无线通讯技术 |
2 范围
2.1 功能
本SDK可以接收来自iPhone、ipad、imac使用Airplay方式的投屏数据,并提供接口给应用层调用处理。基于本SDK可开发Windows Airplay接收端应用程序。
本SDK为标准的windows动态链接库,供应用集成。
2.2 SDK框架
BJAirplay Receiver SDK总体分为两部分:
- include下的头文件,定义了关键数据结构,和功能接口。供用户直接参考。
- lib下的动态库文件,bj_airplay_lib.dll实现了Airplay基本功能,license_apply.dll提供license获取功能。
2.3 SDK的DEMO实现
BJAirplayReceiver SDK Demo是接收端的一个参考实现,它基于bj_airplay_lib.dll实现了Airplay接收端功能。其中bj_airplay_callback_imp实现了回调接口。
log实现自定义日志。airplay_player_mgr实现Airplay的控制。main.cpp演示了license 获取和程序初始化。
2.4 SDK交付物
- SDK库
- DEMO源代码
- SDK接口文档
3 接口
接口主要在bj_airplay.h头文件中定义,包括控制接口和回调接口。
其中,回调接口定义在BJAirplayFunctionCbs_t结构体中,需由用户程序实现。
3.1 控制接口说明
3.1.1 初始化接口
C
int InitBJAirplay(AirplayInitPara* initpara);
描述
初始化BJAirplay SDK,App在启动做初始化时调用。
参数
AirplayInitPara: 为SDK初始化属性集合,initpara为AirplayInitPara结构体类型。通过赋值的方式初始化SDK的参数。
其中initpara常用属性的设置说明如下:
属性名 | 描述 | 必填 |
---|---|---|
friendly_name | Airplay接收端的显示名称,即在iPhone/IPad等设备搜索到的Airplay接收端的名称 | 是 |
framerate | 镜像投屏的最大帧率。取值范围15-60; >60会设置为60 <15会设置为15 | 否 |
resolution_type | resolution_type 取值范围参考: 6.4 BJAirResolutionType | 否 |
password | 投屏密码 | 否 |
licenseKey | License信息,从License文件中读取 | 是 |
mac_addr | 接收端设备的mac地址,格式:00:26:b9:52:7b:e0 | 是 |
airplay_flags | 位域类型,参考BJ_AIRPLAY_FLAGS定义 | 是 |
max_session_nums | SDK支持的最大Airplay投屏路数,1-9。默认为4。根据实际情况进行设置。通常设为1,代表同时支持1路投屏。注意:如果要支持抢投,则需要设置比实际最大路数多1。 | 否 |
republish_mode | mdns发布方式。取值范围参考: 6.5 BJAirRepublishType | 是 |
log_level | 日志级别。取值范围参考: 6.8 BJAirplayLogLevel | 是 |
no_url_type | 仅在 airplay_flags 中含有BJ_AIRPLAY_SUPPORT_URL_FLAG时有意义,设置为0即可,其它取值请与必捷SDK方沟通 | 是 |
callback | 用户回调接口,需要由用户来实现 | 是 |
airplay_port | Airplay内部Airplay服务监听端口,默认7002 | 否 |
mirror_port | 镜像投屏数据接收端口,默认7100 | 否 |
airtunes_port | Airplay ROAP协议使用的端口,默认7202 | 否 |
enable_aac_decode | 是否开启AAC解码,音频AAC解码为PCM | 否 |
enable_deamon_mdns | 启用mdns守护进程,仅在widows平台上有效 | 是 |
返回值
0 表示成功,其他表示初始化失败。
返回值 | 含义 |
---|---|
0 | 成功 |
1 | 端口绑定失败。协议使用的端口与其他软件冲突时触发,可通过初始化指定airtunes_port/mirror_port/airplay_port解决 |
license授权错误码说明 | license授权相关的失败错误码请参考: 3.3 License授权校验错误码说明 |
调用示例
C
AirplayInitPara initpara;
memset(&initpara,0,sizeof(AirplayInitPara));
strncpy(initpara.friendly_name, "bj_airplay_demo", sizeof(initpara.friendly_name));
strncpy(initpara.password, "1234", sizeof(initpara.password));
strncpy(initpara.mac_addr, mac, sizeof(initpara.mac_addr));
initpara.framerate = 30;
initpara.resolution_type = BJAir_Resolution_1080P;
initpara.max_session_nums = 6;
initpara.airplay_flags = BJ_AIRPLAY_SUPPORT_MBNAUL_FLAG | BJ_AIRPLAY_SUPPORT_SPSPPSNAUL_FLAG | BJ_AIRPLAY_ENABLE_FASTCONN_FLAG;
initpara.republish_mode = BJAir_RepublishType_Normal;
initpara.no_url_type = 0;
initpara.enable_deamon_mdns = true;
initpara.callback.OnStartMirrorPlayer = BJAirplayCallbackImp::OnStartMirrorPlayer;
initpara.callback.NotifyMirrorAudioCodecInfo = BJAirplayCallbackImp::NotifyMirrorAudioCodecInfo;
initpara.callback.OnMirrorAudioData = BJAirplayCallbackImp::OnMirrorAudioData;
initpara.callback.OnMirrorVideoData = BJAirplayCallbackImp::OnMirrorVideoData;
initpara.callback.OnRotateMirrorVideo = BJAirplayCallbackImp::OnRotateMirrorVideo;
initpara.callback.OnStopMirrorPlayer = BJAirplayCallbackImp::OnStopMirrorPlayer;
initpara.callback.RefreshCoverArtFromBuffer = BJAirplayCallbackImp::RefreshCoverArtFromBuffer;
initpara.callback.SetVolume = BJAirplayCallbackImp::SetVolume;
initpara.callback.RefreshTrackInfo = BJAirplayCallbackImp::RefreshTrackInfo;
initpara.callback.OnStartAudioPlayer = BJAirplayCallbackImp::OnStartAudioPlayer;
initpara.callback.OnAudioData = BJAirplayCallbackImp::OnAudioData;
initpara.callback.OnStopAudioPlayer = BJAirplayCallbackImp::OnStopAudioPlayer;
initpara.callback.NotifyAudioCodecInfo = BJAirplayCallbackImp::NotifyAudioCodecInfo;
initpara.callback.OnStartVideoPlayback = BJAirplayCallbackImp::OnStartVideoPlayback;
initpara.callback.OnStopVideoPlayback = BJAirplayCallbackImp::OnStopVideoPlayback;
initpara.callback.OnPauseVideoPlayback = BJAirplayCallbackImp::OnPauseVideoPlayback;
initpara.callback.OnResumeVideoPlayback = BJAirplayCallbackImp::OnResumeVideoPlayback;
initpara.callback.OnSeekVideoBySec = BJAirplayCallbackImp::OnSeekVideoBySec;
initpara.callback.OnGetVideoPositionMSec = BJAirplayCallbackImp::OnGetVideoPositionMSec;
initpara.callback.OnGetVideoDurationMSec = BJAirplayCallbackImp::OnGetVideoDurationMSec;
initpara.callback.OnGetVideoPlayerStatus = BJAirplayCallbackImp::OnGetVideoPlayerStatus;
initpara.callback.OnStartPhotoPlayer = BJAirplayCallbackImp::OnStartPhotoPlayer;
initpara.callback.OnPlayPhoto = BJAirplayCallbackImp::OnPlayPhoto;
initpara.callback.OnStopPhotoPlayer = BJAirplayCallbackImp::OnStopPhotoPlayer;
initpara.callback.OnShowPinCode = BJAirplayCallbackImp::OnShowPinCode;
initpara.callback.OnVerifyPinSuccess = BJAirplayCallbackImp::OnVerifyPinSuccess;
initpara.callback.OnProbePlayerAbility = BJAirplayCallbackImp::OnProbePlayerAbility;
initpara.callback.OnDeviceConnect = BJAirplayCallbackImp::OnDeviceConnect;
initpara.callback.OnDeviceDisConnect = BJAirplayCallbackImp::OnDeviceDisConnect;
initpara.callback.LogFun = defaultTrace;
int res = InitBJAirplay(&initpara);
if (res){
TRACE_ERR("InitBJAirplay failed");
}
注意事项
初始化时还支持指定一些其他定制化的属性,或者针对某些特定场景的属性(如酒店投屏场景需要自动隐藏不被外部发现,这部分属性属于特定业务场景才需要使用的功能,在本文没有列出,如有需求请与我司商务/技术接口人对接咨询)。
3.1.2 去初始化接口
C
void UninitBJAirplay();
描述
用于去初始化Airplay模块。App销毁Airplay接收端服务时调用。
3.1.3 更新投屏密码接口
C
int SetAirplayPassword(const char *password);
描述
更新Airplay投屏密码。空字符串表示禁用投屏密码,其他有效字符串表示投屏密码。
参数
password: 为当前投屏密码。
返回值
0: 成功
其他: 失败
注意事项
注意: 当有Airplay投屏连接存在的情况下,不允许更新投屏密码,此时调用该接口会返回错误。
3.1.4 强制结束某路Airplay会话接口
C
void KickOut(uint32_t playerId);
描述
用于用户强制结束某个投屏会话。
参数
playerId: 为播放会话ID。
注意事项
KickOut函数的调用不能在SDK的回调接口中调用,容易导致死锁。建议用户异步起一个子线程调用。具体请参考Demo源码中的调用示例。
3.1.5 实时修改Airplay接收端名称接口
C
void ServiceRename(const char* name);
描述
用于用户修改Airplay接收端的名称,该接口调用实时生效。
参数
name: 为Airplay接收端的名称。
3.1.6 显示或隐藏服务发现
C
void ServiceSetDiscoverable(bool flag);
描述
使服务隐藏对用户不可见或使服务显示对用户可见。
参数
flag: true:显示 false:隐藏。
3.2 回调接口说明
回调接口需要用户去实现这些接口。
3.2.1 设备接入回调接口
C
int(*OnDeviceConnect)(const BJAirPlaySenderConnInfo* sender_conn_info);
描述
回调接口。由用户根据实际情况重载实现。
用户发起投屏会话时通知设备连接触发该接口,应用可根据sender_conn_info中信息获取发射端的信息进行对应处理。
参数
sender_conn_info: 发射端设备信息。参考: 6.7 BJAirPlaySenderConnInfo。
返回值
0: 允许接入;
1: 直接断开连接。
注意事项
若输PIN码会调用多次该接口。
3.2.2 设备断开回调接口
C
void(*OnDeviceDisConnect)(const char* ip);
描述
回调接口,当用户完全断开投屏时(或网络异常中断),该接口会回调通知应用。由用户根据应用需要重载该接口,父类中默认实现不做任何处理。用户可根据该接口判断,后续该设备不会再有新的投屏上来。
参数
ip: 为发射端设备的IP地址。
注意事项
若输入PIN码会调用多次该接口。
3.2.3 开始镜像投屏播放接口
C
int32_t (*OnStartMirrorPlayer)(uint32_t playerId, const char* ip, const char* device_model, const char* device_name);
描述
回调接口。当用户发起镜像投屏或URL播放回到镜像播放等场景会触发该接口。
参数
名称 | 描述 |
---|---|
playerId | 播放会话ID(该ID由SDK内部统一分配,全局唯一) |
ip | 发射端设备的IP地址 |
device_model | 发射端设备的设备型号,如iPhone6 |
device_name | 发射端的设备名称 |
返回值
0: 应用层播放成功; 其他: 应用层播放失败,SDK内部会结束该会话。
注意事项
应用需要记住playerId,由playerId参数来维护镜像会话,后续相关接口都通过该字段进行关联。
3.2.4 通知镜像音频解码信息接口
C
void (*NotifyMirrorAudioCodecInfo)(uint32_t playerId, int32_t bitsdep, int32_t channels, int32_t sampleRate);
描述
回调接口。
参数
名称 | 描述 |
---|---|
playerId | 播放会话ID(该ID由SDK内部统一分配,全局唯一) |
bitsdep | 音频位域信息,默认16 |
channels | 声道数,固定为2,表示双声道 |
sampleRate | 采样率,固定为44100 |
3.2.5 通知应用镜像音频数据接口
C
uint32_t(*OnMirrorAudioData)(uint32_t playerId, const uint8_t *p_src, uint32_t size, int64_t ptsValue);
描述
回调接口。镜像投屏过程中,SDK收到音频数据后会进行解码,并调用该接口通知应用层已经解码的PCM音频数据。
参数
名称 | 描述 |
---|---|
playerId | 播放会话ID(该ID由SDK内部统一分配,全局唯一) |
p_src | 指向音频数据块的指针 |
size | 音频数据块的长度 |
ptsValue | 音频数据对应的时间戳,时间戳单位为1/1000000秒 |
返回值
uint32_t: 复制的音频数据长度,单位: 字节。
注意事项
应用收到音频数据后应进行解码播放,同时需要根据时间戳与音频做同步控制。
3.2.6 通知应用镜像视频数据接口
C
uint32_t(*OnMirrorVideoData)(uint32_t playerId, const uint8_t *p_src, uint32_t size, int64_t ptsValue);
描述
回调接口。镜像投屏过程中,SDK收到视频数据后会调用该接口通知应用层收到H264视频数据。
参数
名称 | 描述 |
---|---|
playerId | 播放会话ID(该ID由SDK内部统一分配,全局唯一) |
p_src | 指向视频数据块的指针 |
size | 视频数据块的长度 |
ptsValue | 视频数据对应的时间戳,时间戳单位为1/1000000秒 |
返回值
uint32_t: 复制的视频数据长度,单位: 字节。
注意事项
应用收到视频数据后应进行解码并播放,同时需要根据时间戳与视频做同步控制。
3.2.7 镜像视频解码参数通知接口
C
void (*OnNotifyMirrorVideoCodecPara)(uint32_t playerId,int w, int h,const uint8_t *p_src, uint32_t size);
描述
回调接口。通知镜像视频解码参数。
参数
名称 | 描述 |
---|---|
playerId | 播放会话ID(该ID由SDK内部统一分配,全局唯一) |
w | 视频宽度 |
h | 视频高度 |
p_src | 指向视频数据块的指针 |
size | 视频数据块的长度 |
注意事项
在视频分辨率变化时调用。
3.2.8 镜像播放视频旋转角度通知接口
C
void(*OnRotateMirrorVideo)(uint32_t playerId, int angle);
描述
回调接口。当IPAD/IPHONE等终端旋转时,SDK会调用该接口通知旋转角度。
参数
名称 | 描述 |
---|---|
playerId | 播放会话ID(该ID由SDK内部统一分配,全局唯一) |
angle | 视频旋转角度,可能取值范围为0,90,180,270。所有角度为顺时针方向角度 |
注意事项
要触发此回调需要在初始化时设置BJ_AIRPLAY_SUPPORT_ROTATION_FLAG标志,应用收到该回调事件后,播放器需要根据该角度来处理旋转,才能正确显示视频。
3.2.9 停止镜像播放接口
C
void(*OnStopMirrorPlayer)(uint32_t playerId);
描述
回调函数。当用户停止镜像投屏或由镜像投屏切换到URL播放等场景时,会触发该接口。
参数
playerId: 播放会话ID(该ID由SDK内部统一分配,全局唯一)。
注意事项
应用需要释放该会话相关资源。
3.2.10 设置音量接口
C
void(*SetVolume)(uint32_t playerId, int volumePercent);
描述
回调接口。当用户调整音量时会触发该接口。
参数
名称 | 描述 |
---|---|
playerId | 播放会话ID(该ID由SDK内部统一分配,全局唯一) |
volumePercent | 音量值,0: 静音,100: 音量最高 |
3.2.11 开始纯音频播放接口
C
int32_t(*OnStartAudioPlayer)(uint32_t playerId, const char* ip, const char* device_model, const char* device_name);
描述
回调接口。当用播放纯音频数据的时候会触发该接口。
参数
名称 | 描述 |
---|---|
playerId | 播放会话ID(该ID由SDK内部统一分配,全局唯一) |
ip | 发射端设备的IP地址 |
device_model | 发射端设备的设备型号,如iPhone6 |
device_name | 发射端设备的设备名称 |
返回值
0: 应用层开始播放成功。
其他: 应用层播放失败,SDK内部会结束该会话。
注意事项
应用需要记住playerId,由playerId参数来维护会话,后续相关接口都通过该字段继续关联。
3.2.12 音频播放时封面图片刷新接口
C
void(*RefreshCoverArtFromBuffer)(uint32_t playerId, const uint8_t *p_src, int size);
描述
回调接口。音频播放时,当前播放的音乐的封面图片,JPEG格式。
参数
名称 | 描述 |
---|---|
playerId | 播放会话Id(该ID由SDK内部统一分配,全局唯一) |
p_src | JPEG图片内容 |
size | JPEG图片长度 |
注意事项
应用应该将图片内容做持久化的文件并进行呈现。
3.2.13 通知音频播放时的元数据信息接口
C
void(*RefreshTrackInfo)(uint32_t playerId, const char* album, const char* title, const char* artist);
描述
回调函数。当音频播放时,通知播放器,该音频的相关元数据。
参数
名称 | 描述 |
---|---|
album | 当前播放音乐的唱片信息(某些应用播放器实际传的为歌词) |
title | 标题内容 |
artist | 艺术家信息 |
注意事项
该接口不是必须的。
3.2.14 通知应用音频播放数据接口
C
uint32_t(*OnAudioData)(uint32_t playerId, const uint8_t *p_src, uint32_t size, int64_t ptsValue);
描述
回调接口。纯音频投屏过程中,SDK收到音频数据后会进行解码,并调用该接口通知应用层已经解码的PCM音频数据。
参数
名称 | 描述 |
---|---|
playerId | 播放会话ID(该ID由SDK内部统一分配,全局唯一) |
p_src | 指向视频数据块的指针 |
size | 视频数据块的长度 |
ptsValue | 视频数据对应的时间戳,时间戳单位为1/1000000秒 |
返回值
uint32_t: 复制的数据长度,单位: 字节
注意事项
应用收到音频数据后应进行解码并播放,同时需要根据时间戳与音频做同步控制。
3.2.15 停止纯音频播放接口
C
void(*OnStopAudioPlayer)(uint32_t playerId);
描述
回调接口。停止镜像播放会话,当用户停止镜像投屏或由镜像投屏切换到URL播放等场景会触发该接口。
参数
playerId: 播放会话ID(该ID由SDK内部统一分配,全局唯一)。
注意事项
应用需要释放该会话相关资源。
3.2.16 通知音乐播放时音频数据的格式接口
C
void(*NotifyAudioCodecInfo)(uint32_t playerId, int32_t bitsdep, int32_t channels, int32_t sampleRate);
描述
回调接口。当音频播放时,通知播放器音频数据的格式。
参数
名称 | 描述 |
---|---|
playerId | 播放会话ID(该ID由SDK内部统一分配,全局唯一) |
bitsdep | 音频位域,默认16 |
channels | 声道数,默认2,表示双声道 |
sampleRate | 采样率,默认44100 |
3.2.17 开始URL视频播放会话接口
C
int32_t(*OnStartVideoPlayback)(uint32_t playerId, const char* ip, const char *url);
描述
回调接口。URL视频播放会话开始时SDK会调用。
参数
名称 | 描述 |
---|---|
playerId | 播放会话ID(该ID由SDK内部统一分配,全局唯一) |
url | 要播放的视频URL |
返回值
0: 应用层开始播放成功 其他: 应用层播放失败,SDK内部会结束该会话
3.2.18 结束URL视频播放会话接口
C
void(*OnStopVideoPlayback)(uint32_t playerId);
描述
回调接口。URL视频播放会话结束时SDK会调用。
参数
playerId: 播放会话ID(该ID由SDK内部统一分配,全局唯一)。
注意事项
应用应当释放播放器等相关资源。
3.2.19 暂停URL视频播放会话接口
C
void(*OnPauseVideoPlayback)(uint32_t playerId);
描述
回调接口。在URL视频暂停播放时SDK会调用。
参数
playerId: 播放会话ID(该ID由SDK内部统一分配,全局唯一)。
注意事项
应用应暂停播放。
3.2.20 恢复URL视频播放会话接口
C
void(*OnResumeVideoPlayback)(uint32_t playerId);
描述
回调接口。在URL视频恢复播放时SDK会调用。
参数
playerId: 播放会话ID(该ID由SDK内部统一分配,全局唯一)。
注意事项
暂停后继续播放。
3.2.21 URL视频播放Seek接口
C
void(*OnSeekVideoBySec)(uint32_t playerId, int64_t position_sec);
描述
回调接口。拖动视频进度条时SDK会调用。
参数
playerId: 播放会话ID(该ID由SDK内部统一分配,全局唯一);
position_sec: 播放位置。
返回值
int32_t: 当前播放器所播放到的位置,单位: 秒
3.2.22 获取播放器URL播放视频当前所处的位置接口
C
int32_t(*OnGetVideoPositionMSec)(uint32_t playerId);
描述
回调接口。SDK需要获悉当前URL播放的视频的位置时会调用。
参数
playerId: 播放会话ID(该ID由SDK内部统一分配,全局唯一)。
返回值
int32_t: 当前播放器所播放到的位置,单位: 毫秒。
3.2.23 获取当前播放器播放状态接口
C
int32_t(*OnGetVideoPlayerStatus)(uint32_t playerId);
描述
回调接口。SDK会要获悉当前播放器播放状态时会调用。
参数
playerId: 播放会话ID(该ID由SDK内部统一分配,全局唯一)。
返回值
int32_t: 取值范围参考 6.2 BJAirPlayerStatus
3.2.24 获取URL总时长接口
C
int32_t(*OnGetVideoDurationMSec)(uint32_t playerId);
描述
回调接口。SDK需要获悉URL播放的视频的总时长时会调用。
参数
playerId: 播放会话ID(该ID由SDK内部统一分配,全局唯一)。
返回值
int32_t: URL视频的总时长,单位: 毫秒
3.2.25 开始播放照片接口
C
int32_t(*OnStartPhotoPlayer)(uint32_t playerId, const char* ip);
描述
回调接口。播放照片时SDK会调用。
参数
名称 | 描述 |
---|---|
playerId | 播放会话ID(该ID由SDK内部统一分配,全局唯一) |
ip | 发射端设备的IP地址 |
返回值
0: 播放成功 其他: 播放失败
注意事项
iOS9以前系统支持。
3.2.26 播放照片接口
C
void(*OnPlayPhoto)(uint32_t playerId, const uint8_t* picData, int size);
描述
回调接口。正在播放照片时SDK调用,通知播放器当前播放的照片信息。
参数
名称 | 描述 |
---|---|
playerId | 播放会话ID(该ID由SDK内部统一分配,全局唯一) |
picData | 指向图片数据的指针 |
size | 数据的大小 |
注意事项
IOS9以前系统支持。
3.2.27 结束播放照片接口
C
void(*OnStopPhotoPlayer)(uint32_t playerId);
描述
回调接口。结束播放照片时SDK会调用。
参数
playerId: 播放会话ID(该ID由SDK内部统一分配,全局唯一)。
注意事项
IOS9以前系统支持。
3.2.28 显示PIN码接口
C
void(*OnShowPinCode)(const char* ip,const char* pincode);
描述
回调接口。SDK在显示PIN码时会调用。
参数
名称 | 描述 |
---|---|
ip | IP地址 |
pincode | PIN码 |
3.2.29 PIN码验证成功接口
C
void(*OnVerifyPinSuccess)(const char* ip);
描述
回调接口。PIN码验证成功时SDK会调用。
参数
ip: IP地址。
3.2.30 获取发射端能力接口
C
void(*OnProbePlayerAbility)(const char* ip, BJAirPlayAbility* const ability);
描述
回调接口。当某个发射端发起投屏时,SDK会调用该接口,获取最大帧率和分辨率参数。
参数
名称 | 描述 |
---|---|
ip | IP地址 |
ability | 参考结构体 6.6 BJAirPlayAbility |
3.2.31 自定义日志接口
C
void(*LogFun)(unsigned int level, const char *format, va_list argp);
描述
回调接口。用户自定义日志打印细节的函数接口,SDK会优先调用该接口。
参数
名称 | 描述 |
---|---|
level | 日志等级 |
format | 格式化方式 |
argp | 参数列表 |
3.2.32 已连接发射端设备信息接口
C
void(*BJAirPlaySenderConnInfo)(const char* ip, const BJAirPlaySenderConnInfo* conn_info);
描述
回调接口。AirPlay 连接的发射端的设备信息。
参数
名称 | 描述 |
---|---|
ip | IP地址 |
conn_info | 参考 6.7 BJAirPlaySenderConnInfo |
3.3 License授权校验错误码说明
错误码值 | 说明 |
---|---|
801 | 输入deviceId无效 |
802 | proGuardSalt输入无效 |
803 | proGuardMode输入无效 |
804 | 服务器返回值为空(请检查网络是否正常) |
810 | 获取本地deviceId地址失败 |
811 | 输入的deviceId无法通过验证(请检查本地设备初始化是否正常) |
812 | license 申请结果异常,请检查网络状态 |
1001 | license_check_token校验失败,包名不匹配 |
1002 | license_check_token校验失败 |
1003 | license_check_pass密码校验失败 |
1004 | license_check_token校验失败,非法的校验类型 |
-101 | 无法获取deviceId |
-102 | 无法获取硬件信息 |
-103 | 检验deviceId失败 |
-104 | 校验硬件信息失败 |
-105 | SDK类型不一致 |
-106 | 授权(license Key)已过期 |
-107 | 无法解析license |
-108 | license Key解析错误,请检查license是否读取成功,申请license过程是否出现异常 |
-109 | license Key为空 |
-110 | 平台类型不匹配(SDK用于Windows,Linux平台必须匹配) |
-111 | productId不匹配 |
4 关键数据结构
4.1 Airplay错误码
C
typedef enum
{
BJ_AIRPLAY_ERROR_SUCCESS = 0,
BJ_AIRPLAY_ERROR_PORT_BINDERROR,
BJ_AIRPLAY_ERROR_INIT_FAILED,
BJ_AIRPLAY_ERROR_INIT_RAOP_FAILED,
BJ_AIRPLAY_ERROR_BUTTON
}BJAirplayErrorCode;
4.2 播放状态
C
typedef enum
{
BJ_PLAYER_STATUS_LOADING = 0, //正在加载
BJ_PLAYER_STATUS_PLAYING, //正在播放
BJ_PLAYER_STATUS_PAUSED, //暂停状态
BJ_PLAYER_STATUS_ENDED, //播放结束
BJ_PLAYER_STATUS_FAILED, //播放失败
}BJAirPlayerStatus;
4.3 功能支持标识
C
#define BJ_AIRPLAY_SUPPORT_ROTATION_FLAG (0x00000001) //支持旋转
#define BJ_AIRPLAY_SUPPORT_URL_FLAG (0x00000002) //支持URL播放
#define BJ_AIRPLAY_SUPPORT_MBNAUL_FLAG (0x00000004) //启用MBNAUL 实时写入
#define BJ_AIRPLAY_DISABLE_MBNAUL_FLAG (0x00000008) //禁用MBNAUL 仅在完整帧就绪时才写入数据
#define BJ_AIRPLAY_SUPPORT_SPSPPSNAUL_FLAG (0x00000010) //SPS/PPS作为独立的NAUL发送
#define BJ_AIRPLAY_ENABLE_FASTCONN_FLAG (0x00000020) //启用快速连接(ios14以上支持)
注意事项 启用NAUL会导致网络包数量增加,但是会降低首帧延迟。
4.4 分辨率
C
typedef enum
{
BJAir_Resolution_1080P = 0,
BJAir_Resolution_720P = 1,
BJAir_Resolution_800x600 = 2,
BJAir_Resolution_1600x900 = 3,
BJAir_Resolution_2560x1440 = 4,
BJAir_Resolution_3840x2160 = 5,
BJAir_Resolution_Button
}BJAirResolutionType;
注意事项 当前不支持2K及以上分辨率。
4.5 发布方式
C
typedef enum
{
BJAir_RepublishType_Normal = 0, //mdns消息发布一次
BJAir_RepublishType_Remove_And_Publish = 1, //mdns消息定时更新
BJAir_RepublishType_Button
}BJAirRepublishType;
4.6 播放能力
C
typedef struct BJAirPlayAbility
{
int maxFPS; //最大fps
int resolution_type; //取值范围参考: 6.4 BJAirResolutionType
}BJAirPlayAbility;
4.7 发射端设备信息
C
typedef struct BJAirPlaySenderConnInfo
{
const char* name; //设备名称 ex:iPhone8
const char* model; //设备型号 ex:iPhone10,1
const char* mac; //设备mac地址 ex:C2:87:12:0A:88:83
const char* ip; //设备ip ex:192.168.10.66
const char* osName; //系统名称 ex:iPhone OS
const char* osVersion; //系统版本 ex:15.5
};
4.8 日志等级
C
typedef enum {
BJAir_LOG_CRIT = 1,
BJAir_LOG_ERROR,
BJAir_LOG_WARN,
BJAir_LOG_INFO,
BJAir_LOG_DEBUG,
BJAir_LOG_DETAIL,
BJAir_LOG_MAX,
}BJAirplayLogLevel;
4.9 初始化参数
C
typedef struct
{
char friendly_name[128]; //Airplay接收端的显示名称,即在iPhone/IPad等设备搜索到的Airplay接收端的名称
int framerate; //取值范围15-60; >60会设置为60 <15会设置为15
int resolution_type; //resolution_type 取值范围参考: 6.4 BJAirResolutionType
char password[256]; //投屏密码
char licenseKey[1024]; //License信息,从License文件中读取
char mac_addr[32]; //格式:00:26:b9:52:7b:e0
int airplay_flags; //参考BJ_AIRPLAY_FLAGS定义,位域类型
int max_session_nums; //最大nums 取值范围1-9
int republish_mode; //mdns发布模式,取值范围参考: 6.5 BJAirRepublishType
int log_level; //日志级别,取值范围参考BJAirplayLogLevel
int no_url_type; //仅在 airplay_flags 中含有BJ_AIRPLAY_SUPPORT_URL_FLAG时有意义,设置为0即可,其它取值请与必捷SDK方沟通
BJAirplayFunctionCbs_t callback; //用户回调接口,需要由用户来实现
int airplay_port; //默认7002
int mirror_port; //默认7100
int airtunes_port; //默认7202
bool enable_aac_decode; //是否开启AAC解码,音频AAC解码为PCM
bool enable_deamon_mdns; //启用mdns守护进程,仅在widows平台上有效
}AirplayInitPara;
5 Airplay Demo简要说明
bj_airplay_sdk_demo 是一个演示SDK使用的Windows 可执行程序。SDK和源码请联系我司商务或技术接口获取。 Demo中演示了各个控制接口的调用方法,并提供了获取license的示例方法。
6 客户如何使用SDK
6.1 集成简要说明
- 将include下的头文件和lib下的动态库文件添加到工程目录下。
- 编译过程中一定要配置成MT模式。
- 实现回调函数,创建AirplayInitPara结构体并填充。
- 实现自身播放器功能。