CRIWARE Unity Plugin Manual  Last Updated: 2024-07-12
故障排除
本部分描述了在使用CRIWARE Unity Plugin时如何处理错误以及其他可能发生的问题。
[Unity]
[ADX]
[Sofdec]
[FileMajik PRO]
[Android]
[iOS]

当再次导入一个安装包时,出现了 "Move file failed" 错误。

[概述]

当CRIWARE Unity Plugin的安装包再次导入至Unity Editor时,出现"Move file failed"的错误, 导致导入失败。

[解决方案]

当安装包在载入场景的途中被再次导入时,当其他文件被覆盖时可能 会引发错误。关闭该项目,然后再次导入安装包(当场景还未被载入时)。

Page TOP


在导入 CRIWARE Unity Plugin Ver. 2.5x 安装包后,出现"undefined reference"错误。

[概述]

在Unity Editor中导入CRIWARE Unity Plugin Ver. 2.5x 安装包后,出现 CriManaPlugin 没有定义 criManaUnityPlayer_UpdateTextureByID 的错误。

[解决方案]

当您将CRIWARE Unity Plugin Ver.2.0x更新至Ver. 2.5x时,Unity项目中被废弃的文件有引发问题的可能。
在导入Unity安装包Ver. 2.5x之前,请确保删除以下文件和文件夹:
  • Plugins/CriWare/CriMana/Details/CriManaPlayerImpl.cs
  • Plugins/CriWare/CriMana/Details
  • Plugins/CriWare/CriMana/Shaders/DesktopAdditive.shader
  • Plugins/CriWare/CriMana/Shaders/DesktopAlpha.shader
  • Plugins/CriWare/CriMana/Shaders/DesktopAlphaAdditive.shader
  • Plugins/CriWare/CriMana/Shaders/DesktopRGB.shader
  • Plugins/CriWare/CriMana/Shaders/GLES20Additive.shader
  • Plugins/CriWare/CriMana/Shaders/GLES20Alpha.shader
  • Plugins/CriWare/CriMana/Shaders/GLES20AlphaAdditive.shader
  • Plugins/CriWare/CriMana/Shaders/GLES20RGB.shader
  • Resources/CriWare/CriMana/DesktopShaderHolder/Additive.prefab
  • Resources/CriWare/CriMana/DesktopShaderHolder/Alpha.prefab
  • Resources/CriWare/CriMana/DesktopShaderHolder/AlphaAdditive.prefab
  • Resources/CriWare/CriMana/DesktopShaderHolder/RGB.prefab
  • Resources/CriWare/CriMana/MobileShaderHolder/Additive.prefab
  • Resources/CriWare/CriMana/MobileShaderHolder/Alpha.prefab
  • Resources/CriWare/CriMana/MobileShaderHolder/AlphaAdditive.prefab
  • Resources/CriWare/CriMana/MobileShaderHolder/RGB.prefab
  • Resources/CriWare/CriMana
  • Resources/CriWare

Page TOP


更新 Unity 插件包时出现编译错误

[概述]

在Unity项目已存在导入插件的情況下导入新的插件包(.unitypackage)时,
将出现以下报错的编译错误。
The type or namespace name 'XXXXX' could not be found (are you missing a using directive or an assembly reference?)

[解决方案]

从 CRIWARE Unity SDK v3.03.00(插件版本 v2.35.32)开始,新增了对Assembly Definition和命名空间的支持。
https://criware.info/criware-unity-plug-in-3-03-00/
导入新配置(Assembly Definition支持版)会导致命名空间不一致、引用关系被破坏等编译错误。 导入新配置(Assembly Definition支持版)会导致命名空间不一致、引用关系被破坏,从而导致编译错误。

需要从旧配置切换到新配置的插件时,请参照 插件包迁移指南 进行更新。
Page TOP

无法直接播放Unity的AssetBundle中的ADX/Sofdec文件

[概述]

我想要直接播放来自Unity的AssetBundle中的ADX/Sofdec文件的音频和视频,
但我不知道该如何播放。

[解决方案]

  • 请同时配合使用 Asset Support add-on 与Unity的Addressable Asset System。
    通过 CRI Assets 资产化的数据可以使用 CRI Addressables 的功能通过 Addressable Asset System 加载。
    这将允许数据即使包含在AssetBundle中,加载时也无需在内存中展开数据,可以进行串流读取。
  • 除上述方法外,将无法直接从包含ACB或CPK等文件的AssetBundle中直接串流播放音频或视频。
    在这种情况下,请直接下载Non-Asset CRI数据来代替AssetBundle。

