论坛首页 Java企业应用论坛

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

浏览 8816 次
精华帖 (0) :: 良好帖 (17) :: 新手帖 (3) :: 隐藏帖 (7)
作者 正文
   发表时间:2010-09-08   最后修改:2010-09-08
wdq 写道
我从未有过经验,关于这个问题我有这样的想法:
1.主要还是在服务器端进行控制!用过滤器验证用户的权限等相关限制条件。
2.可否用流的形式,将文件从服务器端加载到客户端,进行播放。就类似于好多视频网站一样,你只能看下载不到源文件一样!

 

今天我发现了一个很好的Jquery插件,前面“vvvpig”说想知道豆瓣音乐台是什么加密的,我看了下榻的源代码,是采用JQuery异步实现的,地址请求的,对音乐文件地址进行了MD5的加密!

例如:url: 'aHR0cDovL21yMy5kb3ViYW4uY29tLzIwMTAwOTA4MTAwMy9lODFjMTNkMTNjNzcwYzA0NDMwYjM1ODk3MzEzOThjMS92aWV3L211c2ljaWFubXAzL21wMy94MTA0MTg5NjkubXAz',

 

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'
});

 其核心的播放功能也是使用一段JS来控制的!地址为:http://img3.douban.com/js/packed_artist6.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)
};

 利用firebug查看他的播放器是/swf/mainplayer.swf?ver=" + static_ver;

由于帖子太长了,下面介绍下JQuery的一个插件。见楼下:

http://www.iteye.com/topic/756514?page=2#1661995

 

0 请登录后投票
   发表时间:2010-09-08  
纯粹的利用JS和Css来实现播放器功能!项目地址:http://www.happyworm.com/jquery/jplayer/
一下是他自己的一段描述:

jPlayer is a jQuery plugin that allows you to:

  • play and control audio files in your webpage
  • create and style an audio player using just HTML and CSS
  • add sound effects to your jQuery projects
  • support more devices using HTML5

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。

实现的效果如下:

jPlayer as a stylish audio player

jPlayer as a stylish audio and playlist player

Multi instanced player

Text based player with track switching

Text based player with track switching using custom code

Text Based player with progress bar

ThemeRoller Version

 

0 请登录后投票
   发表时间:2010-09-08  
非常想知道古典网在文件隐藏方面是怎么做到的,很简单的一段播放器代码也是可以直接播放播放器中指定地址的音频文件的,在本地网页也仍然可以调用。
只是用自己的Windows Media Player就无法播放了,显示的只是一个logo图片。
我认为这可以说明隐藏功能的核心部分与客户端无关,而重点在于服务器,只是它是怎么判断什么时候可以正常返回音频文件,什么时候返回一张logo图片呢

很有意思!
0 请登录后投票
   发表时间:2010-09-08  
一般我去土豆优酷偷FLV都是去缓存找呢
0 请登录后投票
   发表时间: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://协议 是流媒体协议播放的



0 请登录后投票
   发表时间:2010-09-08  
那就学优酷呗  网上下载一个flex开发的 播放器,然后双方增加一些 url传送接口 和下载接口  基本就能搞定
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics