现在在做一个音乐连续播放的功能,当用户选择几首音乐的时候弹出来一个播放器的筐用来播放音乐,功能我都实现拉  实现步骤是 
1,根据用户选择的音乐文件生成一个asx文件,然后把这个asx文件的地址发给音频 播放器,音频 播放器代码如下:
<object id='MediaPlayer1' width='460' height='68' classid='CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95'
 codebase='http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715'
 align='baseline' border='0' standby='Loading Microsoft Windows Media Player components...'
 type='application/x-oleobject'>
 <param name='invokeURLs' value='0'>
 <param name='FileName' value='"+value+"' >
 <param name='ShowControls' value='1'>
 <param name='ShowPositionControls' value='0'>
 <param name='ShowAudioControls' value='1'>
 <param name='ShowTracker' value='1'>
 <param name='ShowDisplay' value='0'>
 <param name='ShowStatusBar' value='1'>
 <param name='AutoSize' value='0'>
 <param name='ShowGotoBar' value='0'>
 <param name='ShowCaptioning' value='0'>
 <param name='AutoStart' value='-1'>
 <param name='PlayCount' value='0'>
 <param name='AnimationAtStart' value='0'>
 <param name='TransparentAtStart' value='0'>
 <param name='AllowScan' value='0'>
 <param name='EnableContextMenu' value='1'>
 <param name='ClickToPlay' value='0'>
 <param name='DefaultFrame' value='datawindow'>
 <embed id='MediaPlayer2' src='"+value+"' align='baseline' border='0' width='468' height='68'
 type='application/x-mplayer2'
 pluginspage='http://www.microsoft.com/isapi/redir.dll?prd=windows&amp;sbp=mediaplayer&amp;ar=media&amp;sba=plugin&amp;'
 name='MediaPlayer' showcontrols='1' showpositioncontrols='0'
 showaudiocontrols='1' showtracker='1' showdisplay='0'
 showstatusbar='1'
 autosize='0'
 showgotobar='0' showcaptioning='0' autostart='1' autorewind='0'
 animationatstart='0' transparentatstart='0' allowscan='1'
 enablecontextmenu='1' clicktoplay='0' 
 defaultframe='datawindow' invokeurls='0'>
 </embed>
</object>其中 <param name='FileName' value='"+value+"' > 这个value 就是asx文件的地址  但是现在有个问题是,每次都要生成一个asx文件,用户停止播放后就成为了垃圾文件拉,请问那位兄弟有没有更好的解决方法呢?

