云雀安卓客户端SDK更新说明
V3.1.0.0
初始发布.
V3.1.3.0
- 更新 Demo,提高稳定性,修复问题。
- 添加设置电量(头盔和手柄)接口。
- 设置客户端凭证接口。
- 应用列表添加翻页相关接口。
V3.1.8.0
3.1.8.0 新增较多内容,建议参照 SDK 中附带的 Demo 进行更新。
Android 平台渲染初始化配置
XRClient 类新增渲染初始化参数,可以单独重复调用opengl上下文的初始化和销毁。
主要应对 Pico Neo3 环境中多次创建 opengl 环境的情况。在 Pico Neo 中的适配方法参考 demo
// XRClient
/**
* 安卓平台初始化 sdk。
* @param vm java 虚拟机
* @param init_share_context 是否立即初始化 opengl 上下文。如果调用 init 方法不在渲染线程或渲染环境
* 可能会变动的情况下,init_share_context 传入 false,然后手动调用 InitGLShareContext。如果渲染线程
* 不会变化可以直接在 init 方法初始化。
*/
void Init(JavaVM* vm, bool init_share_context = true);
/**
* 初始化opengl共享上下文
* 必须在 opengl渲染线程中调用
*/
void InitGLShareContext();
/**
*
*/
void ReleaseGLShareContext();
新增控制是否将视频渲染到同一张纹理上
通过 XRConfig::use_multiview
设置是否将视频渲染到同一张纹理上进行回调
XRClientObserver 新增如下方法:
// XRClientObserver
/**
* multiview 渲染模式下硬件解码成功时回调。
* 当 XRConfig::use_multiview=true; 时启用该模式,该模式为默认模式
* 返回 opengl GL_TEXTURE_2D 类型纹理。云端渲染好的左右眼图像在同一张纹理上。
* --------------
* | L | R |
* --------------
* 图像如上图所示。该纹理在 larkxr sdk 更新。
* 该回调每次连接成功之后回调一次。
* 之后收到OnTrackingFrame回调时,将 tracking frame 用于 atw 渲染该纹理。
* @param nativeTextrure opengl 纹理 id
*/
virtual void OnMediaReady(int nativeTextrure) = 0;
/**
* stereo 渲染模式下硬件解码成功时回调。
* 当 XRConfig::use_multiview=false; 时启用该模式
* 返回 opengl GL_TEXTURE_2D 类型纹理。分别为云端渲染好的左右眼图像。
* ------------------------ -----------------------
* | nativeTextrureLeft | | nativeTextureRight |
* ----------------------- ------------------------
* 图像如上图所示。该纹理在 larkxr sdk 更新。
* 该回调每次连接成功之后回调一次。
* 之后收到OnTrackingFrame回调时,将 tracking frame 用于 atw 渲染该纹理。
* @param nativeTextrure opengl 纹理 id
*/
virtual void OnMediaReady(int nativeTextrureLeft, int nativeTextureRight) = 0;
控制渲染画面的上下翻转行为
XRConfig 新增如下静态属性,如果 flip_draw 设置为 true 将视频画面上下翻转进行渲染回调。
// XRConfig
// 是否将视频画面翻转渲染
// 上下翻转
static bool flip_draw;
队列渲染
新增渲染队列方法,当开启渲染队列时,收到新的视频帧并渲染完成之后要手动调用释放该帧,否则渲染队列讲耗尽。
如果关闭渲染队列则渲染流程与之前的版本相同。
XRConfig 新增开关
// XRConfig
// 是否使用渲染队列 (3.1.8.0新增)
static bool use_render_queue;
XRClient 中新增渲染队列相关方法
// XRClient
/**
* 使用渲染队列渲染,要在 XRConfig::use_render_queue=true 开启,开启后通过 videoFrame 参数获取视频纹理 id
* 视频的纹理 id 每次渲染可能不同
* 渲染完成之后要手动调用 ReleaseRenderTexture 归还当前纹理,否则渲染队列将耗尽。
* @param trackingFrame trakcing 数据
* @param videoFrame 视频纹理数据,在渲染队列中取出,要注意每次从队列中取出的纹理id可能不同
* @return 是否有新的视频帧
*/
bool Render(larkxrTrackingFrame* trackingFrame, lark::XRVideoFrame* videoFrame);
/**
* 在开启渲染队列的情况下,使用完纹理后要手动释放。
*/
void ReleaseRenderTexture();
设置请求超时时间
XRClient 新增静态方法,设置全局的sdk中接口请求的超时时间。
/*
* http 请求超时时间
*/
static void SetHttpRequestTimeoutInSeconds(int timeoutInSeconds);
设置头盔类型
现在可以在 SDK 外部手动指定头盔类型,通过 XRConfig::headset_desc 进行设置。
// XRConfig
// 头盔类型设置,将根据具体头盔的类型选择steamvr中用的手柄和绑定文件 (3.1.8.0新增)
static larkHeadSetControllerDesc headset_desc;
新增 nolo 和 pico neo3 类型的头盔。要注意不同的头盔类型绑定的 steamvr 的配置文件不同,导致手柄模型和行为的不同。
typedef enum larkHeadSetType_ {
larkHeadSetType_HTC = 0,
larkHeadSetType_OCULUS = 1,
larkHeadSetType_PICO_2 = 2,
larkHeadSetType_PICO_3 = 3,
larkHeadSetType_NOLO_Sonic_1 = 4,
} larkHeadSetType;
同步玩家区域
XRClientObserver 新增同步玩家区域设置回调,设置玩家区域将同步设置到 steamvr 的配置当中。
// XRClientObserver
/**
* 请求同步玩家区域数据
*/
virtual void OnSyncPlayerSpace(larkxrPlaySpace* playSpace) = 0;
视频流相关配置更新
XRConfig 新增视频流相关控制参数
- 配置分辨率的缩放
XRConfig::resolution_scale
// XRConfig
// 分辨率缩放 0 - 2
// 最终分辨率为 align32(render_width * resolution_scale); align32(render_height * resolution_scale)
static float resolution_scale;
- 去掉房间高度设置,主要依靠头戴设备本身的 tracking origin 等功能动态的实现云渲染的身高设置。传给 XRClient 的姿态就已经是处理好身高的tracking,不再云雀 SDK 内部处理。
// XRConfig
// @Deprecated 已弃用.使用头盔姿态的 tracking origin 等功能和安全区域配合使用
// steam vr 设置的初始房间高度
static float room_height;
- 新增 TCP 传输通道,原有的 use_kcp 配置项启用,使用 stream_type 替代。
// XRConfig
// @Deprecated 已弃用,使用 stream_type 替代
// 是否使用增强协议连接媒体
static bool use_kcp;
// 设置使用的传输通道类型,目前有 udp,tcp,增强udp可选 (3.1.8.0新增)
static larkStreamType stream_type;
- 集中渲染
/*以高分辨率渲染图像的中心,而以较低的分辨率渲染郊区。
导致需要通过网络传输的视频分辨率大大降低。在相同比特率的情况下,较小的视频可以保留更多细节,并同时降低延迟。
FFR会在视图的边缘造成一些视觉伪像,这些伪像或多或少会根据设置和游戏而变得可见。
*/
typedef struct larkFoveatedRendering_
{
bool enableFoveateRendering = true; //true的时候 其他参数启用(默认为true)
float foveationStrength = 2; //渲染强度 [0.5-10.0] 默认 2 值越高,意味着朝向帧边缘的细节越少,伪像越多
float foveationShape = 1.5; //渲染形状 [0.2-2.0] 默认 1.5 集中渲染的形状
float foveationVerticalOffset = 0; //渲染垂直偏移 [-0.05-0.05] 默认 0 较高的值表示高质量的帧区域进一步向下移动
} larkFoveatedRendering;
// XRConfig
// 集中渲染设置 (3.1.8.0新增)
static larkFoveatedRendering foveated_rendering;
- 色彩校正
typedef struct larkColorCorrention_
{
bool enableColorCorrection = true; //true的时候 其他参数启用(默认为false)
float brightness = 0; //亮度:范围[-1; 1],默认值为0。-1完全为黑色,1完全为白色
float contrast = 0; //对比度:范围[-1; 1],默认值为0。-1完全是灰色的
float saturation = 0; //饱和度:范围[-1; 1],默认值为0。-1为黑白
float gamma = 1; //伽玛:范围[0; 5],默认值为1。使用值2.2校正从sRGB到RGB空间的颜色
float sharpening = 0; //锐化:范围[-1; 5],默认为0。-1是最模糊的,5是最锐利的
} larkColorCorrention;
// XRConfig
// 颜色校正设置 (3.1.8.0新增)
static larkColorCorrention color_corrention;
- 其他相关
// 是否启用 10 bit 编码 (3.1.8.0新增)
static bool use_10bit_encoder;
// 是否上报 fec 失败,当当前 fec 实效时通知服务端加大冗余包 (3.1.8.0新增)
static bool report_fec_failed;
V3.2.0.2
- 更新服务器接口到 3.2。 注意 3.2 版本服务器不向下兼容 3.1 版本。
- 添加数据通道支持。
XRClient 类添加如下成员方法:
/**
* 发送自定义数据给云端应用
* @param buffer
* @param length
*/
void SendData(const char* buffer, int length);
/**
* 发送自定义数据给云端应用
* @param buffer
* @param length
*/
void SendData(const std::string& data);
XRClientObserver 添加数据通道回调:
/**
* 数据通道开启
*/
virtual void OnDataChannelOpen() = 0;
/**
* 数据通道关闭
*/
virtual void OnDataChannelClose() = 0;
/**
* 收到二进制数据
*/
virtual void OnDataChannelData(const char* buffer, int length) = 0;
/**
* 收到字符数据
*/
virtual void OnDataChannelData(const std::string& data) = 0;
- 可以发送音频数据到云端应用。
XRClient 类添加如下成员方法:
/**
* 发送音频数据给云端
* @param buffer
* @param length
*/
void SendAudioData(const char* buffer, int length);