[转]用JavaScript js 控制 Media Player 流媒体
转自:http://blog.csdn.net/IBM_hoojo/article/details/5658181
?
?
- 在Web页中嵌入Media?Player的方法比较简单,只要用HTML中的可以了,如下所示。???
- CLASSID="CLSID:22D6f312-B0F6-11D0-94AB-0080C74C7E95"???
- CODEBASE="http://activex.microsoft.com/activex/controls/mplayer/en/???
- nsmp2inf.cab#Version=6,4,5,715"???
- STANDBY="Loading?Microsoft??Windows?Media??Player?components..."???
- TYPE="application/x-oleobject">???
- 其中ID是对象的名称,当用户在JavaScript要对Media?Player进行控制时可以用该对象的名称WMPlay进行访问。CODEBASE指明当用户的浏览器中没有安装Player控件时可以从该URL指定的位置去获取。???
- 当然在建立Player对象时也可以用来为其指定参数。??
- 其中"FileName"参数表示Media?Player要播放的文件活或流。"ShowControls"表示在播放时是否显示控制条。Media?Player的参数很多,我们在此不再一一详述。读者如果需要了解更详细的内容可以参考Media?Player?SDK中的相关部分。???
- 如果用户需要对Media?Player进行控制可以用JavaScript进行控制。???
- ??
- 在这个例子中,Media?Player嵌入在Web页面中,在Media?Player右边有一些按钮,利用这些按钮用户可以控制Media?Player的播放活动。这些按钮的HTML代码如下:???
- OnClick="controlType(false)">???
- Onclick="controlType(true)">???
- OnClick="displaySize(1)">???
- Onclick="displaySize(2)">???
- Onclick="displaySize(0)">???
- Onclick="PlayClick()">???
- Onclick="StopClick()">???
- ??
- 从这个例子可以看出当用户单即其中的某个按钮时,它对应的OnClick函数将被调用。在JavaScript函数中,可以直接用WMPlay来控制播放器的活动,比如开始播放,停止播放或占停播放,以及放大缩小等。???
- 除了可以用动作比如鼠标的动作来对嵌入的Media?Player进行控制外,还可以利用事件来对其进行控制。Microsoft?Windows?Media?Player?支持的事件很多,有普通的鼠标事件,比如鼠标的单击、双击、鼠标的移动、鼠标键的按下与松开等,也有一些是Media?Player特有的事件。与流播放有直接关系的事件有:OpenStateChange,PlayStateChange,Buffering,MarkerHit,ScriptCommand等。下面我们对这几个重要的事件做简单地介绍。???
- 1?OpenStateChange?事件???
- OpenStateChange?事件表示Player的状态已经发生了改变。Media?Player的打开状态有:???
- 0?表示流已经关闭(nsClosed)???
- 1?表示正在装入ASX文件(nsLoadingASX)???
- 2?表示正在装入NSC文件(nsLoadingNSC)???
- 3?表示正在寻找Media?Server?(nsLocating)???
- 4?表示正在与Media?Server建立连接(nsConnecting)???
- 5?表示正在打开或侦听流信息(nsOpening)???
- 6?表示流信息已经打开(nsOpen)???
- ??
- 其中MediaPlayer是在中定义的Media?Player对象时的名字。???
- ??
- 2?PlayStateChange?事件???
- PlayStateChange?事件表示Media?Player的播放状态已经改变,Media?Player可能的状态有:???
- 0?播放已经停止(mpStopped)???
- 1?播放暂停(mpPaused?)???
- 2?正在播放(mpPlaying)???
- 3?正在等待流开始(mpWaiting)???
- 4?向前搜索(mpScanForward)???
- 5?向后搜索(mpScanReverse)???
- 6?向前跳跃(mpSkipForward)???
- 7?向后跳跃(mpSkipReverse)???
- 8?流已经关闭(mpClosed)???
- 用JavaScript处理该事件的方法为:???
- ??
- 3?Buffering?事件???
- Buffering事件表示Media?Player正在缓冲数据准备播放。在进行流播放之前,Media?Player必须要缓冲一定数量的数据之后才开始播放,Buffering事件反映了Player缓冲数据的状况。用JavaScript处理Buffering事件的方法为:???
- 其中bStart为一个布尔变量,当它为TRUE时表示缓冲正在进行,反之表示缓冲已经结束。???
- ??
- 4?ScriptCommand?事件???
- ScriptCommand事件表示Media?Player接收到了Script?命令,这时用户可以利用对接收到Script命令进行分析以决定采取相应的处理。我们知道利用Media?Tools的ASF?Indexer工具可以给流添加Script命令,当流播放器Player接收到这些Script?命令时会激活这个事件处理方法,于是用户可以在事件处理方法中对Script命令进行处理。处理ScriptCommand的方法是:???
- 其中sType是Script命令的类型,Script命令的类型有URL,TEXT,EVENT等,用户可以根据Script命令类型的不同做不同的处理。比如,如果是URL命令,我们可以在指定的帧内打开sParam中指定的页面。???
- ??
- 5?MarkHit?事件???
- MarkerHit事件同ScritpCommand事件一样,当媒体播放器在ASF流中遇到标记时会激活该事件,用户利用该事件可以知道当前的标记是第几个标记。MarkerHit事件的处理方法是:???
- 当然,除了支持事件处理之外,做为一个ActiveX对象,Media?Player还有很多的属性(Property)和方法(Method)可以供Web页使用。比如用MediaPlayer.MarkerCount?属性可以知道在ASF流中到底有多少个标记;利用MediaPlayer.?CurrentPosition属性可以知道当前播放位置的时间等等。至于Media?Player对象的方法我们在前面已经使用了很多,比如Play(),?Pause()等均是Media?Player的方法。由于Media?Player对象的属性和方法太多,我们不可能在此一一介绍,而只是对几个较为重要的事件处理做了一定的介绍。用户在使用时可以参考Media?Player?SDK的帮助文档以获取更多的信息。???
- 本文对Media?Service的客户应用程序Media?Player的使用,特别是在Web页中的使用做了简单的介绍。作为一个通用的媒体播放器,它还有很多的功能这里没有介绍,要了解一个软件的功能,最好的方法就是使用它。用户如果感兴趣可以从www.windowsmedia.com上去免费下载。???
- ??
- 播放:?MediaPlayer.Play()???
- 暂停:?MediaPlayer.Pause()???
- 定位:?MediaPlayer.SetCurrentEntry(lWhichEntry)???
- ??????MediaPlayer.Next()???
- ??????MediaPlayer.Previous()???
- 循环:?MediaPlayer.PlayCount?=?0???
- 0:the?clip?plays?repeatedly???
- 1:once???
- 停止:?MediaPlayer.Stop()???
- ??
- AllowChangeDisplaySize?返回或设置最终用户是否能设置显示尺寸(逻辑型)???
- AllowScan?返回或设置是否允许扫描(逻辑型)???
- AnimationAtStart?返回或设置控件开始播放之前是否先播放一个动画序列(逻辑型)???
- AudioStream?返回或设置音频流的编号(用于多音频流的剪辑,默认为-1)(长整型)???
- AutoRewind?返回或设置媒体文件播放完毕后是否自动回绕(逻辑型)???
- AutoSize?返回或设置是否自动调整控件大小来适应载入的媒体(逻辑型)???
- AutoStart?返回或设置在载入媒体文件之后是否自动开始播放(逻辑型)???
- Balance?返回或设置指定立体声媒体文件的播放声道(-10000为左声道,10000为右声道,0为立体声)(长整型)???
- Bandwidth?返回或设置当前文件的带宽(长整型)???
- BaseURL?返回基本的?HTTP?URL(字符串)???
- BufferingCount?返回媒体文件回放时缓冲的总时间(长整型)???
- BufferingProgress?返回缓冲完成的百分比(长整型)???
- BufferingTime?返回缓冲的时间(双精度型)???
- CanPreview?返回或设置当前显示的剪辑是能否被预览(逻辑型)???
- CanScan?返回或设置当前文件是否支持快进或快退(逻辑型)???
- CanSeek?返回或设置当前文件是否能搜索并定位到某个时间(逻辑型)???
- CanSeekToMarkers?返回或设置文件是否支持搜索到标签(逻辑型)???
- CaptioningID?返回在标题中显示的帧或控件的名称(字符串)???
- ChannelDescription?返回电台的描述(字符串)???
- ChannelName?返回电台的名称(字符串)???
- ChannelURL?返回电台的元文件的位置(字符串)???
- ClickToPlay?返回或设置是否可以通过点击图像暂停或播放剪辑(逻辑型)???
- ClientID?返回客户端唯一的标识符(字符串)???
- CodecCount?返回文件使用的可安装的?codecs?的个数(长整型)???
- ContactAddress?返回电台的联系地址(字符串)???
- ContactEmail?返回电台的联系电子邮件地址(字符串)???
- ContactPhone?返回电台的联系电话(字符串)???
- CreationDate?返回剪辑的创建日期(日期型)???
- CurrentMarker?返回或设置当前书签号码(长整型)???
- CurrentPosition?返回或设置剪辑的当前位置(双精度型)???
- CursorType?返回或设置指针类型(长整型)???
- DefaultFrame?返回或设置控件的默认目标?Http?帧(字符串)???
- DisplayBackColor?返回或设置显示面板的背景色(OLE_COLOR?值)???
- DisplayForeColor?返回或设置显示面板的前景色(OLE_COLOR?值)???
- DisplayMode?返回或设置显示面板是否用秒或帧的形式显示当前位置(MPDisplayModeConstants?值)???
- DisplaySize?返回或设置图像显示窗口的大小(MPDisplaySizeConstant?值)???
- Duration?返回或设置剪辑剪辑的播放时间(双精度型)???
- EnableContextMenu?返回或设置是否允许使用上下文菜单(逻辑型)???
- Enabled?返回或设置控件是否可用(逻辑型)???
- EnableFullScreenControls?返回或设置全屏幕控制是否可用(逻辑型)???
- EnablePositionControls?返回或设置位置控制是否可用(逻辑型)???
- EnableTracker?返回或设置搜索栏控制是否可用(逻辑型)???
- ErrorCode?返回当前错误代码(长整型)???
- ErrorCorrection?返回当前剪辑的错误修正类型(长整型)???
- ErrorDescription?返回当前错误的描述(字符串)???
- FileName?返回或设置要播放的剪辑的文件名称(字符串)???
- HasError?返回控件是否发生错误(逻辑型)???
- HasMultipleItems?返回或设置控件是否包含某些多重项目的内容(逻辑型)???
- ImageSourceHeight?返回或设置当前剪辑的原始图像高度(长整型)???
- ImageSourceWidth?返回或设置当前剪辑的原始图像宽度(长整型)???
- InvokeURLs?返回或设置?URL?是否自动发送请求(逻辑型)???
- IsBroadcast?返回或设置源是否进行广播(逻辑型)???
- IsDurationValid?返回或设置持续时间值是否有效(逻辑型)???
- Language?返回或设置用于本地化语言支持的当前区域语言(长整型)???
- LostPackets?返回丢失的数据包数量(长整型)???
- MarkerCount?返回文件书签的数量(长整型)???
- Mute?返回或设置控件是否播放声音(逻辑型)???
- OpenState?返回控件的内容源状态(长整型)???
- PlayCount?返回或设置一个剪辑播放的次数(长整型)???
- PlayState?返回控件的当前操作状态(长整型)???
- PreviewMode?返回或设置控件是否处在预览模式(逻辑型)???
- Rate?返回或设置回放帧频(双精度型)???
- ReadyState?返回控件是否准备就绪(ReadyStateConstant?值)???
- ReceivedPackets?返回已接收到的数据包的数量(长整型)???
- ReceptionQuality?返回最后?30?秒接收到的数据包的百分比(长整型)???
- RecoveredPackets?返回已转换的数据包的数量(长整型)???
- SAMIFileName?返回或设置?closed-captioning?文件名(字符串)???
- SAMILang?返回或设置?closed?captioning?语言(字符串)???
- SAMIStyle?返回或设置?closed?captioning?风格(字符串)???
- SelectionEnd?返回或设置流的结束位置(双精度型)???
- SelectionStart?返回或设置流的起始位置(双精度型)???
- SendErrorEvents?返回或设置控件是否发送错误事件(逻辑型)???
- SendKeyboardEvents?返回或设置控件是否发送键盘事件(逻辑型)???
- SendMouseClickEvents?返回或设置控件是否发送鼠标单击事件(逻辑型)???
- SendMouseMoveEvents?返回或设置控件是否发送鼠标移动事件(逻辑型)???
- SendOpenStateChangeEvents?返回或设置控件是否发送打开状态改变事件(逻辑型)???
- SendPlayStateChangeEvents?返回或设置控件是否发送播放状态改变事件(逻辑型)???
- SendWarningEvents?返回或设置控件是否发送警告事件(逻辑型)???
- ShowAudioControls?返回或设置是否显示音频控制(逻辑型)???
- ShowCaptioning?返回或设置是否显示字幕(逻辑型)???
- ShowControls?返回或设置控制面板是否可见(逻辑型)???
- ShowDisplay?返回或设置是否显示显示面板(逻辑型)???
- ShowGotoBar?返回或设置是否显示跳转栏(逻辑型)???
- ShowPositionControls?返回或设置是否显示位置控制(逻辑型)???
- ShowStatusBar?返回或设置是否显示状态栏(逻辑型)???
- ShowTracker?返回或设置是否显示搜索栏(逻辑型)???
- SourceLink?返回内容文件的路径(字符串)???
- SourceProtocol?返回用于接收数据的协议(长整型)???
- StreamCount?返回媒体帧的数量(长整型)???
- TransparentAtStart?返回或设置在开始播放之前和停止之后控件是否透明(逻辑型)???
- VideoBorder3D?返回或设置视频边框是否显示为?3D?效果(逻辑型)???
- VideoBorderColor?返回或设置视频边框的颜色(OLE_颜色)???
- VideoBorderWidth?返回或设置视频边框的宽度(长整型)???
- Volume?返回或设置音量(长整型)???
- ??
- Mediaplayer属性和方法???
- 属性/方法名:说明:???
- [基本属性]? ???
- URL:String;?指定媒体位置,本机或网络地址???
- uiMode:String;?播放器界面模式,可为Full,?Mini,?None,?Invisible???
- playState:integer;?播放状态,1=停止,2=暂停,3=播放,6=正在缓冲,9=正在连接,10=准备就绪???
- enableContextMenu:Boolean;?启用/禁用右键菜单???
- fullScreen:boolean;?是否全屏显示???
- [controls]?wmp.controls?//播放器基本控制???
- controls.play;?播放???
- controls.pause;?暂停???
- controls.stop;?停止???
- controls.currentPosition:double;?当前进度???
- controls.currentPositionString:string;?当前进度,字符串格式。如“00:23”???
- controls.fastForward;?快进???
- controls.fastReverse;?快退???
- controls.next;?下一曲???
- controls.previous;?上一曲???
- [settings]?wmp.settings?//播放器基本设置???
- settings.volume:integer;?音量,0-100???
- settings.autoStart:Boolean;?是否自动播放???
- settings.mute:Boolean;?是否静音???
- settings.playCount:integer;?播放次数???
- [currentMedia]?wmp.currentMedia?//当前媒体属性???
- currentMedia.duration:double;?媒体总长度???
- currentMedia.durationString:string;?媒体总长度,字符串格式。如“03:24”???
- currentMedia.getItemInfo(const?string);?获取当前媒体信息"Title"=媒体标题,"Author"=艺术家,"Copyright"=版权信息,"Description"=媒体内容描述,"Duration"=持续时间(秒),"FileSize"=文件大小,"FileType"=文件类型,"sourceURL"=原始地址???
- currentMedia.setItemInfo(const?string);?通过属性名设置媒体信息???
- currentMedia.name:string;?同?currentMedia.getItemInfo("Title")???
- [currentPlaylist]?wmp.currentPlaylist?//当前播放列表属性???
- currentPlaylist.count:integer;?当前播放列表所包含媒体数???
- currentPlaylist.Item[integer];?获取或设置指定项目媒体信息,其子属性同wmp.currentMedia ?