解决方案 »

  1.   

    其实问题就是要判断哪些文件正在使用,不太方便.由于用户的各种原因的退出本身就不便处理.
    一个方法是:
        生成ASX文件的时候,用当前时间命名.并指定存放在一个专门的目录中(查找起来更快).
        在某个合适的页面中去该目录查找时间(从文件名就可以分析得到)在几个小时(具体的楼主根据实际情况决定)之前的文件,然后删除之.
        这样,系统中最多只保留最近正在使用的几个.另外就是,如果有必要,可以为每个用户建立一个固定的播放列表文件,每次改变内容都存在里面,这样该用户下次来还可以继续听上次的内容.
      

  2.   

    这么麻烦啊!你可以参考一下我的在线音乐播放系统!
    www.ilkj.net
    我的音乐连续播放功能,就是利用asx播放列表,但这个文件不用每次生成的啊!
    啥叫“动态网站”,直白点说,当然不能生成一堆垃圾文件了!你可以把asx文件写成jsp文件,然后在page指令头里用多媒体解析这个jsp文件,就像我们做验证码一样,用image/jpeg解析jsp文件就变成图片了!默认的jsp文件page指令是这样的,<%@page language="java" contentType="text/html; charset=UTF-8" %>,你可以把contentType改成contentType="video/x-ms-asf; charset=gb2312",这样就可以让WMP在线播放器认识这个jsp文件了,然后你把多个音乐文件路径循环写入这个文件,不就OK了!这个是我的站点的JSP连续播放文件源代码,你可以参考一下!
    <%@ page language="java" contentType="video/x-ms-asf; charset=gb2312"%>
    <%
             //音乐文件所在的目录,我这里用的是绝对路径,自己随意
    String songid=(String)request.getAttribute("songid");
             /*从Servlet中传过来的多个音乐文件,之间用"_"连接
               然后再用String类的split("")方法拆分字符串为数组,将字符串数组循环
               写入asx标记中*/
    String[] str=songid.split("_");
    %>
    <ASX Version = "3.0">
    <%
    for(int i=0;i<str.length;i++)
    {
                  /*我的站点音乐文件和JSP程序不在一个服务器上
                    文件录入数据库时没有加扩展名,所以我下面加上了".wma",自己随意
                  */
                  str[i]=str[i]+".wma";
    %>
    <Entry>
    <Author></Author>
    <Copyright>低品质音乐,仅供试听!请支持正版唱片!</Copyright>
    <Title></Title>
    <Param Name = "WM/AlbumTitle" Value = "爱龙♂空间[www.ilkj.net]" />
    <Ref href = "<%=url+str[i]%>" />
    </Entry>
    <%
    }
    %>
    </ASX>
      

  3.   

    不好意思,上面的
    String songid=(String)request.getAttribute("songid");
    是多个音乐文件的完整路径+文件名因为这个jsp是从servlet转请求转发过来的,所以你的在线播放器的中URL就写servlet的地址,然后用RequestDispatcher转向这个jsp就OK了!当然我用的是Struts+Hibernate,我是使用Action的mapping.findForward("")过来的,反正不管怎么样,只要能共享到request里的数据就可以了!你看我的网站还可以看到URL后面有一段长长的字符,这个是jsessionid加上一段随机字符,在session里,10分钟后就会失效,因此这个jsp文件还具有一定的防盗连功能哦!嘿嘿!
      

  4.   

    那楼上说的这个JSP文件,是对每个用户都有一个不同的JSP文件吗? 然后在10分钟后就会自动删除这个JSP?
    如果是同一个JSP,不就混淆了吗?对于ASX,我没有试过播放器是否每切换一首歌就去读远程的ASX文件,如果是象图片那样一次性地把ASX传到客户端,播放器读取传到客户端上的ASX工作的话,就好说了,在播放器页面加载完后直接调用一个删除ASX的过程即可.
      

  5.   

    楼上的,你懂不懂啊?还一个用户一个JSP?JSP基础太差了吧?
    JSP文件只有一个,每个用户访问会为不同的请求创建对象,我们需要做的是向JSP文件中传递参数,一个JSP文件就OK了!ASX文件可以写到JSP里动态生成的!什么叫“如果是同一个JSP,不就混淆了吗?”???那你做的网站的首页是不是就一个index.jsp啊?你怎么没一个用户写一个首页文件啊?这个包含ASX的JSP文件就不理解了啊?同样的道理哦!动态网站说直白一点,不就是用一个页面,传递不同的参数,显示不同的内容,给不同的访问者浏览!你要是一个访问者生成一个,那你不如用html做成纯静态的网站!首先说的是,你的思路就不对!www.ilkj.net就是这么做的啊!你看乱套了吗?谢谢!
      

  6.   

    楼上的,请注意一下你的语气和人品表现! 如何????
    我只是笔误了,我是说ASX. 对这方面我不太了解,所以想向你继续探讨一下,但不是给你表现嚣张的! 请你先学会如何作人!
      

  7.   

    然后在10分钟后就会自动删除这个JSP?
    -------
    如果我是说JSP的话,会说自动删除它吗??  当然是指ASX.我自己打错了字,也没理由去要求你能具备点起码的理解能力去看明白.但也希望你不要随便用咬人的语气说话. OK???  这是技术论坛,大家仅就技术问题讨论,不是回帖就一定要比别人更了解这个问题,也可以通过这个探讨并学到不了解的知识.如果你对这个氛围格格不入,技术怎样是没有用的.
      

  8.   

    兄弟们,不要吵拉,谢谢各位的帮忙,基本上我开始有点思路怎么去做这个东西拉,谢谢各位拉。andrew830314() 我的msn [email protected] 我有点事情要问你,可以加下我不。