Page TOP


在Unity Editor中,如在回放场景的途中更新脚本就会引发错误

[概述]

在Unity Editor中,当在回放(Playmode)的途中
编辑(应用程序中或插件中的)脚本,可能会出现CRI错误或者NullReferenceException错误。

[解决方案]

目前,应用程序不支持在回放场景的途中更新脚本(hot reload(热加载))。

当应用程序正在运行的情况下编辑脚本时,
包括已编辑的脚本,所有脚本都会被重新编译。这将使插件中的静态变量被重置至默认状态, 导致发生不正常的行为。

您不能在播放的途中(Playmode)直接在Unity Editor上编辑脚本。
如果您编辑了脚本并停止运行编辑器,
可能会引发插件的异常终止。
因此我们推荐,在发生异常时重新启动Unity Editor。

Page TOP


在Linux上运行时出现 DllNotFoundException

[概述]

在Linux上执行Unity编辑器或已构建的服务器应用程序时,
可能会出现 DllNotFoundException ,导致无法使用插件功能。

[解决方案]

要使用向Linux的CRIWARE库时,需要先在您的环境中安装PulseAudio驱动程序。
请确认是否安装了PulseAudio驱动程序。

如果应用程序仅用于服务器,并且不需要播放音频/视频的话,
可以通过添加 CRIWARE_ENABLE_HEADLESS_MODE 作为Script Define Symbols来避免此问题。
  • 启用 CRIWARE_ENABLE_HEADLESS_MODE 时,则将跳过CRIWARE内的所有DLL调用。
  • CRIWARE的一部分API(获取状态等)将始终返回无效值。

Page TOP


当我为iOS/Android开发应用程序时,我无法理解CRI Atom Craft中的build target setting(建立目标设置)以及如何将数据植入Unity。

[概述]

当我为iOS/Android开发应用程序时,我在CRI Atom Craft中发现了多个build target setting。
我不知道是否需要从它们中输出音频数据并植入这些数据。


[解决方案]

您无需分别为iPhone和安卓输出音频数据。

举例,当应用程序还在早期开发阶段时,我们推荐您将iPhone的一个音频数据植入Unity
并将其用于电脑,Mac,iOS以及安卓。

在那之后,如果您想以高阶开发为目的, 为iPhone和安卓提供不同的编码质量,
请输出不同的音频数据。

Page TOP


无法正常播放HCA-MX音频

[概述]

播放HCA-MX音频时失败。

[解决方案]

请确认以下几点事项。
  1. 请重新确认 CRIWARE Library Initializer 的设置。需要注意Atom Config的HCA-MX Voice Pool Config。基本上,播放时,请增加Voice池的数量。
  2. 请重新确认 CRIWARE Library Initializer 的设置。需要注意Atom Config的Sampling Rate。使用 HCA-MX 数据时,需要指定与数据相同的采样率。
  3. 在安卓平台上,请确认是否使用了 安卓的低延迟声音回放 。HCA-MX不支持低延迟播放。

Page TOP


Sofdec.Prime为高画质视频编码失败

[概述]

一个高画质(4K)视频的编码可能会失败。

[解决方案]

一个高画质(4K)视频的编码可能会因为
Sofdec.Prime的内部引擎而失败。

如需了解详情以及应急方法,请查看由SDK提供的 "Sofdec Tools"用户手册
(/CRIWARE/Tools/Sofdec2/CRI_Sofdec2_Tools_Manual_e.chm)中的
"Tips > Encoding high-resolution movie data" 部分。

Page TOP


FileMajik PRO的安装功能出现下载失败

[概述]

FileMajik PRO的安装功能无法从服务器
下载文件。

[解决方案]

如果FileMajik PRO的安装功能无法从服务器
下载文件,请确认以下事项。
  • [确认安装目录是否存在]
    如果安装路径包含了不存在的目录时
    将会出现安装失败。在您能够往不存在的目录中 安装文件前,您必须创建该目录。
  • [配置存储文件的服务器]
    • 请确认服务器是否能够识别文件,因为配置了不足够的MIME类型。
      配置了不足够的MIME类型。
    • 请确认是否能够下载具体格式。
      (是否可以下载"cpk", "acb", "awb", 以及 "acf"格式文件?)

      请确认服务器错误日志是否含有关于安装失败的信息。
  • [重新确认文件路径]
    目标文件是否在服务器上被正确定位?

