`
BestUpon
  • 浏览: 284155 次
  • 性别: Icon_minigender_1
  • 来自: 兰州
社区版块
存档分类
最新评论

在线试听(播放器)防止盗链下载实现讨论_障眼法实现

    博客分类:
  • J2EE
阅读更多

 

《读者》电子出版平台有个附属项目,需求描述是这样的:

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")%>&amp;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")%>&amp;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+"&amp;url=" + musicUrl + "&amp;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> 

 也许以上想法是很粗糙的,很原始的,或是很傻瓜式的实现方式,我们称其为障眼法实现方式,只能蒙蔽一般的使用者,但是对于稍微懂点程序代码的人来说,就是小儿科了!

以上料中想法优缺点,相信大家都很明了,我也就不说了,我这里说这个问题,只是抛砖引玉,希望大家有好的办法,既经济又快速的办法,或好的思路能与大家分享!因为现在这方面还比较流行,随便一个什么网站,什么管理类的系统,尤其是政府部门的办公管理系统,功能不多,类似要求辅助功能不少,希望大家多多交流跟帖!

 

 

分享到:
评论
15 楼 feiyan35488 2010-09-08  
那就学优酷呗  网上下载一个flex开发的 播放器,然后双方增加一些 url传送接口 和下载接口  基本就能搞定
14 楼 tianshui0 2010-09-08  
BestUpon 写道
Ps:古曲网做的很好!就是不知道他是怎么实现的!

参见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://协议 是流媒体协议播放的



13 楼 Leon.Wood 2010-09-08  
一般我去土豆优酷偷FLV都是去缓存找呢
12 楼 xiaoxiaoniao 2010-09-08  
非常想知道古典网在文件隐藏方面是怎么做到的,很简单的一段播放器代码也是可以直接播放播放器中指定地址的音频文件的,在本地网页也仍然可以调用。
只是用自己的Windows Media Player就无法播放了,显示的只是一个logo图片。
我认为这可以说明隐藏功能的核心部分与客户端无关,而重点在于服务器,只是它是怎么判断什么时候可以正常返回音频文件,什么时候返回一张logo图片呢

很有意思!
11 楼 BestUpon 2010-09-08  
<div class="quote_title">
<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 &lt;audio&gt; 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>
10 楼 BestUpon 2010-09-08  
<div class="quote_title">wdq 写道</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 &lt; 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 &amp;&amp; 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>
9 楼 aws 2010-09-08  
BestUpon 写道
xiaoxiaoniao 写道
没有这方面的经验,
只是在考虑几个问题:
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
8 楼 wdq 2010-09-08  
我从未有过经验,关于这个问题我有这样的想法:
1.主要还是在服务器端进行控制!用过滤器验证用户的权限等相关限制条件。
2.可否用流的形式,将文件从服务器端加载到客户端,进行播放。就类似于好多视频网站一样,你只能看下载不到源文件一样!
7 楼 vvvpig 2010-09-07  
我想知道豆瓣音乐台是如何实现的,是否有办法抓取音乐下载,不是采用对机器的硬件录音的形式
6 楼 BestUpon 2010-09-07  
Ps:古曲网做的很好!就是不知道他是怎么实现的!

参见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://协议,这个中间的转换是怎么实现的呢?深思中!不由的赞叹古曲网这方面做得很成功!
5 楼 BestUpon 2010-09-07  
xiaoxiaoniao 写道
没有这方面的经验,
只是在考虑几个问题:
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

旨在加密,不让用户通过其他非法途径下载(浏览器缓存、利用查看源码拼凑地址等方式)!

非常感谢你的热心的关注!



4 楼 BestUpon 2010-09-07  
ghyghost 写道
不知道IE的缓存是否也能找到MP3的文件,

这个肯定是会缓存的!所以有一系列的问题要考虑!
3 楼 xiaoxiaoniao 2010-09-07  
没有这方面的经验,
只是在考虑几个问题:
1.怎么控制Windows Media Player不会在本地缓存音频文件;
2.要实现的功能和www.songtaste.com上的视听文件管理有相似需求吗,www.rayfile.com功能上是不是已经满足了你的需求;
3.无论使用servlet还是jsp、ajax,最终返回来的页面都是html,对音频地址有隐藏作用吗

Good luck!
2 楼 ghyghost 2010-09-07  
不知道IE的缓存是否也能找到MP3的文件,
1 楼 liuyupy 2010-09-06  
加密播放地址/解密请求串,加入用户权限等级标识.

相关推荐

Global site tag (gtag.js) - Google Analytics