本帖最后由 五星上将 于 2014-11-12 11:58 编辑
MPG视频文件
DirectMediaXtra 是一个非常强大的第三方插件,它支持 MPEG、AVI、WAV、QuickTime、AIF、MP2和 MIDI文件,并且提供了对 AVI、MPG等视频文件的完全支持和控制,能够极大的扩展 Director 对视频文件的控制能力,在众多插件中使用频率几乎是最高的。
1. 获取 DirectMediaXtra演员成员和精灵的属性
DirectMediaXtra 插件是一种可视化操作的插件,它能在 Director 的演员表中生成一个演员成员,在需要播放视频的地方只需在舞台或精灵通道内创建由该演员成员生成的精灵即可。DirectMediaXtra 插件可获取由它导入和创建的视频演员成员和精灵的各种各种属性。
视频演员成员的属性主要包括文件路径、文件名、文件长度、宽度、高度、音量、平衡度、播放速率等与媒体文件本身相关的属性,而精灵则包括当前播放的视频的时间、速度和播放的状态等属性。
File属性用于获取链接的外部视频文件的完整路径名,例如:
put member("video").file
-- "D:\video.MPG"
title属性用于获取链接的外部视频文件的文件名,不含路径名称,例如:
put member("video").title
-- "video.MPG"
Duration和 CurrentTime 属性分别用于获取链接的外部视频文件的时间长度和精灵通道内播放的视频文件的当前时间,单位是毫秒,例如:
totalTime=member("video").duration
curTime=sprite(1).CurrentTime
ToolTip="当前播放进度:" &curTime*1.0000/totalTime*100 & "%"
put ToolTip
-- "当前播放进度:12.6789%"
videoWidth 和 videoHeight 属性用于获取链接的外部视频文件的宽度和高度,单位是像素,例如:
put member("video").videoWidth
put member("video").videoheight
-- 352
-- 240
Volume 属性获取链接的外部视频、音频文件的音量,单位为分贝,范围在-100 至0之间,例如:
put member("video").Volume
--0
Balance 属性用于获取链接的外部视频、音频文件的平衡度,单位为分贝,范围
在-100到100之间,例如:
put member("video").Balance
--0
Rate 属性用来获取外部链接的视频文件的播放速度,为一个百分比,范围在 0 至
200之间,默认值为100。例如:
put member("video").Rate
--100
loop属性获取外部链接的视频文件播放时是否循环播放的设置情况,例如:
put member("video").loop
--0
ShowLocationFileDialog 属性用于获取如果没有找到链接的外部视频文件的时候是否显示一个定位对话框的设置情况。HasToolbar 用于获取DirectMediaXtra 精灵播放时是否显示自带的控制工具栏的设置情况。例如:
put member("video").ShowLocateFileDialog
put member("video").HasToolbar
--1
--1
2. 线索点
Director 中的线索点(cue point)是指音频或数字视频文件中能被 Lingo 识别和控制的标记。
DirectMediaXtra能够为一个视频创建最多 64 个线索点,线索点以毫秒为单位按照时间顺序排列。
在 DirectMediaXtra 属性设置对话框中拖曳电影预览进度条上的浮标至需要添加线索点的位置或正常预览过程中在合适的位置单击暂停按钮,然后选择“Add”按钮,在弹出的新的线索点对话框中输入线索点名称,线索点名称不能超过 32 个字节,单击“OK”按钮,就为视频创建了一个线索点,如图 7-xx所示。
图 7-xx 创建线索点
选中 Cue Points 列表栏内的某个线索点,单击“Remove”按钮就能删除该节点,单击“Go to”按钮则预览窗口中的电影就跳转到相应的节点。
DirectMediaXtra提供了一些获取并控制这些线索点的命令。
CuePointName 和 CuePointTime 命令分别用来获取一个 DirectMediaXtra 演员成员的所有线索点名称和时间,例如:
put member("video").CuePointTimes
put member("video").CuePointNames
-- [0, 12141, 24317, 64424, 162299, 192000, 404500]
-- ["start", "main", "ch01", "ch02","ch03", "ch04", "end"]
AddCuePoint和 RemoveCuePoint命令分别用来动态添加和删除 DirectMediaXtra演员成员的一个线索点,例如:
member("video").addCuePoint(5000,"cuename")
--5000和cuename分别为线索点的时间和名称
put member("video").CuePointNames
-- ["start", " cuename ", "main","ch01", "ch02", "ch03", "ch04","end"]
member("video").removeCuePoint(5)
--5为线索点的序列
put member("video").CuePointNames
-- ["start", " cuename ", "main", "ch01","ch03", "ch04", "end"]
IsPastCuePoint 命令用来判断指定的线索点是否已经开始播放,如果已经播放则返回 TRUE,反之为 FALSE。IsPastCuePoint命令对于实现动态音频或视频与图文的同步是非常有用的,例如,以下的代码就是实现声音或视频与图文同步的一个行为:
property spriteNumber
property cueIndex
on getPropertydescriptionList me
actionList=[:]
actionList[#spriteNumber]=[#comment:"DirectMediaXtra精灵所在的通道数:
",#default:1,#format:#integer]
actionList[#cueIndex]=[#comment:"当前线索点序列:",#default:1,#format:#integer]
return actionList
end
on exitframe me
if sprite(spriteNumber).IsPastCuePoint(cueIndex) then
go the frame+1
else
go the frame
end if
end
3. 控制 DirectMediaXtra精灵的播放 控制 DirectMediaXtra 精灵的播放主要包括控制音量、播放、暂停和播放片断或从指定的位置播放等操作。
◆ 控制音量
对 DirectMediaXtra 精灵音量的控制主要通过 getVolume()命令获取它的音量,并通过 SetVolume()命令设置它的音量。例如:
--获取编号为1的精灵通道中播放的DirectMediaXtra精灵的音量
put sprite(1).getVolume()
--0
--设置编号为1的精灵通道中播放的DirectMediaXtra精灵的声音值为-100 sprite(1).setVolume(-100)
这两个命令通常用来制作视频播放器的音量控制条。有兴趣的朋友可以参照之前介绍的Flash播放器实例中音量控制条的制作方法实践一下。
getVolume()和 SetVolume()命令的取值范围在-100至 0之间,在制作DirectMediaXtra精灵音量控制条时,一定要注意这一点。
◆ 控制播放
VideoPlay()命令用于播放精灵通道中的 DirectMediaXtra精灵,例如:
on Video_play
sprite(spriteNumber).VideoPlay()
end
VideoPause()命令用于暂停精灵通道中播放的 DirectMediaXtra精灵,例如:
on Video_pause
sprite(spriteNumber).VideoPause()
end
VideoSeek()命令用于使精灵通道中的DirectMediaXtra精灵从指定的时间点开始播放,例如:
on Video_resume
sprite(spriteNumber).VideoSeek(resumeTime)
end
VideoPlaySegment()命令用于播放指定的开始、结束时间点之间的片断,例如:
on Video_playsegment
sprite(spriteNumber).VideoPlaySegment(startT,endT)
end
4、视频路径搜索
使用 DirectMediaXtra 插件的时候,在发布电影前必须先单击主菜单栏 Edit|Preferences|General 命令,在弹出的常用设置对话框中,勾选 Stage栏的“Animate in Background”选项。不然,程序运行时将不会播放影片,而是停止在一帧上面。
另外一个容易出现的问题是当音频、视频文件与运行程序不在同一目录下时,会发生找不到媒体文件的情况,可以通过在与主程序同目录中创建一个 Lingo.ini 的文件来解决这一问题。Lingo.ini文件中可以输入以下内容:
on startUp
the soundkeepdevice=false
global tbsearchpath
tbsearchpath=[]
append(tbsearchpath,the applicationPath & “media\”
append(the searchpaths,the applicationPath & “media”)
end startUp
有了这个文件,当 Director 程序运行中找不到媒体文件时,就会按照文件中指定的路径去搜索媒体文件。
|