Page TOP


FileMajik PRO的安装功能所下载的文件已损坏

[概述]

使用FileMajik PRO的安装功能从服务器下载的文件已损坏。

[解决方案]

如果使用FileMajik PRO的安装功能从服务器下载的文件已损坏,
请确认服务器的Range header设置是否已开启。

FileMajik PRO的安装功能使用了HTTP/1.1协议,
从服务器传输数据。它将Range header添加至GET请求
以下载数据。
因此,如果服务器上的Range header被关闭的话,也可以控制模型的口形。
就无法正确下载数据。在下载数MB后数据便会损坏。

[补充事项]
由于损坏的数据,如果数据在 CriWareInitializer 组件的 Initialize FileSystem组设置中所设定的"Install Buffer Size"大小之后, 该数据有可能失效。
举例,如果"Install Buffer Size"设置为4 MB,那么4 MB之后的数据 将不可用。曾经有用户报告过有服务器 曾重复编写4 MB数据。

Page TOP


文件不会停止安装

[概述]

使用 CriWare.CriFsInstaller 类别在网络中安装文件的进程不会停止。

[解决方案]

CriWare.CriFsWebInstaller 的初始化配置中的 CriWare.CriFsWebInstaller.ModuleConfig.inactiveTimeoutSec 设置为适当的值。
如果由于某些问题导致安装延迟,会根据设置的等待时间进行错误判断。

Page TOP

当安卓设备在静音模式时,ADX音频依然在播放

[概述]

当安卓设备在静音模式时,ADX音频依然在播放

[解决方案]

CRI Atom文件库无法识别静音模式或者静音回放。
因此,应用程序必须识别静音模式和静音回放。


您可以使用以下方法来静音Atom文件库中的回放。
  1. 将所有AtomExPlayers的音量设置为0。
    (注意:该方法仅在app上起效。您必须调整所有AtomExPlayers 的音量。请注意Atom文件库不提供批量静音的功能。)
  2. 在安卓中将影音音量设置为0。
    使用安卓API中的android.media.AudioManager将影音音量
    (AudioManager.STREAM_MUSIC) 设置为0。
    (注意:该方法不仅在目标app中起效,同样在影音音量中起效。)

Page TOP


ADX/Sofdec数据无法从由"Split Application Binary(分离应用程序二进制)"选项创建的.OBB文件中播放

[概述]

ADX/Sofdec数据无法从由“Split Application Binary”选项创建的.OBB文件中播放。 在应用程序端先从.OBB作为別个单独文件导出目标文件后进行播放。

[解决方案]

