CRIWARE Unity Plugin Manual  Last Updated: 2024-07-12
CRI Mana 组件

CriManaMovieController

"CriManaMovieController 组件"用于控制 CRI Sofdec 中的视频播放。
在[Inspector]中,你可以为 CriWare.CriManaMovieController 组件设置视频播放的参数。
如需了解有关其参数的详细信息,请查看 CriWare.CriManaMovieController
以下显示了简易的使用方法:
sfd2u_inspector_moviecontroller.png
请从 Unity Editor 中的 Inspector 中输入视频文件的名称。
请注意,仅输入文件名,无需含有目录名称(例:sample_256x256.usm)。 视频文件则需要配置于StreamingAssets文件夹中。

使用一个自定义Shader

CriManaMovieController 可更改用于视频播放的Shader。 请使用 CriManaMovieController.player.SetShaderDispatchCallback 方法来更改Shader。
如使用该方法,一个用于Shader分配的调用函数将被进行登记。
例,以下组能够简单地附加至分配了 CriManaMovieController 组件的对象。
public class AttacheUserCustomShader : MonoBehaviour {
void OnEnable () {
CriManaMovieController controller = GetComponent<CriManaMovieController>();
controller.player.SetShaderDispatchCallback(ShaderDispatch);
}
// 含有两个参数(movieInfo 以及 additiveMode)并返回Shader的函数
static UnityEngine.Shader ShaderDispatch(MovieInfo movieInfo, bool additiveMode)
{
// 在这里,Shader将被 movieInfo 以及 additiveMode 决定。
// 一般情况下,Shader将被 movieInfo.codecType,movieInfo.hasAlpha 以及 additiveMode 决定。
// 在这个例子中,仅 movieInfo.codecType 和 additiveMode 将被引用,并且
// 将返回 Sofdec.Prime 编码器的自定义Shader。
// 请在需要的时候查看相关信息。
if (movieInfo.codecType != CodecType.SofdecPrime) {
Debug.LogError("未知编码器类型");
return Shader.Find("VertexLit");
}
return Shader.Find(additiveMode ? "用于添加渲染的Shader名称" : "不用于添加渲染的Shader名称");
}
}
请注意,登记必须在播放视频前完成。
创建一个自定义Shader
使用 ShaderLab 语言来描述一个自定义Shader。
默认Shader可在以下位置中找到。请将它们作为创建自定义Shader的参考。
如需了解更多有关 ShaderLab 语言的信息,请查看Unity参考手册。
默认Shader的位置
  * Unity项目的根文件夹

  \ * Assets

    \ * CRIMW

      \ * CriWare

        \ * Runtime

          \ * Scripts

            \ * CriMana

              \ * Resources

                \ * CriMana

                  o * SofdecPrimeRgb

                  o * *SofdecPrimeRgb.shader

                  o * SofdecPrimeYuv

                  \ * *SofdecPrimeYuv.shader

 

 

 

 

 

 

 

 

 

 

: 用于渲染RGB纹理的Shader

 

: 用于颜色转换和渲染RGB的Shader

 

CriManaMovieControllerForUI

该组件用于在 Unity UI 上播放视频。其基本使用方法与 CriManaMovieController 的相同,以及 CriManaMovieControllerForUI.target 并不接收 UnityEngine.Renderer ,而是接收 UnityEngine.UI.Graphic 。

丢弃组件时的注意事项

在执行此组件的Destroy操作时,内部调用的停止函数会等待状态转换的完成,故可以支持播放中进行销毁操作。
但是,如在纹理渲染期间执行销毁操作时,根据操作时机可能会出现意外问题。
因此,建议先明确地停止播放,等待转换为停止状态后再丢弃组件。

从 CriManaPlayer 迁移至 CriManaMovieController

本部分解释了关于从 CriManaPlayer 迁移至 CriManaMovieController的记录。

Unity Editor 的变化

  • 在属性编辑器中显示附加了 CriManaPlayer 的对象。
  • 移除了 CriManaPlayer 组件。
  • 附加了 CriManaMovieController 组件。

CriManaMovieController 组件不包含 CriManaPlayer 组件的以下属性:

  • 上下翻转
  • 左右翻转
  • 音量

使用 Unity API 中 Material 组的 SetTextureOffset 方法替换了程序中的Flip(翻转)属性。
CriMana.Player 组的 SetVolume 方法替换了Volume(音量)属性。

脚本的变化

使用 CriManaMovieController 组件替换了 CriManaPlayer 组件。
以下显示了方法以及属性中的基础成员的对应关系:

CriManaPlayer 以及 CriManaMovieController 的关系
CriManaPlayer CriManaMovieController
SetFile player.SetFile
Play player.Start
Stop player.Stop
status player.status

以下显示了脚本替换的范例。
请将其用作参考。

  • CriManaPlayer (替换前)
    public GameObject movieObject;
    private CriManaPlayer moviePlayer;
    /* 绑定器句柄 */
    private CriFsBinder binder;
    /* 对 movieObject 进行 CriManaPlayer 的 AddComponent。 */
    moviePlayer = movieObject.AddComponent<CriManaPlayer>();
    /* 设置绑定器以及文件名。 */
    moviePlayer.SetFile(binder, "sample.usm");
    /* 开始播放。 */
    moviePlayer.Play();
  • CriManaMovieController (替换后)
    public GameObject movieObject;
    private CriManaMovieController moviePlayer;
    /* 绑定器句柄 */
    private CriFsBinder binder;
    /* 对 movieObject 进行 CriManaPlayer 的 AddComponent。 */
    moviePlayer = movieObject.AddComponent<CriManaMovieController>();
    moviePlayer.useOriginalMaterial = true;
    /* 设置绑定器以及文件名。 */
    moviePlayer.player.SetFile(binder, "sample.usm");
    /* 开始播放。 */
    moviePlayer.player.Start();