CRI ADX  Last Updated: 2024-07-17 10:48 p
确认串流是否在运行

确定问题的原因

串流播放的声音发生问题时,不要将原因认定为串流, 请首先要确定问题的原因。
可以尝试先将串流设置的数据切换为内存播放并重建数据, 确认故障是否复现。
如复现时,则说明故障原因不是串流,而是ADX的其他功能导致的故障。 在这种情况下,请在切换到内存播放的状态下重新排除故障。
另一方面,如果切换到内存播放后故障不再复现, 则很可能是串流的问题。 请根据以下内容确认串流是否存在问题。

获取串流缓冲区的剩余数据量

当出现问题时,可以通过检查串流缓冲区中的剩余数据变化来确定原因。 可以使用 criAtomPlayer_GetInputBufferRemainSize 函数来确认串流缓冲区的剩余数据量。 关于具体的使用方法示例,请参照 获取缓冲量
通常在播放串流数据期间,串流缓冲区的剩余数据不会变成零。 如果在串流播放期间串流缓冲区的剩余数据变为零, 可能是某些原因抑制了串流读取, 或没有定期执行ADX的音频处理引起的。

抑制串流读取

在串流播放中,从记录媒体中顺序读取此时需要的数据。 如果在播放期间无法访问记录媒体的状态持续, 数据供应会被切断,声音将被中断。
ADX无法访问记录媒体的原因如下。
  1. 光学媒体的光盘弹出。
  2. 网络串流的通信被切断、Server关闭。
  3. 应用程序没有使用CRI File System的API,独立执行数据读取/数据写入。
  4. ADX的音频处理没有运行。
  5. 应用程序使用CRI File System的API读取数据时,在加载完成回调中阻止读取。

光盘弹出

如果移除光盘或移除记录媒体,数据读取自然会中断。 关于光盘弹出状态的应用程序端的错误处理,请遵循各平台的开发指南。 请注意有些平台可能会有系统强制结束应用程序,也有可能在插入光盘后自动恢复。

通信中断/Server关闭

注意无法通过ADX来判断是否发生通信中断或Server关闭。 请使用常规的网络验证工具来确认通信中断的原因及Server是否关闭等。

应用程序特定的数据读/写

应用程序没有使用CRI File System的API,独立执行数据读/写时, 请修正为使用CRI File System的API。
一般来说,一次可以访问一个记录媒体的进程/线程只有一个。 在一个记录媒体中同时发生多个读/写请求时,系统按顺序执行请求。
使用CRI File System的API读/写数据时, CRI File System库对请求进行优先级排序,然后以固定大小划分和执行请求。 因此,即使应用程序使用CRI File System的API请求读取大型数据, 串流读取也会中断应用程序请求的数据读取而优先运行。
另一方面,如果应用程序不使用CRI File System的API而独立执行数据读/写, 则读/写请求的优先级排序和请求大小的拆分处理不起作用。 因此,如果应用程序请求读取大尺寸的数据时, 在该数据读取完成前,ADX的串流读取必须等待较长时间, 数据供应将被中断。

无法运行ADX的音频处理

无法运行ADX的音频处理时, 将不能执行串流读取的完成确认和更新串流缓冲区的状态, 因此会陷入与数据供应中断状态相同的状态。
请参照 调查Server处理的运行情况 以确认是否是这种情况。

阻止CRI File System完成加载回调

请确认实现了从应用程序端注册的加载完成回调函数, 是否执行了无限循环、线程锁定或长时间线程休眠。
使用CRI File System库的加载器加载数据时,通过注册加载完成回调, 可以通过回调检测加载完成,无需使用状态监视。
此时,如果应用程序为加载完成回调注册了无限循环或长时间线程休眠等 处理结束需要较长时间的函数, 后续加载请求将被延迟,直到函数结束为止。 等待的加载请求不限于ADX内部发出的串流读取加载请求。

上述措施都不能解决时

如果上述调查无法解决问题,虽然原因未知,但可能存在抑制ADX串流读取的因素。 在这种情况下,请使用CRI File System库的文件访问日志功能来获取文件访问日志。
关于获取文件访问日志的方法, 请参照CRI File System “FileMajik PRO”手册中的“教程5:文件访问日志的输出”“文件访问日志查看器”
Return:故障排除