您可以使用Unity Editor中的“Split Application Binary”选项,将StreamingAssets以下的内容分割为分离应用程序二进制(.OBB)文件。 然而, CriWare 插件无法从.OBB文件中直接播放ADX/Sofdec数据。
Split Application Binary
“Split Application Binary”是Unity Editor的一种功能。该选项将.apk文件分割为扩展文件(.apk + .obb)。其详情信息,请参照Unity官方文档。
当该选项在Unity Editor中开启时,StreamingAssets的所有数据都将压缩至不同的,名为*.main.obb.的压缩文件中。
CriWare插件无法从压缩文件直接播放ADX/Sofdec数据。
如何播放.obb文件中的ADX/Sofdec数据
如需使用“Split Application Binary”来处理数据,请将.obb文件中的ADX/Sofdec数据写入一个单独的文件。
如需从.obb的读取数据,您可以使用UnityEngine中的WWW类。请使用CriWare插件来播放已读取的文件。以下为从.obb的读取数据导出的示例代码。
using System.Collections;
using System.IO;
/* 从srcPath读取文件的类至dstPath */
public class FileExtracter : MonoBehaviour {
/* Unity项目中StreamingAssets下已放置的USM文件的名称。
* 启用Split Application Binary时,StreamingAssets以下的文件将打包到.obb文件中 */
private string srcFile = "criware_movie.usm";
/* 本例的输出目标为SD卡。请根据您的环境进行更改。
* 同时需要在Unity的Android PlayerSettings中的Write Access设置为External */
private string dstPath = "/storage/emulated/0/dst.usm";
IEnumerator Start() {
/* 找到.obb時,Application.streamingAssetsPath 将指向obb的内部 */
string srcPath = Path.Combine(Application.streamingAssetsPath, srcFile);
/* 使用WWW类加载srcPath的内容 */
WWW www = new WWW(srcPath);
Debug.Log("Copy " + srcPath + " to " + dstPath + " is started.");
yield return www;
/* 将加载的字节数组(www.byte)在dstPath导出 */
System.IO.FileStream fileStream = new System.IO.FileStream(dstPath, System.IO.FileMode.Create, System.IO.FileAccess.Write);
fileStream.Write(www.bytes, 0, www.bytes.Length);
fileStream.Close();
Debug.Log("Complete");
||----|----|----|
}
注意
以上所示的播放方法仅为一个例子。它尚未经过实际的测试使用。

Page TOP


在安卓中,后台应用将不会停止声音。

[概述]

在iOS中,后台应用将会停止播放声音, 但是安卓不会。

[解决方案]

该问题可能在 CriWare.CriWareInitializer 组件被不小心毁坏的时候发生。

请确认 CriWare.CriWareInitializer::dontDestroyOnLoad 属性被正确配置。
如果属性设置为false,那么 CriWare.CriWareInitializer 将在一个场景结束后自动被毁坏。

如果音频在 CriWare.CriWareInitializer 组件损坏之后继续回放,那么应用将无法察觉到应用的停止或 恢复播放,便能导致该问题发生。
如需在多个场景中播放音频,请将以上属性设置为true。

Page TOP


使用Play Asset Delivery时无法访问CRIWARE的数据文件

[概述]

使用Unity内置的Play Asset Delivery兼容功能后,将CRIWARE的音频/视频数据文件包含在Asset Pack时, 根据其设置,可能无法访问从普通的StreamingAssets的相对路径的文件。

[解决方案]

AssetPack的实际的存储位置会根据发布模式(安装时分发/快速跟进式分发/按需进式)或AssetPack类型(预设/自定义资源包)而有所不同。
CRIWARE的文件加载函数需要传递实际的文件路径,因此请根据需要,获取合适的文件路径。

使用自定义资源包时,无论是发布方式或资源包类型,都可以通过如下的方式获取文件路径。
// 当 AndroidAssetPacks.coreUnityAssetPacksDownloaded == true 时
string assetPackPath = AndroidAssetPacks.GetAssetPackPath("<自定义资源包名称>");
string criDataPath = System.IO.Path.Combine(assetPackPath, "<资源包下的文件的相对路径>");
由于此为可以统一的访问方法,建议使用自定义资产包。

不使用自定义资源包,而使用Unity的预设行为创建资源包时,请注意以下事项:
StreamingAssets的内容根据其大小和添加资产的总容量,可能会单独包含具有快速跟进式分发设置的AssetPack中。
此时,您可以通过上述GetAssetPackPath函数l中指定“UnityStreamingAssetsPack”名称来获取资源包的路径。
在其他情况下,行为将与未使用Play Asset Delivery时相同,可以通过 StreamingAssets以下的相对路径传递至CRIWARE的函数来访问数据。
请注意,如果数据大小的条件发生变化,访问StreamingAssets文件夹的方法也会产生变化。

关于Play Asset Delivery的详情信息,例如资源包的自动创建的条件等,请参照Unity手册和Android开发者公式网站。

Page TOP


启动iOS应用后,音频播放和视频播放无法继续

[概述]

启动该应用程序后,可能存在ADX播放的音频不发声、Sofdec播放的视频 不继续播放的问题。
尤其当安装后首次启动该应用程序时,在显示诸如“允许通知”之类的系统对话框时 有可能发生这种情况。
发生此问题后,如果执行应用程序的前后台切换操作,音频会再次开始播放。

[解决方案]

请在上述系统对话框出现后初始化插件。
具体措施如下。
  • 放置一个仅显示启动画面的空白场景作为启动场景
  • 从上述场景过渡到正常的启动场景后进行初始化

在iOS 8.0或更新版本中,ADX音频有可能无法播放

[概述]

在iOS 8.0或更新版本中,当API AudioSettings.OutputSampringRate在Unity中设置完成时, 可能会引发以下问题。
  • 没有ADX音频被播放。然而,声音处理还在运行中。
  • 在暂停并继续播放后,ADX音频将会开始播放。

[解决方案]

当使用ADX时,如需避免该问题,请不要为AudioSettings.OutputSampringRate 做设置。

Page TOP