- 浏览: 290596 次
- 性别:
- 来自: 兰州
文章分类
- 全部博客 (116)
- 给网友答疑 (1)
- J2EE (16)
- DesignPattern (14)
- OtherArchive (5)
- lucene and compass (1)
- JasperReport (2)
- FusionCharts (2)
- Classical algorithm (2)
- JS (5)
- ZK Ajax (1)
- ubuntu-linux (4)
- Weka (0)
- IDE Config (6)
- JAVA 底层 (3)
- C\C++ (4)
- Android (15)
- 项目展示 (1)
- 娱乐生活 (16)
- 电驴资源 (1)
- 网络转载 (1)
- 程序员 毛病 (1)
- Android,开发日志 (2)
- java (1)
- openGL es (2)
- MAC (1)
最新评论
-
洋葱pp奥特曼:
求大神再发一次资源,万分感激!!小弟邮箱:173992660@ ...
使用JQuery-Week-Calendar做日程 -
xbliu564:
请问版本号
fusionchart 破解文件SWF -
xue_lang:
看了半天,有点坑爹的赶脚,哎
状态模式(State) -
teacup_madman:
我只能说。这个程序可以去掉的地方太多了。这个真的是State模 ...
状态模式(State) -
冬日的阳光:
TrafficLight这个类的change方法可以改一下,如 ...
状态模式(State)
《读者》电子出版平台有个附属项目,需求描述是这样的:
1.《读者》发行了电纸书,附带着一个集成的机子,可以方便用户更新资料,每一个资源都附有MP3音频文件,读者可以在线免费试听,也可以下载音频文件,但是下载的时候要付费下载!
2.对于购买了电纸书的,是优惠下载一年,之后按照本站VIP会员优惠条件下载!
.................................................................
其他的描述省略了!
讨论下如何实现MP3音频试听不能下载这功能呢?
实现MP3播放最简单的功能是使用windows media player 插件代码如下:
<object id=MediaPlayer1 codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701standby=Loading type=application/x-oleobject height=65 width=480 classid=CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6 viewastext> <param name="URL" value="<%=request.getContextPath()%>/servlet/ListernOrDownLoad?productId=<%=request.getParameter("productId")%>&action=<%=request.getParameter("action") %>" /> <param name="webURLPlayer" value="false" /> <param name="AudioStream" value="-1" /> <param name="AutoSize" value="0" /> <param name="AutoStart" value="-1" /> <param name="AnimationAtStart" value="-1" /> <param name="AllowScan" value="-1" /> <param name="AllowChangeDisplaySize" value="-1" /> <param name="AutoRewind" value="0" /> <param name="Balance" value="0" /> <param name="BaseURL" value /> <param name="BufferingTime" value="5" /> <param name="CaptioningID" value /> <param name="ClickToPlay" value="-1" /> <param name="CursorType" value="0" /> <param name="CurrentPosition" value="-1" /> <param name="CurrentMarker" value="0" /> <param name="DefaultFrame" value /> <param name="DisplayBackColor" value="0" /> <param name="DisplayForeColor" value="16777215" /> <param name="DisplayMode" value="0" /> <param name="DisplaySize" value="4" /> <param name="Enabled" value="-1" /> <param name="EnableContextMenu" value="-1" /> <param name="EnablePositionControls" value="0" /> <param name="EnableFullScreenControls" value="0" /> <param name="EnableTracker" value="-1" /> <param name="InvokeURLs" value="-1" /> <param name="Language" value="-1" /> <param name="Mute" value="0" /> <param name="PlayCount" value="5" /> <param name="PreviewMode" value="0" /> <param name="Rate" value="1" /> <param name="SAMILang" value /> <param name="SAMIStyle" value /> <param name="SAMIFileName" value /> <param name="SelectionStart" value="-1" /> <param name="SelectionEnd" value="-1" /> <param name="SendOpenStateChangeEvents" value="-1" /> <param name="SendWarningEvents" value="-1" /> <param name="SendErrorEvents" value="-1" /> <param name="SendKeyboardEvents" value="0" /> <param name="SendMouseClickEvents" value="0" /> <param name="SendMouseMoveEvents" value="0" /> <param name="SendPlayStateChangeEvents" value="-1" /> <param name="ShowCaptioning" value="0" /> <param name="ShowControls" value="-1" /> <param name="ShowAudioControls" value="-1" /> <param name="ShowDisplay" value="0" /> <param name="ShowGotoBar" value="0" /> <param name="ShowPositionControls" value="-1" /> <param name="ShowStatusBar" value="-1" /> <param name="ShowTracker" value="-1" /> <param name="TransparentAtStart" value="-1" /> <param name="VideoBorderWidth" value="0" /> <param name="VideoBorderColor" value="0" /> <param name="VideoBorder3D" value="0" /> <param name="Volume" value="100" /> <param name="WindowlessVideo" value="0" /> </object>
参数URL直接放置MP3音频文件的地址即可播放!但是这样的话,会将地址暴露给用户,
未登录的用户或者是费用不足的用户可以直接看见地址,使用迅雷等工具进行下载!
再简单一点处理加密地址的话,将URL参数使用成如下地址:
<param name="URL" value="<%=request.getContextPath()%>/servlet/ListernOrDownLoad?productId=<%=request.getParameter("productId")%>&action=<%=request.getParameter("action") %>" />
使用一个Servlet去请求地址,代码示例如下:
public class ListernOrDownLoad extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); String action = request.getParameter("action"); User hideUser = (User) session.getAttribute("user"); int userId = null != hideUser ? hideUser.getId() : 0; int productId = Integer.parseInt(request.getParameter("productId")); Product product = ProductMgr.getInstance().loadById(productId); String musicUrl = MusicMgr.getInstance().findByProductId(productId).getUrl(); if (action.equals("listen")) { out.print(getMMSHostName(request) + musicUrl); } if (action.equals("download")) { if (0 == userId) { out.print("你还没有登录,请<a href='" + getHttpHostName(request) + "userAdmin/userLogin.jsp'>登录</a>!"); return; } Integral integral = IntegralMgr.getInstance().findByUserId(userId); if (null == integral || integral.getIntegral() < 0 || integral.getIntegral() < product.getMemberPrice()) { out.print("您的余额不足!,请<a href='" + getHttpHostName(request) + "integral/add.jsp'>充值</a>!"); return; } integral.setIntegral(integral.getIntegral() - product.getMemberPrice()); integral.setUserId(userId); IntegralMgr.getInstance().update(integral); out.print("<a href='" + getHttpHostName(request) + "/servlet/getAdress?userId="+userId+"&url=" + musicUrl + "&now=" + DateUtils.getDate(userId,new Date()) + "'>点击下载</a>"); } out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } private String getMMSHostName(HttpServletRequest request) { String basePath = "mms://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + ""; return basePath; } private String getHttpHostName(HttpServletRequest request) { String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + ""; return basePath; } }哪位朋友也许说了,为设么不自己开发一个player呢?使用Flex等?嘿嘿,要是自己去开发的话就没有必要讨论这个问题了,项目的经费就那么一点,什么都自己开发那可真是赔大了!嘿嘿!
方式二:使用js文件来控制参数传递:
使用js文件控制选择不同的播放器来播放不同的音频文件,支持如下格式
"WMA" : "WMP",
"MP3" : "MP3", "WMV" : "WMP", "ASF" : "WMP", "MPG" : "WMP", "MPEG" : "WMP", "AVI" : "WMP", "ASX" : "WMP", "RM" : "Real", "RMVB" : "Real", "RAM" : "Real", "RA" : "Real", "SWF" : "Flash", "FLV" : "Flv"
核心是一个js文件依据不同的文件格式来调用不同的播放器来实现!参见附件中。
但是这样实现之后,文件一依然是暴露在外面的!还得使用Servlet等方式返回一个地址,或使用Ajax的方式在播放的时候去请求地址!这也是一个办法!
这里就没有继续往下写!
源文件:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> new document </title> <meta name="author" content="" /> <meta name="keywords" content="" /> <meta name="description" content="" /> </head> <body> <script type="text/javascript" src="player.js"></script> <script type="text/javascript"> <!-- var myPlayer = new Player(); myPlayer.play("1.mp3",800,600,true); //--> </script> </body> </html>
也许以上想法是很粗糙的,很原始的,或是很傻瓜式的实现方式,我们称其为障眼法实现方式,只能蒙蔽一般的使用者,但是对于稍微懂点程序代码的人来说,就是小儿科了!
以上料中想法优缺点,相信大家都很明了,我也就不说了,我这里说这个问题,只是抛砖引玉,希望大家有好的办法,既经济又快速的办法,或好的思路能与大家分享!因为现在这方面还比较流行,随便一个什么网站,什么管理类的系统,尤其是政府部门的办公管理系统,功能不多,类似要求辅助功能不少,希望大家多多交流跟帖!
- player.part3.rar (3.6 MB)
- 下载次数: 297
- player.part1.rar (7.1 MB)
- 下载次数: 241
- player.part2.rar (7.1 MB)
- 下载次数: 229
评论
参见http://music.guqu.net/guquplayer1.asp?Musicid=14725&urlid=1
其源码是:http://music4.guqu.net/guqumusic/mengmeng/zhuanji/guzheng/funa_zg/14hrz.wma
迅雷下载:但是缓存依然存在!
更正下:
刚才只是错略的看了下缓存文件的地址:以为是有缓存文件了,但是把缓存文件取出来的话,是一个bat文件,不能播放!
其利用的也是mms://协议来播放的,但不知为什么显示的时候是http://协议,这个中间的转换是怎么实现的呢?深思中!不由的赞叹古曲网这方面做得很成功!
mms://协议 是流媒体协议播放的
只是用自己的Windows Media Player就无法播放了,显示的只是一个logo图片。
我认为这可以说明隐藏功能的核心部分与客户端无关,而重点在于服务器,只是它是怎么判断什么时候可以正常返回音频文件,什么时候返回一张logo图片呢
很有意思!
<span style="font-weight: normal;">纯粹的利用JS和Css来实现播放器功能!项目地址:</span><span style="font-weight: normal;"><a href="http://www.happyworm.com/jquery/jplayer/">http://www.happyworm.com/jquery/jplayer/</a></span>
</div>
<div class="quote_title"><span style="font-weight: normal;">一下是他自己的一段描述:</span></div>
<div class="quote_title">
<p><span style="font-weight: normal;">jPlayer is a jQuery plugin that allows you to:</span></p>
<ul>
<li><span style="font-weight: normal;">play and control audio files in your webpage</span></li>
<li><span style="font-weight: normal;">create and style an audio player using just HTML and
CSS</span></li>
<li><span style="font-weight: normal;">add sound effects to your jQuery projects</span></li>
<li><span style="font-weight: normal;">support more devices using HTML5</span></li>
</ul>
<p><span style="font-weight: normal;">All of this with HTML5 <audio> support for compliant
browsers that allow mp3 or ogg format, while supporting other browsers using mp3
format with no visible Flash。</span></p>
<p>实现的效果如下:</p>
<p><a href="http://www.happyworm.com/jquery/jplayer/latest/demo-01.htm">jPlayer as a stylish audio player</a></p>
<p><img src="http://www.happyworm.com/jquery/jplayer/graphics/jplayer_demo_01.jpg" alt=""></p>
<p><a href="http://www.happyworm.com/jquery/jplayer/latest/demo-02.htm">jPlayer as a stylish audio and playlist player</a></p>
<p><img src="http://www.happyworm.com/jquery/jplayer/graphics/jplayer_demo_02.jpg" alt=""></p>
<p><a href="http://www.happyworm.com/jquery/jplayer/latest/demo-03.htm">Multi instanced player</a></p>
<p><img src="http://www.happyworm.com/jquery/jplayer/graphics/jplayer_demo_03.jpg" alt=""></p>
<p><a href="http://www.happyworm.com/jquery/jplayer/latest/demo-04.htm">Text based player with track switching</a></p>
<p><img src="http://www.happyworm.com/jquery/jplayer/graphics/jplayer_demo_04.jpg" alt=""></p>
<p><a href="http://www.happyworm.com/jquery/jplayer/latest/demo-05.htm">Text based player with track switching using custom
code</a></p>
<p><img src="http://www.happyworm.com/jquery/jplayer/graphics/jplayer_demo_04.jpg" alt="" width="210" height="80"></p>
<p><a href="http://www.happyworm.com/jquery/jplayer/latest/demo-06.htm">Text Based player with progress bar</a></p>
<p><img src="http://www.happyworm.com/jquery/jplayer/graphics/jplayer_demo_06.jpg" alt=""></p>
<p><a href="http://www.happyworm.com/jquery/jplayer/latest/demo-07.htm">ThemeRoller Version</a></p>
<p><img src="http://www.happyworm.com/jquery/jplayer/graphics/jplayer_demo_07.jpg" alt=""></p>
<p> </p>
</div>
<div class="quote_div">我从未有过经验,关于这个问题我有这样的想法:<br>1.主要还是在服务器端进行控制!用过滤器验证用户的权限等相关限制条件。<br>2.可否用流的形式,将文件从服务器端加载到客户端,进行播放。就类似于好多视频网站一样,你只能看下载不到源文件一样!</div>
<p> </p>
<p>今天我发现了一个很好的Jquery插件,前面“<span>vvvpig</span>”说想知道豆瓣音乐台是什么加密的,我看了下榻的源代码,是采用JQuery异步实现的,地址请求的,对音乐文件地址进行了MD5的加密!</p>
<p>例如:<span style="white-space: pre;">url: 'aHR0cDovL21yMy5kb3ViYW4uY29tLzIwMTAwOTA4MTAwMy9lODFjMTNkMTNjNzcwYzA0NDMwYjM1ODk3MzEzOThjMS92aWV3L211c2ljaWFubXAzL21wMy94MTA0MTg5NjkubXAz',</span></p>
<p> </p>
<pre name="code" class="java">var sdata = [];
sdata.push({
title: encodeURIComponent("云的南方"),
url: 'aHR0cDovL21yNC5kb3ViYW4uY29tLzIwMTAwOTA4MTAwMy9kMWUxNmExODQ0MjkwNmE2ZTJiZDlhMzBhZDcxNTc3Ny92aWV3L211c2ljaWFubXAzL21wMy94MTA5MDIwMjYubXAz',
id: '57546',
isfull: 'True'
});
sdata.push({
title: encodeURIComponent("乌兰巴托的夜"),
url: 'aHR0cDovL21yNC5kb3ViYW4uY29tLzIwMTAwOTA4MTAwMy85OTM2ZDg1NDA2ZTFjZTRlZmU3NzhkZDJmOGRlZWRhZC92aWV3L211c2ljaWFubXAzL21wMy94MTA5Mjg5NjcubXAz',
id: '60184',
isfull: 'True'
});
sdata.push({
title: encodeURIComponent("苦鬼(2010版)"),
url: 'aHR0cDovL21yNC5kb3ViYW4uY29tLzIwMTAwOTA4MTAwMy8xNzcwMGY2NDQ3NGUxOTA1NjBlNDYwZTAzY2FlODc2OC92aWV3L211c2ljaWFubXAzL21wMy94MTA1MTYzNzcubXAz',
id: '29131',
isfull: 'True'
});
sdata.push({
title: encodeURIComponent("好姑娘"),
url: 'aHR0cDovL21yNC5kb3ViYW4uY29tLzIwMTAwOTA4MTAwMy83MjliZjViMzQxNjYyYTVjMzY0NDRmZWM0YThlYTllMC92aWV3L211c2ljaWFubXAzL21wMy94MTA0NzY5MDcubXAz',
id: '26499',
isfull: 'True'
});
sdata.push({
title: encodeURIComponent("咖啡时光"),
url: 'aHR0cDovL21yNC5kb3ViYW4uY29tLzIwMTAwOTA4MTAwMy85OTU0ZWQxYzY3N2U5MzRiNjUzODcwNGY1YTNmOGZkNS92aWV3L211c2ljaWFubXAzL21wMy94MTA3MzE1MzUubXAz',
id: '43247',
isfull: 'True'
});
sdata.push({
title: encodeURIComponent("当我离开你的时候"),
url: 'aHR0cDovL21yNC5kb3ViYW4uY29tLzIwMTAwOTA4MTAwMy9mN2U1ZmEyMmM0NDJhMWY2MDhhOGNhMjM1OTdkNGE5MS92aWV3L211c2ljaWFubXAzL21wMy94MTAwODU1OTIubXAz',
id: '3883',
isfull: 'True'
});
sdata.push({
title: encodeURIComponent("钱歌"),
url: 'aHR0cDovL21yNC5kb3ViYW4uY29tLzIwMTAwOTA4MTAwMy8zZTBjY2RkYjM1MjQ2NzUxMmNkZTM1NGFjYmNhZGRmNS92aWV3L211c2ljaWFubXAzL21wMy94MTA0NjI4ODYubXAz',
id: '25639',
isfull: 'True'
});
sdata.push({
title: encodeURIComponent("野合万事兴"),
url: 'aHR0cDovL21yNC5kb3ViYW4uY29tLzIwMTAwOTA4MTAwMy80YmNkMjYzZmI1NTY3ODJhYzM3ZTgzNzRmMzgyZjNkNS92aWV3L211c2ljaWFubXAzL21wMy94MTAwMzI4MDUubXAz',
id: '1528',
isfull: 'True'
});
sdata.push({
title: encodeURIComponent("我不能悲伤地坐在你身旁Cowboy Junkies烟枪牛仔翻唱"),
url: 'aHR0cDovL21yMy5kb3ViYW4uY29tLzIwMTAwOTA4MTAwMy9kNjEzYTgxZGE0NmY0YjA2Y2U2MWJiNDQ5MTA2MzM1Ni92aWV3L211c2ljaWFubXAzL21wMy94MTA2Njc1MTAubXAz',
id: '39289',
isfull: 'True'
});
sdata.push({
title: encodeURIComponent("我不能悲伤地坐在你身旁"),
url: 'aHR0cDovL21yMy5kb3ViYW4uY29tLzIwMTAwOTA4MTAwMy9lODFjMTNkMTNjNzcwYzA0NDMwYjM1ODk3MzEzOThjMS92aWV3L211c2ljaWFubXAzL21wMy94MTA0MTg5NjkubXAz',
id: '22928',
isfull: 'True'
});
</pre>
<p> 其核心的播放功能也是使用一段JS来控制的!地址为:<a href="http://img3.douban.com/js/packed_artist6.js">http://img3.douban.com/js/packed_artist6.js</a> 代码如下:</p>
<p> </p>
<pre name="code" class="js">update_artist = function(a){
$("#artist_info").html(a.info_html);
$("#album").html(a.album_html);
$("#discussions").html(a.discussions_html);
$("#board").html(a.board_html);
$("#contact").html(a.contact_html);
load_event_monitor($("#artist_info,#album,#discussions,#board,#contact"))
};
Douban.init_unconnect = function(a){
$(a).click(function(){
if (confirm("真的要" + a.title + "吗?")) {
$.postJSON_withck(artist_url + "unconnect", update_artist)
}
return false
})
};
Douban.init_add_board = function(a){
$(a).submit(function(){
var b = get_form_fields(this);
$.postJSON_withck(ajax_add_board_url, b, function(c){
$("#board").html(c.html);
load_event_monitor($("#board"))
});
return false
})
};
Douban.init_connect = function(a){
$(a).click(function(){
$.postJSON_withck(artist_url + "connect", update_artist);
return false
})
};
Douban.init_ban_button = function(a){
$(a).click(function(){
$("#ban_form").show();
$("#ban_button").hide();
return false
});
$("#ban_cancel").click(function(){
$("#ban_form").hide();
$("#ban_button").show();
return false
})
};
Douban.init_down_title = function(a){
if (!$(".down_mp3").length) {
$(a).css("visibility", "hidden")
}
};
Douban.init_hidden_mod = function(b){
var a = $(b).parents("h2");
$(b).click(function(){
var d = $(b).html() == "隐藏本区域";
$(b).html(d ? "显示本区域" : "隐藏本区域");
var f = a.parent()[0];
var c = $(f).children("#extra")[0];
var e = f.id;
if (c) {
e += c.value
}
$.post_withck(artist_url + "mod_show", {
mod: e,
display: !d
}, function(g){
var h = a.parent();
h.html(g);
(d ? h.addClass : h.removeClass).call(h, "hiddenmod");
load_event_monitor(h)
});
return false
})
};
function playcount(b, a){
$.get("/j/artist/incplaycount", {
song_id: b,
worked: a ? 1 : 0
})
}
function playsong(f, d){
playnext = f + 1 < sdata.length ? function(){
playsong(f + 1)
}
: function(){
playsong(0, true)
};
mplayer = document.getElementById("mplayer");
$("tr", "#song").removeClass("selsong");
$("#tr" + f).addClass("selsong");
if (mplayer != undefined && mplayer.playsong != undefined) {
mplayer.playsong(sdata[f].url, sdata[f].id, d ? 0 : 1, sdata[f].title, sdata[f].isdemo);
return
}
var b = "/swf/mainplayer.swf?ver=" + static_ver;
var e = {
wmode: "transparent"
};
var a = {
url: sdata[f].url,
autoplay: (d ? "0" : "1"),
songid: sdata[f].id,
isdemo: (sdata[f].isfull == "True" ? "0" : "1"),
descri: sdata[f].title
};
var c = {
id: "mplayer",
name: "mplayer"
};
swfobject.embedSWF(b, "mainplayer", "347", "40", "9.0.0", "/swf/expressInstall.swf", a, e, c)
};
</pre>
<p>
利用firebug查看他的播放器是<span style="white-space: pre;">/swf/mainplayer.swf?ver=" + static_ver;</span></p>
<p><span style="font-size: medium;"><span style="color: #008000;"><strong>由于帖子太长了,下面介绍下JQuery的一个插件。见楼下:</strong></span></span></p>
<p><a href="http://www.iteye.com/topic/756514?page=2#1661995">http://www.iteye.com/topic/756514?page=2#1661995</a></p>
<p> </p>
只是在考虑几个问题:
1.怎么控制Windows Media Player不会在本地缓存音频文件;
2.要实现的功能和www.songtaste.com上的视听文件管理有相似需求吗,www.rayfile.com功能上是不是已经满足了你的需求;
3.无论使用servlet还是jsp、ajax,最终返回来的页面都是html,对音频地址有隐藏作用吗
Good luck!
看了看www.songtaste.com 他的音乐播放,可以通过右键看到如下链接:
http://224.cachefile34.rayfile.com/a9a6/zh-cn/download/87d871824559efb55ff90f80e8abc7ae/preview.mp3
使用迅雷下载可以下载下来!
rayfile的音乐播放功能是利用http://www.top100.cn/他的库和数据库实现的播放!
参见:http://partner.top100.cn/audition/popup/flplayer.html?album=gc3dypbzgo&logo=music.rayfile.com/music/dist/image/logo_player.gif&reurl=www.rayfile.com&zid=24
核心是:http://partner.top100.cn/audition/popup/flplayer.html?zid=24;
不适合我的要求!其实我要做的,就是使用单曲播放的mp3,功能如
http://gswt.com.cn/bestupon/player/player_mp3.html
http://gswt.com.cn/bestupon/player/index.html
旨在加密,不让用户通过其他非法途径下载(浏览器缓存、利用查看源码拼凑地址等方式)!
非常感谢你的热心的关注!
必须登录才能下载呗,验证session,或者设一些token
1.主要还是在服务器端进行控制!用过滤器验证用户的权限等相关限制条件。
2.可否用流的形式,将文件从服务器端加载到客户端,进行播放。就类似于好多视频网站一样,你只能看下载不到源文件一样!
参见http://music.guqu.net/guquplayer1.asp?Musicid=14725&urlid=1
其源码是:http://music4.guqu.net/guqumusic/mengmeng/zhuanji/guzheng/funa_zg/14hrz.wma
迅雷下载:但是缓存依然存在!
更正下:
刚才只是错略的看了下缓存文件的地址:以为是有缓存文件了,但是把缓存文件取出来的话,是一个bat文件,不能播放!
其利用的也是mms://协议来播放的,但不知为什么显示的时候是http://协议,这个中间的转换是怎么实现的呢?深思中!不由的赞叹古曲网这方面做得很成功!
只是在考虑几个问题:
1.怎么控制Windows Media Player不会在本地缓存音频文件;
2.要实现的功能和www.songtaste.com上的视听文件管理有相似需求吗,www.rayfile.com功能上是不是已经满足了你的需求;
3.无论使用servlet还是jsp、ajax,最终返回来的页面都是html,对音频地址有隐藏作用吗
Good luck!
看了看www.songtaste.com 他的音乐播放,可以通过右键看到如下链接:
http://224.cachefile34.rayfile.com/a9a6/zh-cn/download/87d871824559efb55ff90f80e8abc7ae/preview.mp3
使用迅雷下载可以下载下来!
rayfile的音乐播放功能是利用http://www.top100.cn/他的库和数据库实现的播放!
参见:http://partner.top100.cn/audition/popup/flplayer.html?album=gc3dypbzgo&logo=music.rayfile.com/music/dist/image/logo_player.gif&reurl=www.rayfile.com&zid=24
核心是:http://partner.top100.cn/audition/popup/flplayer.html?zid=24;
不适合我的要求!其实我要做的,就是使用单曲播放的mp3,功能如
http://gswt.com.cn/bestupon/player/player_mp3.html
http://gswt.com.cn/bestupon/player/index.html
旨在加密,不让用户通过其他非法途径下载(浏览器缓存、利用查看源码拼凑地址等方式)!
非常感谢你的热心的关注!
这个肯定是会缓存的!所以有一系列的问题要考虑!
只是在考虑几个问题:
1.怎么控制Windows Media Player不会在本地缓存音频文件;
2.要实现的功能和www.songtaste.com上的视听文件管理有相似需求吗,www.rayfile.com功能上是不是已经满足了你的需求;
3.无论使用servlet还是jsp、ajax,最终返回来的页面都是html,对音频地址有隐藏作用吗
Good luck!
发表评论
-
Spring MVC 和 Struts2 比较
2011-02-28 16:55 20341.struts2框架是类级别的拦截,每次来了请求就创建一个A ... -
写点程序的那些糗事(2)
2010-12-16 14:29 1211昨天给商学院做的专家品审系统正式的运行了,来的全部是一些大领导 ... -
Spring3 mvc 国际化时的一点注意
2010-12-13 09:37 1755Spring3 MVC 中:如果使用国际化的形式,如 ... -
MySQLIntegrityConstraintViolationException 解决办法
2010-10-19 16:51 18859使用JPA做映射: /** * 指标 * ... -
写点程序的那些糗事(1)
2010-09-27 19:31 1285写点程序就要认真点,为什么呢?会有效率问题的!引例: ... -
编程语言结构图
2010-09-23 12:22 1203编程语言就是这么个样子的!还要讨论什么是“排名战”么? ... -
JavaMail、Commons Email发送邮件 出现结果后到的文件是Base64的问题的解决办法
2010-08-19 23:09 5236今天折腾了一天,有个业务需要写个简单的邮件发送,但是测试了。从 ... -
使用jcaptcha 仿论坛tip 生成异步验证码
2010-08-18 03:55 2120首先看看效果图: 如上图,点击验证码可以异步的刷新 ... -
Eclipse 3.6 插件资源-持续更新ing-更新15次--欢迎有好用插件的朋友推荐
2010-08-17 11:00 7770欢迎有好用插件的朋友推荐! 注:没有提示说明安装的,直 ... -
Jpa 时间段间的查询问题解决办法
2010-05-27 22:13 22649最近在做法院的一个档案管理项目,一直做的的查询是基于compa ... -
dhtmlXTree 与后台交互数据
2009-11-06 14:44 1902今天要写一个获得dhtmlXTree 节点值的,大量的Id节点 ... -
Struts2 OGNL中的投影(过滤)与软件工程
2009-11-05 11:54 1898Struts2 OGNL中的投影(过滤) <s: ... -
Struts2 doubleSelect
2009-10-30 14:17 1545今天要用到一个二级联动,以前都是使用JavaScript编写, ... -
Struts2 的三种接受参数的方式
2009-10-28 16:59 20411、通过普通参数的getter and setter方式 ... -
JDBC CRUD操作的粗略封装DEMO
2009-10-15 12:19 4611暮然回首,看看jDBC的操作,原来很多的东西都忘记了, ...
相关推荐
针对这种情况,可以采用一些技术手段来防止盗链,比如在C#中实现一种策略。本文将详细介绍如何使用C#防止盗链,以防止他人直接访问你的静态资源,如jpg图片。 首先,我们需要理解什么是HTTP Referer头。当一个...
在ASP.NET中,防止盗链下载文件是一项重要的安全措施,尤其对于那些提供付费或版权受保护的资源下载的网站来说。盗链指的是其他网站通过链接直接引用你的服务器资源,这可能导致带宽消耗过大,影响正常用户的访问...
以下是对Asp.NET文件下载以及防止盗链技术的详细说明。 一、Asp.NET文件下载基础 1. HTTP协议:Asp.NET文件下载基于HTTP协议,服务器通过响应头(Content-Disposition)告知客户端以下载方式处理文件,而不是在...
本文将深入探讨图片处理程序的实现以及如何有效地防止图片盗链,这在保护版权、优化网站性能和提升用户体验方面具有重要意义。 图片处理程序通常包括图片的上传、缩放、裁剪、旋转等操作。在ASP.NET 2.0中,我们...
为了防止这种情况,开发者会采取一系列措施,其中一种就是“防图片盗链技术”。在C#编程环境下,我们可以利用ASP.NET框架来实现这一功能,今天我们就来深入探讨如何实现这个功能,并结合给定的文件进行解析。 首先...
标题中的“穷小子asp.net音乐盗链程序”指的是一个基于ASP.NET技术开发的程序,用于实现音乐文件的盗链功能。在互联网上,"盗链"通常是指未经许可,通过技术手段直接引用他人服务器上的资源,使流量消耗在原服务器上...
### ASP.NET防止盗链知识点详解 #### 一、概述 在互联网应用中,资源被盗用是一种常见的问题。当用户从非授权网站访问或下载资源时,这种行为被称为“盗链”。盗链不仅会侵犯原网站的版权,还可能消耗大量的服务器...
今天在书上偶然看到了如何实现防盗链的问题,到网上查看了一下盗链主要是其他的一些网站引用本站图片或者下载链接。
标题中的"IIS反盗链"指的是在Internet Information Services (IIS)服务器上实施防止非法引用(也称为盗链)的策略。盗链是指其他网站通过链接直接引用了你的服务器上的资源,如图片、音频或视频文件,这可能导致你的...
关于PHP防止盗链防止迅雷下载的方法,我们可以从几个方面来深入探讨,包括盗链的基本原理、防止盗链的常见策略,以及如何进一步防止迅雷等下载工具的下载。 首先,盗链是指第三方网站通过非法手段直接链接到另一个...
标题中的“图片防止盗链 转转kaka100”指的是一个关于防止网站图片被他人盗用的技术措施,通常涉及到服务器配置、JavaScript技术或使用特定的防盗链服务。在互联网上,图片盗链是一种常见现象,它会导致原网站流量...
在这里,我们将主要讨论如何使用`.htaccess`实现密码保护和防止盗链。 **1. 密码保护** `.htaccess` 文件的密码保护机制基于HTTP基本认证,这是一种简单的身份验证方法。要设置密码保护,你需要创建一个`.htaccess...
[影音娱乐]穷小子asp.net音乐盗链程序_mp3.zip源码ASP.NET网站源码打包下载[影音娱乐]穷小子asp.net音乐盗链程序_mp3.zip源码ASP.NET网站源码打包下载[影音娱乐]穷小子asp.net音乐盗链程序_mp3.zip源码ASP.NET网站...
这个系统具有防止盗链的功能,确保了网站资源的安全性,防止了未经许可的第三方通过链接直接下载您的文件,从而保护了网站的数据资产。 在描述中提到的"一套非常实用的下载系统",意味着该系统可能包含以下关键组件...
java 防盗链详解及解决办法 Java 防盗链的概念 ...防盗链是非常重要的,因为它可以保护原网站的内容和空间,防止不道德的盗链行为。同时,我们也可以通过设置防盗链机制来保护自己的网站,避免受到他人的盗链攻击。
虽然没有任何防御措施可以保证 100% 防止盗链,但通过在 *** Core 中实现这样的中间件技术,可以显著增加盗链的难度和成本,从而在很大程度上保护网站资源不被盗用。同时,网站管理员也应定期检查网站日志,及时发现...
标题中的“在IIS里成功加载本插件后可以有效的防止自己站点里的图片文件被其他站点盗链”指的是在Internet Information Services(IIS)这个Web服务器上安装并配置了一个特定的插件,该插件的功能是阻止外部网站未经...
- **视频版权保护**:如果视频内容有版权要求,需要考虑防止非法下载或盗链。 - **性能优化**:通过压缩视频、缓存策略等方式减少加载时间,提升用户体验。 - **响应式设计**:确保在不同设备和屏幕尺寸上都有良好的...
在互联网上,图片资源是常见的共享内容,但同时也面临着被他人盗用的风险,这被称为“图片盗链”。为保护网站的图片资源不被非法盗用,开发者通常会采用各种技术手段来防止图片盗链,其中PHP是一种常用的服务器端...