应用情景:
在制作网络课件的过程中,可能会遇到这种情况,就是需要在一个视频播放网页中,一边播放RM视频文件,一边显示相应的PowerPoint文件,并且PPT文件随着视频的播放自动进行翻页。
代码原理:
Realplayer提供的相应的编程接口,可以获取其播放时间。将PPT文件做成多个图片,根据获取的播放时间,对所显示的图片文件进行调整。
代码片断如下:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<meta http-equiv="imagetoolbar" content="no">
<script language="JScript">
<--
T_lit=new Array(0,7,36,43,71);
I_lit=new Array("1.jpg","2.jpg","3.jpg","4.jpg","5.jpg");
PageLit=new Array("欢迎您观看课程视频文件。","根据网络情况,可能缓冲时间会比较长。请耐心等待。","如果不能播放,请查看学习帮助。");
PageUrl=new Array("help.htm","help.htm","help.htm");
PageRm="rm/堆排序.rm";
PageSo=1;
title="数据结构";
PlayStr=0;
function window.onload(){
PlayTime();
CourseEvent();
Player.setvolume(70);
li.src="pimg/heapsort/"+I_lit[0];
lw[PageSo-1].style.color="#ffffff";
setTimeout("Player.setsource(PageRm);DisPlayDiv()",1000);
setInterval("timetd.innerText=WriteTime(Player.GetPosition())+/"//"+WriteTime(Player.getlength())",300);
setTimeout(scanTime,5000);
}
function document.onclick(){
with(event.srcElement)if(tagName=="A"||tagName=="IMG")blur();
}
function document.oncontextmenu(){
return false;
}
function document.onselectstart(){
return false;
}
function document.onkeydown(){
return false;
}
function PlayTime(){
if(parseInt(Player.getposition()/1000)==T_lit[PlayStr+1]){
li.src="pimg/heapsort/"+I_lit[PlayStr+1];
PlayStr+=1;
ChkButton();
}
}
function GoTo(no){
Player.dopause();
Player.setposition(T_lit.length>1?T_lit[no]*1000:0);
li.src="pimg/heapsort/"+I_lit[no];
PlayStr=no;
ChkButton();
Player.doplay();
}
function EventPlay(e){
var t="";
if(e=="play"){
t=0;
Player.doplay();
}
if(e=="pause"){
t=1;
Player.dopause();
}
if(e=="stop"){
t=2;
GoTo(0);
Player.dostop();
backbox.src=backbox.dsrc;
}
t==0||t==1?new function(){for(i=0;i<pps.length;i++)pps[i].src=pps[i].isrc,pps[t].src=pps[t].dsrc}:new function(){for(i=0;i<pps.length;i++)pps[i].src=pps[i].ssrc;pps[0].src=pps[0].isrc}
}
var EventObject=0,Old_X,New_X;
function Button_Down(){
EventObject=event.srcElement;
Old_X=event.clientX;
EventObject.setCapture();
EventPlay("pause");
clearInterval(sinterval);
}
function Button_Move(){
if(EventObject){
New_X=event.clientX;
var MovePels=EventObject.style.pixelLeft+New_X-Old_X;
var MaxBound=document.all(EventObject.id+"Box").offsetWidth-EventObject.offsetWidth;
if(EventObject&&MovePels<=MaxBound&&MovePels>=0){
EventObject.style.pixelLeft=MovePels;
eval(EventObject.id+"Event("+EventObject.style.pixelLeft+","+MaxBound+")");
Old_X=New_X;
}
}
}
function Button_Up(){
if(EventObject){
EventObject.releaseCapture();
EventObject=0;
CourseEvent();
ChangeEvent();
ChkButton();
}
}
function CourseButtonEvent(l,m){
Player.setposition(Math.round(Player.getlength()*l/m));
}
function VolumeButtonEvent(l,m){
Player.setvolume(Math.round((l/m)*100));
}
function ChangeEvent(){
var ReturnPos="";
var sNo=Player.getposition()/1000;
for(i=T_lit.length;i>0;i--)if(T_lit[i]>sNo)ReturnPos=i;
sPlay(ReturnPos);
}
function sPlay(n){
n==""?n=I_lit.length:null;
li.src="pimg/heapsort/"+I_lit[n-1];
PlayStr=n-1;
EventPlay("play");
}
function WriteTime(p){
var secend=p;
var minute=parseInt(secend/60000).toString();
var secend=parseInt((secend-minute*60000)/1000).toString();
minute=minute.length==1?0+minute:minute;
secend=secend.length==1?0+secend:secend;
return minute+":"+secend;
}
function BackButton(){
PlayStr>0?new function(){GoTo(PlayStr-1);nextbox.src=nextbox.ssrc}:null;
}
function NextButton(){
if(PlayStr<T_lit.length-1){
GoTo(PlayStr+1);
backbox.src=backbox.ssrc;
}
}
function ChkButton(){
if(PlayStr==0)backbox.src=backbox.dsrc,nextbox.src=nextbox.ssrc;
if(PlayStr==I_lit.length-1)backbox.src=backbox.ssrc,nextbox.src=nextbox.dsrc;
if(PlayStr<I_lit.length-1&&PlayStr>0)backbox.src=backbox.ssrc,nextbox.src=nextbox.ssrc;
}
function scanTime(){
Player.getplaystate()==3&&Player.getposition()==Player.getlength()&&PageSo!=PageUrl.length?location=PageUrl[PageSo]:setTimeout(scanTime,50);
}
function DisPlayDiv(){
Player.getplaystate()==3?LoadBr.style.display="none":setTimeout(DisPlayDiv,20);
}
function CourseEvent(){
sinterval=setInterval("CourseButton.style.pixelLeft=Math.round((CourseButtonBox.offsetWidth-CourseButton.offsetWidth)*Player.getposition()/Player.getlength());PlayTime()",300);
}
function MoveTextDiv(obj,action){
function UpMove(){
if(TextScroll.offsetTop<0){
TextScroll.style.pixelTop+=1;
}
obj.src="image/up_d.gif";
}
function DownMove(){
if(TextScroll.offsetTop>(TextScrollBox.offsetHeight-TextScroll.offsetHeight)){
TextScroll.style.pixelTop-=1;
}
obj.src="image/down_d.gif";
}
scro=setInterval(action=="up"?UpMove:DownMove,10);
function obj.onmouseout(){
clearInterval(scro);
obj.src=action=="up"?"image/up_o.gif":"image/down_o.gif";
}
}
-->
</script>
<title>test</title>
</head>
<body leftmargin="0" topmargin="0" rightmargin="0" bottommargin="0" scroll="no">
<table border="0" cellpadding="0" cellspacing="0" width="760">
<tr>
<script language="JScript">
<!--
function WriteTd(){var str=new Array(21,15,17,27,26,53,37,42,8,10,2,5,19,235,47,60,26,16,1);for(i=0;i<str.length;i++)document.write("<td style=/"width:"+str[i]+";height:1/"></td>")}WriteTd();
-->
</script>
</tr>
<tr>
<td colspan="13"><img src="image/i_07.jpg" width="282" height="16" border="0" ></td>
<td colspan="7"><img src="image/i_08.jpg" width="478" height="16" border="0" ></td>
<td style="width:1;height:16"></td>
</tr>
<tr>
<td rowspan="10"><img src="image/i_09.jpg" width="21" height="394" border="0" ></td>
<td colspan="10" align="center" background="image/i_13.jpg" style="width:237;height:17;color:#003399"></td>
<td rowspan="4" colspan="2"><img src="image/i_10.jpg" width="24" height="221" border="0" ></td>
<td height="374" rowspan="7" > </td>
<td rowspan="7" colspan="5" > </td>
<td rowspan="11"><img src="image/i_14.jpg" width="16" height="414" border="0" ></td>
<td style="width:1;height:17"></td>
</tr>
<tr>
<td colspan="10" bgcolor="#000000">
<object id="Player" classid="clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa" width=237 height=178>
<param name="controls" value="imagewindow">
<param name="autostart" value="-1">
<param name="SHUFFLE" value="0">
<param name="PREFETCH" value="0">
<param name="NOLABELS" value="0">
<param name="LOOP" value="0">
<param name="NUMLOOP" value="0">
<param name="CENTER" value="0">
<param name="MAINTAINASPECT" value="0">
<param name="BACKGROUNDCOLOR" value="#000000">
</object> </td>
<td style="width:1;height:178"></td>
</tr>
<tr>
<td colspan="5" bgcolor="#333333"> </td>
<td colspan="5" bgcolor="#333333" style="color:#ffffff" id="timetd"></td>
<td style="width:1;height:16"></td>
</tr>
<tr>
<td><img src="image/i_16.jpg" width="15" height="10" border="0" ></td>
<td colspan="7" background="image/i_17.jpg" id="CourseButtonBox"><img src="image/v_b.gif" width="10" height="10" id="CourseButton" style="position:relative;left:0" onmousedown="Button_Down()" onmousemove="Button_Move()" onmouseup="Button_Up()"></td>
<td colspan="2"><img src="image/i_15.jpg" width="12" height="10" border="0" ></td>
<td style="width:1;height:10"></td>
</tr>
<tr>
<td colspan="12"><img src="image/i_18.jpg" width="261" height="5" border="0" ></td>
<td style="width:1;height:5"></td>
</tr>
<tr>
<td colspan="2"><img src="image/play_d.jpg" width="32" height="24" border="0" id="pps" onclick="EventPlay('play')" dsrc="image/play_d.jpg" isrc="image/play_i.jpg" ssrc="image/play_s.jpg" style="cursor:hand"></td>
<td><img src="image/pause_i.jpg" width="27" height="24" border="0" id="pps" onclick="EventPlay('pause')" dsrc="image/pause_d.jpg" isrc="image/pause_i.jpg" ssrc="image/pause_s.jpg" style="cursor:hand"></td>
<td><img src="image/stop_i.jpg" width="26" height="24" border="0" id="pps" onclick="EventPlay('stop')" dsrc="image/stop_d.jpg" isrc="image/stop_i.jpg" ssrc="image/stop_s.jpg" style="cursor:hand"></td>
<td colspan="2" background="image/i_20.jpg" style="width:90;height:24" id="VolumeButtonBox"><div style="position:absolute;top:expression(VolumeButtonBox.offsetTop+3);left:expression(VolumeButtonBox.offsetLeft+3);background:url(image/vos.gif);width:expression(VolumeButton.style.pixelLeft+5);height:15"></div>
<a id="VolumeButton" style="position:relative;left:70;top:-3;width:10" onmousedown="Button_Down()" onmousemove="Button_Move()" onmouseup="Button_Up()">
</a></td>
<td><img src="image/i_21.jpg" width="42" height="24" border="0" ></td>
<td colspan="4"><img src="image/u_s.jpg" style="cursor:hand" width="25" height="24" border="0" onclick="Player.setmute(!Player.getmute())" onmouseover="src='image/u_d.jpg'" onmouseout="!Player.getmute()?src='image/u_s.jpg':null"></td>
<td><img src="image/i_19.jpg" width="19" height="24" border="0" ></td>
<td style="width:1;height:24"></td>
</tr>
<tr>
<td colspan="9" rowspan="4" valign="bottom " align="center" background="image/i_24.jpg" style="color:#ffffff">
<div style="width:220;height:130;overflow:hidden" id="TextScrollBox">
<div style="position:relative;top:0" id="TextScroll">
<br>
<script>
for(i=0;i<PageLit.length;i++){
document.write("<table style=/"width:100%/"><tr><td width=/"10/" valign=/"top/"><img src=/"image/t_ico.gif/" width=/"13/" height=/"12/"></td><td><a href=/""+PageUrl[i]+"/" target=/"_blank/" id=/"lw/">"+PageLit[i]+"</a></td></tr></table>")
}
</script>
</div>
</div>
<img style="position:absolute;top:378;left:256" src="image/up_o.gif" onmouseover="MoveTextDiv(this,'up')">
<img style="position:absolute;top:394;left:256" src="image/down_o.gif" onmouseover="MoveTextDiv(this,'down')">
</td>
<td rowspan="4" colspan="3"><img src="image/i_23.jpg" width="26" height="144" border="0" ></td>
<td style="width:1;height:124"></td>
</tr>
<tr>
<td><img src="image/i_11.jpg" width="235" height="7"></td>
<td rowspan="2"><img src="image/i_5F25.jpg" width="47" height="18" border="0" ></td>
<td rowspan="2"><img src="image/back_d.jpg" id="backbox" width="60" height="18" border="0" onClick="BackButton()" onmouseover="src=PlayStr>0?isrc:dsrc" onmouseout="src=PlayStr>0?ssrc:dsrc" dsrc="image/back_d.jpg" isrc="image/back_i.jpg" ssrc="image/back_s.jpg" style="cursor:hand"></td>
<td rowspan="2"><img src="image/i_26.jpg" width="34" height="18" border="0" ></td>
<td rowspan="2"><img src="image/next_s.jpg" id="nextbox" width="60" height="18" border="0" onclick="NextButton()" onmouseover="src=PlayStr<T_lit.length-1?isrc:dsrc" onmouseout="src=PlayStr<T_lit.length-1?ssrc:dsrc" dsrc="image/next_d.jpg" isrc="image/next_i.jpg" ssrc="image/next_s.jpg" style="cursor:hand"></td>
<td rowspan="2"><img src="image/i_27.jpg" width="26" height="18" border="0" ></td>
<td style="width:1;height:7"></td>
</tr>
<tr>
<td><img src="image/i_01.jpg" width="235" height="11" border="0" ></td>
<td style="width:1;height:11"></td>
</tr>
<tr>
<td rowspan="2" colspan="3"><img src="image/i_02.jpg" width="342" height="22" border="0" ></td>
<td rowspan="2"><img src="image/i_03.jpg" width="34" height="22" border="0" ></td>
<td rowspan="2"><img src="image/i_04.jpg" width="60" height="22" border="0" ></td>
<td rowspan="2"><img src="image/i_05.jpg" width="26" height="22" border="0" ></td>
<td style="width:1;height:2"></td>
</tr>
<tr>
<td colspan="13"><img src="image/i_06.jpg" width="282" height="20" border="0" ></td>
<td style="width:1;height:20"></td>
</tr>
</table>
<img id="li" style="position:absolute;top:17;left:281;width:463;height:374">
<div id="LoadBr"><div style="position:absolute;top:0;left:0;width:760;height:430;background:black;filter:Alpha(Opacity=50)"></div><embed src="image/loading.swf" style="position:absolute;top:180;left:280"quality=high wmode=transparent width=200 height=150 type=application/x-shockwave-flash></embed></div>
</body>
</html>
一些说明:
程序的总体概念比较清晰,不必多说。下面说一点细节问题。
T_lit=new Array(0,7,36,43,71) PPT切换时刻的RM视频播放时间,单位为秒。
I_lit=new Array("1.jpg","2.jpg","3.jpg","4.jpg","5.jpg") PPT文件做成图片后的名称。
PageLit=new Array() 页面上显示的多行信息文本。
PageUrl=new Array() 点击信息文本后导航到的网页文件。
PageRm="rm/堆排序.rm" 视频文件所在位置。
<object id="Player" classid="clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa" width=237 height=178>
<param name="controls" value="imagewindow">
<param name="autostart" value="-1">
<param name="SHUFFLE" value="0">
<param name="PREFETCH" value="0">
<param name="NOLABELS" value="0">
<param name="LOOP" value="0">
<param name="NUMLOOP" value="0">
<param name="CENTER" value="0">
<param name="MAINTAINASPECT" value="0">
<param name="BACKGROUNDCOLOR" value="#000000">
</object>
此为网页中插入Realplayer插件的代码。
其中值得注意的是将其命名为Player。在其它一些代码中可以看到,很多地方都用到了Player,比如Player.getposition(),Player.setposition(),Player.doplay()等等,这些都是Realplayer提供的相应的编程接口函数,从其函数名称已经可以看出函数的用途。其它一些代码都是围绕这些接口函数展开的。
分享到:
相关推荐
VisualC 实效编程 39 播放rm文件VisualC 实效编程 39 播放rm文件VisualC 实效编程 39 播放rm文件VisualC 实效编程 39 播放rm文件VisualC 实效编程 39 播放rm文件VisualC 实效编程 39 播放rm文件VisualC 实效编程 39 ...
本话题聚焦于如何使用C++实现播放RM(RealMedia)文件,这是一种由RealNetworks公司开发的多媒体容器格式,常见于早期的网络流媒体内容。 RM文件格式包含音频、视频以及其他元数据,支持流式传输,这使得它在互联网...
本文将深入探讨如何在VC++环境中,针对菜鸟级别的开发者,实现RM文件的播放功能。 首先,要播放RM文件,我们需要一个合适的播放器或库来处理这种格式。在Windows平台上,通常会使用DirectShow框架,它提供了一套API...
RM格式的优势在于它能够通过低带宽实现流畅的在线播放,因此在网络视频初期非常流行。本软件专注于RM文件的解码,确保用户能够顺利播放这类文件。 RM文件解码涉及的关键技术主要包括以下几个方面: 1. **编码技术*...
在Delphi中实现RM文件的播放功能,通常会涉及到以下几个关键知识点: 1. **多媒体组件库**:Delphi中提供了丰富的多媒体组件,如TMediaPlayer、TAudioOut和TVideoOut等,它们可以帮助开发者处理音频和视频播放。在...
2. **解码技术**:播放RM文件需要相应的解码器。源码可能包含了RealMedia解码器,用于将RM数据转换为音频和视频信号,以便在硬件上播放。 3. **流媒体处理**:源码可能包含了处理网络流媒体的能力,包括连接服务器...
Delphi实现RM文件安全检测,文件信息数据流,记录了媒体文件的版权、限制级别、制作日期、等附加信息,图像映射数据流,在指定的时间内,当用户点击播放画面的部份区域可以打开网页,用户在网上下载RM格式文件的时候...
标题 "KMPlay不能播放rm和rmvb或者无声音" 描述了用户在使用KMPlayer这款媒体播放器时遇到的问题,即无法正常播放RM和RMVB格式的视频文件,或者出现有图像无声音、有声音无图像的情况。这个问题可能是由于缺少某些...
QQ播放RM RMVB等文件补丁是一款针对QQ播放器的扩展工具,旨在增强其多媒体播放功能,特别是针对RM和RMVB格式的视频文件。QQ播放器是腾讯公司推出的一款多媒体播放软件,它允许用户播放各种音频和视频文件,但原生...
然而,由于多种原因,如不完整的下载、存储错误或病毒攻击,RM文件可能会损坏,导致无法正常播放。这时,“Rm电影文件修复专家”就派上了用场。 该工具专门针对RM文件的损坏问题,通过其先进的算法和技术,尝试恢复...
在移动设备上,尤其是智能手机上,用户经常遇到无法直接播放某些特定格式的视频文件,如RM和RMVB格式。这两种格式在早期网络视频流行时非常常见,但随着技术的发展,许多现代设备不再原生支持它们。针对这种情况,...
描述中的“(让WindowsMediaPlayer也可以播放.rm%2Crmvb格式的文件)”进一步强调了解码器的主要功能,即为WMP提供对RM和RMVB格式的支持。这里的“.rar”后缀表示这是一个压缩文件,通常包含多个文件或文件夹,本例中...
RM文件是RealNetworks公司开发的一种流媒体格式,常用于在线视频播放。然而,RM文件也可能被恶意用户利用,传播病毒或执行恶意代码,因此进行RM文件地址的安全检查至关重要。 在Delphi中,我们可以采用以下步骤来...
软件名称:Rm电影文件修复专家 6.58 软件性质:免费软件 软件介绍: 平时在观看一些电影时,最让大家苦恼的事情就是无法拖动播放时间条,看了一半的电影如果出现意外,再看时,我们必须得从头开始观看,...
这些动态链接库文件(DLL)在KMPlayer中扮演着至关重要的角色,它们是实现RMVB播放功能的核心组件。 1. pncrt.dll:这是一个与编码和解码相关的库文件,它提供了必要的算法和函数,帮助KMPlayer解析RMVB文件的编码...
1.解码包含5个rmvb必需的解码文件(cook.dll、drvc.dll、...执着windows Media Play播放器播放rm\rmvb文件而不想装其他解码器或播放器的人 c.用vb\vc\vb.net\c#.net+directshow开发播放器且想播放rm\rmvb格式的开发人员
RM0091编程手册1
一个非常好的RM文件分析器,用于解析RM文件的每个字段,并能输出数据包信息,索引信息等等
【描述】"播放rm文件,vc++开发,可以运行" 这句话指出这个项目是用VC++编程语言实现的,目标是创建一个能够播放RM文件的应用程序。VC++是Microsoft公司推出的集成开发环境,主要用于C++编程,它提供了丰富的库支持...