sql脚本开发:脚本的DVD开发

好像包含表格不能发表,只有先拷贝到记事本里面才可以,所以格式都丢了,不好意思
这个也是很久以前东西了,不准确地方还请大家见谅.哎,我本书没有被出版,就放到这里吧(出版社人说看不懂,呵呵,我都快晕死了)
基于脚本dvd应用
在网络发展神速今天软件Software业越来越注重基于网络应用下来我们就探讨下基于web编写这里主要讲述使用mswebdvdControl控件进行dvd应用开发过程
插入MSWebDVD对象
MSWebDVD对象可以处理所有dvd导航命令并可以在web页面上显示视频这将比原来处理过程简单很多简单插入代码举例如下:
<OBJECT CLASSID=clsid:38EE5CEE-4B62-11D3-854F-00A0C9C898E7 ID=DVD
STYLE="height:369px; width:740px">
<PARAM NAME="BackColor" VALUE="1048592">
<PARAM NAME="EnableReOnStop" VALUE="-1">
<PARAM NAME="ColorKey" VALUE="1048592">
</OBJECT>
允许用户处理dvd命令
若允许用户控制dvd播放器则需要提供个用户界面来引导用户比如“播放”“停止”按钮下面代码就展示了怎样将个html按钮和mswebdvd对象关联起来
<INPUT ID=button1 NAME="button1" TYPE=button VALUE="Play" _disibledevent=><INPUT ID=button2 NAME="button2" TYPE=button VALUE="Pause" _disibledevent=><SCRIPT LANGUAGE="JScript">
function Play{
DVD.Play;
}
function Pause{
DVD.Pause;
}
</SCRIPT>
用dvd菜单进行工作
当用户点击屏幕按钮时Mswebdvd会自动处理菜单命令应用不需要处理任何事情来实现对鼠标支持但是应用可以不考虑这个自动处理过程如果你对定制鼠标工作十分感兴趣那么你可以使用mswebdvd关联菜单思路方法比如SelectAndActivateButton, GetButtonAtPosition要想彻底禁止鼠标自动化动作处理那么设置DisableAutoMouseProcessing属性为真就可以了
音频和子图流
个dvd碟片可以处理8路音频流从0―7每个音频流又包含了6个独立通道只有这些流在能在任何时间被激活对于子图来说有32个流是有效从0-31碟片通常制作成默认音频和子图流个应用允许用户看到所有有效流数据然后选择种他们喜欢语言基本步骤处理和音频和子图流相同
1. 决定指定标题有效流数量
2. 重新检测每个流属性
3. 从本地标识中返回语言代码然后创建人们可读
4. 添加“选择”对话框或者别用户界面来允许用户选择首选数据流
(注意音频和子图流标记是从0开始然而别大部分都是从1开始)
强制父级管理层
在dvd碟片中通常任何标题或者标题部分会被标记个父级管理层(PML)
从1到88级是限制最多1级是限制最少等级种想法提供了种装置来防止小孩看成人内容但每个国家特殊性决定了他们将不会在美国和加拿大是种标准和别国家就不太
MSWebDVD对象默认状态是忽略pmls对于应用来讲它将会通报pml标记这样必需NotyParentalLevels(true)当在碟片上碰到pml信息时候MSWebDVD将会通知你应用为了强制pmls应用必需实现些逻辑口令来将用户和区别级别联系在响应EC_DVD_PARENTAL_LEVEL_CHANGE事件来允许或者禁止访问
保存和恢复书签
书签是个MSWebDVD对象内部数据结构它可以被用来创建个当前用户任务快照包含内容比如是当前碟片位置信息私人父层管理级别选择音频和子图流等等这个意思是让用户可以保存当前dvd状态可以下次接着从这个状态中继续观看
SaveBookmark思路方法允许用户保存他们碟片位置RestoreBookmark思路方法则允许同个用户可以接着上次储存位置接着观看
次只能储存个书签如果你了两次SaveBookmark那么第书签将会被第 2次书签覆盖书签对于计算机来说是特别在区别计算机中运行同样html页面然后RestoreBookmark将会恢复最近那次存储书签或者返回个以前没有存储标志
处理dvd通报事件
当某种事件发生了时候MSWebDVD对象会向应用发送个特定通报事件例如当DVD域改变了当遇到个新父层管理等等事件参数可以获得和事件有关附加信息信息和警告信息都是通过这种思路方法进行发送为了扑获到变化dvd事件通报在html SCRIPT中加入以下代码
<SCRIPT LANGUAGE="JScript" FOR=DVD EVENT="DVDNoty(EventCode, Param1, Param2)">
ProcessDVDEvent(EventCode, Param1, Param2)
</SCRIPT>
然后在脚本中定义事件代码和ProcessDVDEvent下面代码将展示它使用方法(你可以给你事件处理任何名称)
<SCRIPT LANGUAGE="JScript">
// DVD event codes are valued 257 through 283
var EC_DVDBASE = 256;
var EC_DVD_DOMAIN_CHANGE = (EC_DVDBASE + 1);
var EC_DVD_TITLE_CHANGE = (EC_DVDBASE + 2);
var EC_DVD_CHAPTER_START = (EC_DVDBASE + 3);
var EC_DVD_AUDIO_STREAM_CHANGE = (EC_DVDBASE + 4);
var EC_DVD_SUBPICTURE_STREAM_CHANGE = (EC_DVDBASE + 5);
var EC_DVD_ANGLE_CHANGE = (EC_DVDBASE + 6);
var EC_DVD_BUTTON_CHANGE = (EC_DVDBASE + 7);
var EC_DVD_VALID_UOPS_CHANGE = (EC_DVDBASE + 8);
var EC_DVD_STILL_ON = (EC_DVDBASE + 9);
var EC_DVD_STILL_OFF = (EC_DVDBASE + 10);
var EC_DVD_CURRENT_TIME = (EC_DVDBASE + 11); // not used by MSWebDVD
var EC_DVD_ERROR = (EC_DVDBASE + 12);
var EC_DVD_WARNING = (EC_DVDBASE + 13);
var EC_DVD_CHAPTER_AUTOSTOP = (EC_DVDBASE + 14);
var EC_DVD_NO_FP_PGC = (EC_DVDBASE + 15);
var EC_DVD_PLAYBACK_RATE_CHANGE = (EC_DVDBASE + 16);
var EC_DVD_PARENTAL_LEVEL_CHANGE = (EC_DVDBASE + 17);
var EC_DVD_PLAYBACK_STOPPED = (EC_DVDBASE + 18);
var EC_DVD_ANGLES_AVAILABLE = (EC_DVDBASE + 19);
var EC_DVD_PLAYPERIOD_AUTOSTOP = (EC_DVDBASE + 20);
var EC_DVD_BUTTON_AUTO_ACTIVATED = (EC_DVDBASE + 21);
var EC_DVD_CMD_START = (EC_DVDBASE + 22); // not used by MSWebDVD
var EC_DVD_CMD_END = (EC_DVDBASE + 23); // not used by MSWebDVD
var EC_DVD_DISC_EJECTED = (EC_DVDBASE + 24);
var EC_DVD_DISC_INSERTED = (EC_DVDBASE + 25);
var EC_DVD_CURRENT_HMSF_TIME = (EC_DVDBASE + 26);
var EC_DVD_KARAOKE_MODE = (EC_DVDBASE + 27);
var nCurDo;
var nCurParentalLevel;
function ProcessDVDEvent(EventCode, Param1, Param2)
{
switch (EventCode)
{
EC_DVD_DOMAIN_CHANGE:
nCurDo = Param1;
// do something
;
EC_DVD_PARENTAL_LEVEL_CHANGE:
nCurParentalLevel = Param1;
// do something
;
// handle any other events you are erested in
default:
;
}
}
</SCRIPT>
处理用户事件通告
当特定用户操作被允许或者被禁止时候MSWebDVD对象发送个uop通报信息给应用每个用户操作都有自己事件但它们都是个Boolean量仅仅用来标识操作现在被允许或者被禁止
对于每个你希望处理事件指定事件处理者展示了些代码读者可以参阅
<SCRIPT LANGUAGE="JScript" FOR=DVD EVENT="PlayForwards(bEnabled)">
PlayForwardsEventHandler(bEnabled)
</SCRIPT>
Now your handler method to respond appropriately to the event. Assume that the "button_Play" variable here is the id attribute of the "Play" button in your application.
function PlayForwardsEventHander(bEnabled)
{
(bEnabled true)
button_Play.disabled = false;

button_Play.disabled = true;
}
同步满足html要求视频
通过处理碟片事件编码事件个web应用就可以同步满足html视频了例如你可以使图像和文字在这个页面视频上指定点进行变化下面代码展示了种通过时间编码事件来同步jscipt
//DVDTriggerPos .gif' /> holds frame count for each trigger. Must be in ascending order.
//Use timecode2frames to convert timecodes (hh:mm:ss:ff) to total number of frames.
var DVDTriggerPos = Array(
timecode2frames("01:15:24:00"),
timecode2frames("01:23:02:00"));
//DVDTriggerProcs .gif' /> holds functions to be called at each trigger po d in DVDTimePos.
var DVDTriggerProcs = Array(
"showDogPic;",
"showCatPic;");
//DVDTriggerIndex keeps track of current trigger (it indexes DVDTriggerPos and DVDTriggerProcs).
var DVDTriggerIndex = 0;
//Handle DVD Events
function ProcessDVDEvent(EventCode, Param1, Param2) {
switch (EventCode) {
EC_DVD_CURRENT_HMSF_TIME:
(MSWebDVD.CurrentDo 4) { //Don't bother checking unless disc is playing.
(DVDTriggerIndex < DVDTimePos.length) { //Are there trigger pos left to check?
currentDVDTime = (MSWebDVD.DVDTimeCode2bstr(Param1));
(timecode2frames(currentDVDTime)>= DVDTriggerPos[DVDTimeIndex]) {
// trigger po has passed, execute the associated function
eval(DVDTriggerProcs[DVDTimeIndex]);
}
}
}
;
// handle other events
}
}
function timecode2frames(timeCode) {
(timeCode != "und") {
timeCode.sub(0,2)*108000
+ timeCode.sub(3,5)*1800
+ timeCode.sub(6,8)*30
+ timeCode.sub(9,11);
} {
0;
}
}
用LCIDs进行工作
LCID或者可以叫做“locale identer”它是个32位数据类型它是为了帮助我们鉴定区别地区区码语言这些值其中项就是“主语言标识”这可以用来鉴定基本区域语言例如英语西班牙语等
MSWebDVD要求个完整有效LCID作为下面两种思路方法输入参数: SelectDefaultAudioLanguage和SelectDefaultSubpictureLanguage这些可以是任何可被Windows识别有效LCID甚至也可以不被Windows识别(主机不必定支持本地机字体、键盘映射等)下面列表写出了些通用LCIDs以及Windows默认态不识别但对MSWebDVD有效非通用LCIDs该表不是完整LCIDs列表
些有效 LCIDs
Afrikaans 0x0436 Albanian 0x041c Arabic (Algeria) 0x1401
Arabic (Bahrain) 0x3c01 Arabic (Egypt) 0x0c01 Arabic (Iraq) 0x0801
Arabic (Jordan) 0x2c01 Arabic (Kuwait) 0x3401 Arabic (Lebanon) 0x3001
Arabic (Libya) 0x1001 Arabic (Morocco) 0x1801 Arabic (Oman) 0x2001
Arabic (Qatar) 0x4001 Arabic (Saudi Arabia) 0x0401 Arabic (Syria) 0x2801
Arabic (Tunisia) 0x1c01 Arabic (U.A.E.) 0x3801 Arabic (Yemen) 0x2401
Basque 0x042d Belarusian 0x0423 Bulgarian 0x0402
Catalan 0x0403 Chinese (Hong Kong) 0x0c04 Chinese (PRC) 0x0804
Chinese (Singapore) 0x1004 Chinese (Taiwan) 0x0404 Croatian 0x041a
Czech 0x0405 Danish 0x0406 Dutch (Belgian) 0x0813
Dutch (Standard) 0x0413 English (Australian) 0x0c09 English (Belize) 0x2809
English (Canadian) 0x1009 English (Caribbean) 0x2409 English (Ireland) 0x1809
English (Jamaica) 0x2009 English (New Zealand) 0x1409 English (South Africa) 0x1c09
English (Trinidad) 0x2c09 English (United Kingdom) 0x0809 English (United States) 0x0409
Estonian 0x0425 Faeroese 0x0438 Farsi 0x0429
Finnish 0x040b French (Belgian) 0x080c French (Canadian) 0x0c0c
French (Luxembourg) 0x140c French (Standard) 0x040c French (Swiss) 0x100c
German (Austrian) 0x0c07 German (Liechtenstein) 0x1407 German (Luxembourg) 0x1007
German (Standard) 0x0407 German (Swiss) 0x0807 Greek 0x0408
Hebrew 0x040d Hungarian 0x040e Icelandic 0x040f
Indonesian 0x0421 Italian (Standard) 0x0410 Italian (Swiss) 0x0810
Japanese 0x0411 Korean 0x0412 Korean (Johab) 0x0812
Latvian 0x0426 Lithuanian 0x0427 Malay (Malaysian) 0x043e
Malay (Brunei) 0x083e Norwegian (Bokmal) 0x0414 Norwegian (Nynorsk) 0x0814
Polish 0x0415 Portuguese (Brazilian) 0x0416 Portuguese (Standard) 0x0816
Romanian 0x0418 Russian 0x0419 Serbian (Cyrillic) 0x0c1a
Serbian (Latin) 0x081a Slovak 0x041b Slovenian 0x0424
Spanish (Argentina) 0x2c0a Spanish (Bolivia) 0x400a Spanish (Chile) 0x340a
Spanish (Colombia) 0x240a Spanish (Costa Rica) 0x140a Spanish (Dominican Republic) 0x1c0a
Spanish (Ecuador) 0x300a Spanish (El Salvador) 0x440a Spanish (Guatemala) 0x100a
Spanish (Honduras) 0x480a Spanish (Mexican) 0x080a Spanish (Modern Sort) 0x0c0a
Spanish (Nicaragua) 0x4c0a Spanish (Panama) 0x180a Spanish (Paraguay) 0x3c0a
Spanish (Peru) 0x280a Spanish (Puerto Rico) 0x500a Spanish (Traditional Sort) 0x040a
Spanish (Uruguay) 0x380a Spanish (Venezuela) 0x200a Swahili 0x0441
Swedish 0x041d Swedish (Finland) 0x081d Thai 0x041e
Turkish 0x041f Ukrainian 0x0422
些MSWebDVD思路方法和属性返回LCID可以指定那个标识在音轨或者字幕上是有效为了使用这个信息应用将需要从返回LCID中选择主语言标识为了达到这个目我们可以将iLCID和0x3ff进行按位和操作以下代码摘录演示了这种实现过程(主语言标识中包含了LCID中至少10位标记)
iPrimaryLang = iLCID & 0x3FF;
为了从主语言标识中获得人们可读GetLangFromLangID代码如下:
sLanguage = DVD.GetLangFromLangID(iPrimaryLang);
下面列表展示了LCID中主语言标识
Some Valid Primary Language IDs
Afrikaans 0x36 Albanian 0x1c Arabic 0x01 Basque 0x2d
Belarusian 0x23 Bulgarian 0x02 Catalan 0x03 Chinese 0x04
Croatian 0x1a Czech 0x05 Danish 0x06 Dutch 0x13
English 0x09 Estonian 0x25 Faeroese 0x38 Farsi 0x29
Finnish 0x0b French 0x0c German 0x07 Greek 0x08
Hebrew 0x0d Hungarian 0x0e Icelandic 0x0f Indonesian 0x21
Italian 0x10 Japanese 0x11 Korean 0x12 Latvian 0x26
Lithuanian 0x27 Malay 0x3e Norwegian 0x14 Polish 0x15
Portuguese 0x16 Romanian 0x18 Russian 0x19 Serbian 0x1a
Slovak 0x1b Slovenian 0x24 Spanish 0x0a Swahili 0x41
Swedish 0x1d Thai 0x1e Turkish 0x1f Ukrainian 0x22
播放卡拉ok碟片
卡拉ok碟片是dvd视频碟片它有着和dvd视频碟片相同导航结构歌曲是按照般节格式存放节可以合成个章它是基本播放单位
对于卡拉ok碟片和普通dvd碟片最大区别点就是音频流区别卡拉ok碟片是包含了所有多通道音频通常是Dolby AC-3通道0和1般包括背景音效2到5通道包含了嗓音合成等音频个卡拉ok应用可以控制音量和目喇叭可以控制混音声道
卡拉ok回放要求个音频解码器要求支持多通道卡拉ok混音信息解码器解码器必需支持dvd卡拉ok属性设置(AM_PROPERTY_DVDKARAOKE)
当DVD导航在碟片上检测到卡拉ok内容时候它会自动进入卡拉ok模式然后通知解码器上面 3个混音通道那个应该静音直到它们被应用打开
1. 决定它们内容和混音通道数
2. 提供个用户接口显示通道内容允许用户可以在任何时间进行混音通道开关
Dvd文字
Dvd 碟片尤其是卡拉ok碟片可能包含了个文字信息数据库来补充视频和音频内容象这样文字在卡拉ok碟片上有可能会包括歌曲标题艺术名记录标签等等内容这些文字可以被翻译成区别语言这些串是可选择碟片上不要求必需含有它们现在它们组织结构是通过dvd卷标逻辑层次近似镜像思路方法实现
有两种基本类型串:结构标识和内容标识这些类型用0x01到0x20值是结构标识它们是空数字码被用来标识逻辑结构表示内容串是属于那个逻辑结构这个结构非常符合dvd碟片内容逻辑结构:卷标标题章节等等剩下内容标识是被用来显示到用户界面信息
历史上, DVD 碟片上文本串在是唯这些碟片大多使用0x01 和 0x02 结构标示符以及0x30 类型内容但现在却不是如此 (1) 越来越多类型DVD-Video碟片包含文本串(2) 为了提供对碟片内容详尽描述这些串以更加复杂方式组织下例代码演示如何决定碟片上文本串语言块数目以及检索让用户设置语言可读串代码中串被添加于"TextLanguageList" HTML SELECT元素代码
function GetTextLanguages
{
//get the number of text blocks
var numLangs = DVD.GetDVDTextNumberOfLanguages;
var iLCID;
var iPrimaryLang;
var sLanguage;
var oOption;
for (j = 0; j < numLangs; j)
{
//get the locale identier for the language block
iLCID = DVD.GetDVDTextLanguageLCID(j);
//get the primary language ID from the LCID
iPrimaryLang = iLCID & 0x3FF;
//get the human-readable from the primary language ID
sLanguage = DVD.GetLangFromLangID(iPrimaryLang);
//add it to the SELECT element _disibledevent=> oOption.text = sLanguage;
document.all.TextLanguageList.add(oOption);
}
} //end function GetTextStrings
下列检测代码演示如何枚举串和检查文本串类型结果在名为"myTextArea"HTML TEXTAREA 元素中故可以看到数字串类型如何被用于组织内容串会创建自己数据结构来包含串或以向用户显示串
// iLanguage is the 0-based index for the language block
function GetTextStrings(iLanguage)
{
var numStrings, Type, j;
numStrings = DVD.GetDVDTextNumberOfStrings(iLanguage);
for( j = 0; j < numStrings; j)
{
Type = DVD.GetDVDTextStringType(iLanguage, j);
(Type > 0x20) //there is actually some text to read here
{
myTextArea.value (Type + ": " + DVD.GetDVDTextString(iLanguage, j) + "\n");
}
// It´s a node indicating what level of the volume structure
// the following s will apply to
{
myTextArea.value (Type + "\n");
}
}
} //end function GetTextStrings
dvd文本串类型
这个表格列出了dvd文本串类型子集在0x20以下串都是内容大部分歌曲名称和标题都是0x30
结构标示符
Volume 0x01 指示串属于DVD 卷
Title 0x02 标题
ParentalID 0x03 指示串属于特定 父ID.
Chapter 0x04 指示串属于章
Cell 0x05 指示串属于单元 (电影个场景)
流标示符
Audio 0x10 指示串属于音频流
Subpicture 0x11 指示串属于子图流
Angle 0x12 指示串属于角块
音频通道标示符
Channel 0x20 指示串属于音频留个通道
通用内容串
Name 0x30 标题名、章名、歌曲名通用标示符
Comments 0x31 标题、章、歌曲通用内容
标题内容串
Series 0x38 标题、章、歌曲附信息
Movie 0x39 电影标题或章附加信息
Video 0x3a 视频标题或章附加信息
Album 0x3b 相册标题或章附加信息
Song 0x3c 歌曲标题或章附加信息
Other 0x3f 其它标题或章附加信息
第 2标题内容串
Series 0x40 标题、章、歌曲附加信息
Movie 0x41 电影标题或章附加信息
Video 0x42 视频标题或章附加信息
Album 0x43 相册标题或章附加信息
Song 0x44 歌曲标题或章附加信息.
Other 0x45 其它标题或章附加信息
原始内容串
Series 0x48 标题、章、歌曲附加信息
Movie 0x49 电影标题或章附加信息
Video 0x4a 视频标题或章附加信息
Album 0x4b 相册标题或章附加信息
Song 0x4c 歌曲标题或章附加信息.
Other 0x4f 其它标题或章附加信息
其它信息内容串
Other Scene 0x50 电影标题或章可选场景附加信息
Other Cut 0x51 电影标题或章可选剪辑附加信息
Other Take 0x52 电影标题或章可选画面附加信息
Tags:  cs脚本 当前的脚本发生错误 事务脚本驱动开发 sql脚本开发

延伸阅读

最新评论

发表评论