视频播放功能

记载了吉里吉里Z 支持的视频播放功能。

目录

规格
模式
特殊播放功能
关于视频播放准备 ( preparevideo )
关于在层模式下指定层
视频结尾处的行为
关于在图层模式下看不到视频的问题
混合播放
关键帧和查找




模式 覆盖模式 使用视频覆盖显示视频的模式
层模式 吉里吉里内的图层播放视频的模式
混合模式 使用VMR9+Direct3显示视频的模式
特殊播放功能 区间循环 能够在指定帧之间循环
周期事件 在指定帧中触发事件的能力
指定播放速度 指定视频播放速度的功能
多音频 选择并播放多路复用声音的功能
声音平衡
(全景)
-100000 ~ 0
~ 100000
-100000完全靠左,0居中,100000完全靠右。
如果您正在播放立体声源,则全景必须
通过衰减左右任一通道来实现。
声音音量 0 ~ 100000 表示完全静音,100000表示100%音量
音频流 依赖于内容 选择要播放的音频流
播放速度 >0 可设置的值取决于DirectShow过滤器。
有声音的情况下,2.0≧速度>0。
1.0为等倍速。
取得可能値 帧率 每秒帧数
当前帧 当前显示的帧。
不能保证与显示的帧编号完全一致td
现在的播放时间 视频最初在视频中的经过时间。
图像大小 宽度和高度
音频流数 复用的音频流的数量
总帧数 视频含有的帧数
合计时间 视频总时间
事件 帧更新 视频帧更新后发生
Period事件 正常循环末端、分段循环末端、
设定的周期事件,播放准备完成时发生。
状态变更 播放状态变更时发生



种类说明
覆盖模式 这是一种使用视频叠加显示视频的模式。
比吉里吉里其他任何图层都更靠前。
在大多数情况下,影片的播放负载是最轻的。。
如果只是简单的播放视频然后停止,那么使用覆盖模式是一个很好的选择。
但是,在Windows Vista 和 Windows XP 中,吉里吉里的绘制模式为DirectDraw时,在某些环境中,如果在覆盖模式下进行放大,则会出现无法完全放大的现象(出现锯齿现象)。
因此,最好不要在Windows Vista中使用覆盖模式。
层模式 在吉里吉里指定的图层上播放视频的模式。
环境依赖性较低,允许在指定帧之间循环(分段循环)和处理指定帧(周期事件)等功能。
唯一的难点是CPU负载比其它模式更高。
也不能进行缩放。
混合模式 使用VMR9+Direct3D显示视频的模式,作为覆盖模式的替代方案而添加。
如果显卡具有视频播放辅助功能且支持编解码器,则可以使用显卡的视频播放辅助功能进行播放。
还可避免Windows Vista放大时出现锯齿问题。
还可以与指定图层混合或缩放。
必须使用DirectX 9或更高版本。



种类功能
分段循环 在指定帧之间循环的功能。
要使用此功能,您必须在要循环返回到视频文件本身的帧上设置关键帧。
如果没有关键帧,则不会按预期循环。
周期事件 一种可以在指定的帧中触发事件并对其进行某种处理的功能。
事件发生时,通过查找到相隔较远的帧,可以跳过中间的帧,使视频看起来像是连接的。
另外,当想要字幕配视频时,也可以在字幕的开始帧上设定周期事件,等待事件后显示文字。
另外,使用此功能,可以在指定帧中使用SE发出声音,而不在视频本身中输入声音。
播放速度控制 可以指定视频的播放速度。
1.0 是正常的播放速度、0.5 是一半的播放速度、2是2倍的播放速度。
可设定的值取决于DirectShow过滤器(Codec)。
多音频 MPEG I允许多个音频流多路复用,因此可以利用这些音频流。
此功能允许您播放任何音频流。
例如,可以只准备BGM、BGM+等音频流,用户可以指定在哪个模式下播放。
不过,音频流的切换有2秒左右的时滞,因此不太适合交互应用。
可以用于根据上述用户的选择和场景而改变视频声音的用途。


preparevideo是在指定的图层上绘制视频的第一帧。
这是为了防止意料之外的图像(内存上的垃圾和上次的图像等)显示在画面上。
也就是说,通过记述隐藏作为播放对象的层,在openvideo中打开视频后,调用preparevideo,在wp中等待准备完成,准备好后使播放对象层处于显示状态的处理,显示时可以显示视频的第1帧。
另外,该功能仅在层模式时具有意义。



在图层模式下播放视频时,使用videolayer指定要绘制的图层。
在videolayer中,可以指定slot、channel、page和layer。
slot相当于se的buf,是为了在同时播放不同的视频时,确定对哪个视频的操作。
我认为几乎不会同时播放多个视频,所以通常省略传参,指定0就没有问题了
channel用于指定要输出的层。
因为可以指定一个视频附带的两个输出的图层,所以用于确定对哪一个指定。
可以指定两个是为了利用过渡。
在视频播放中执行过渡的话,因为正面和背面的层会被更换,所以如果只输出到一方的话,视频就会被隐藏。
为了避免这种情况,在视频播放中进行过渡时,请在通道的1和2上设置正面和背面的层。如果不进行过渡,只指定表层就没有问题。



如果不指定循环播放视频,则播放到最后后视频将停止。
如果想在显示视频的最后一帧的状态下进行游戏,则该行为并不好。
避免这种情况的最简单方法是使用图层模式。
在图层模式下,将对图层绘制视频,因此最后一帧的图像将保留在图层上。
因此,没有特别的有意操作,可以在显示最后一帧的状态下进行游戏。
对于叠加或混合模式,如果停止,则显示将消失,因此必须在到达最后一帧之前暂停。
这可以在周期事件中实现,但如果真的是最后一帧的话,可能会停止,所以最好在视频的末尾放入几帧虚拟帧,稍微超过一点也没关系。



作为视频播放对象的层的显示类型为alpha等时,会发生不显示视频的情况。
这是因为,如果视频没有alpha通道,则会在alpha通道的位置写入不定数据。
如果层显示类型为alpha,则该不定数据会被视为alpha,因此会变得完全透明。
为了避免这种情况,请将播放对象层的显示类型设为opaque。
这样的话就会显示视频。
但是,在KAG中opaque很难受,作为替代调用freeimage也能得到同样的效果。



混合器模式顾名思义,可以实现与其他图层混合播放视频。
在混合模式下,可以指定与混合有关的是背景色、混合率和混合对象层。
混合对象层将设定瞬间的图像和视频混合。
因此,即使更新了混合对象层,只要不再次设定,内容也不会更新。
但是,如果在每帧更新时调用设置,则CPU负荷会相当高。
为了抑制CPU负载,设定时最好仅限于更新时。
背景色是混合比例小于1.0时混合的颜色。
将背景色设定为黑色等,通过改变混合率,可以实现淡入/淡出。
当然,可以与混合对象层淡入/淡出。
与混合对象层的混合率和层位置将使用层的信息。
也就是说,显示位置取决于层的位置,混合率取决于层的不透明度。
但是,因为每次都需要指定与层的混合,所以如果与层进行淡入/淡出,CPU负荷就会变高。



吉里吉里为了高速进行寻道,将可寻道位置限定为关键帧。
如果指定了关键帧以外的帧,则对最接近指定帧的关键帧进行查找处理。
但是,由于此行为依赖于Codec,因此经常会发生意料外的行为。
因此,最好对进行搜索的帧设置关键帧。