ASP中实现对MediaPlayer控件播放文件地址隐藏的解决方案

在播放视频时,直接查看页面源文件可看到视频文件地址,MediaPlayer控件播放器将在页面上加上如下初始化语句:

  MediaPlayer控件初始化可查看到源文件地址

  Sys.Application.add_init(function()

  {

  $create(Sys.UI.Silverlight.MediaPlayer,

  {

  "autoPlay":true,"mediaSource":"http://211.142.31.235/Nas1/VOD/CP0001/490Kbps/D/DI/DIA/DiaoZhongYuan1/DiaoZhongYuan1.wmv",

  "scaleMode":2,"source":"UserControl/playerTheme/player.xaml","volume":1},

  null, null,

  $get("myUserMediaPlayer_player_parent"));

  });

  解决方案是先建立一个字符串加密解密服务

  加密、解密工具类

  1/**//// <summary>

  2    /// 对字符串进行、加解密的工具类

  3    /// </summary>

  4    public class DESEncryptor

  5  {

  6        静态公共方法#region 静态公共方法

  7        /**//// <summary>

  8        /// 对字符串进行加密

  9        /// </summary>

  10        /// <param name="strSource">源字符串</param>

  11        /// <returns>加密后的字符串</returns>

  12        public static string  ExecEncrypt(string strSource)

  13        {

  14            DESEncryptor desEncryptor = new DESEncryptor() ;

  15            desEncryptor.InputString = strSource ;

  16            desEncryptor.DesEncrypt() ;

  17            return desEncryptor.OutString ;

  18        }

  19        /**//// <summary>

  20        /// 对已经加密的字符串进行解密

  21        /// </summary>

  22        /// <param name="strSource">已经加密的字符串</param>

  23        /// <returns>还原后的字符串</returns>

  24        public static string  ExecDeEncrypt(string strSource)

  25        {

  26            DESEncryptor desEncryptor = new DESEncryptor() ;

  27            desEncryptor.InputString = strSource ;

  28            desEncryptor.DesDecrypt() ;

  29            return desEncryptor.OutString ;

  30        }

  31        #endregion

  32

  33        私有成员#region 私有成员

  34        /**//// <summary>

  35        /// 输入字符串

  36        /// </summary>

  37        private string inputString=null;

  38        /**//// <summary>

  39        /// 输出字符串

  40        /// </summary>

  41        private string outString=null;

  42        /**//// <summary>

  43        /// 输入文件路径

  44        /// </summary>

  45        private string inputFilePath=null;

  46        /**//// <summary>

  47        /// 输出文件路径

  48        /// </summary>

  49        private string outFilePath=null;

  50        /**//// <summary>

  51        /// 加密密钥

  52        /// </summary>

  53        private string encryptKey="fanmenglife";

  54        /**//// <summary>

  55        /// 解密密钥

  56        /// </summary>

  57        private string decryptKey = "fanmenglife";

  58        /**//// <summary>

  59        /// 提示信息

  60        /// </summary>

  61        private string noteMessage=null;

  62        #endregion

  63

  64        公共属性#region 公共属性

  65        /**//// <summary>

  66        /// 输入字符串

  67        /// </summary>

  68        public string InputString

  69        {

  70            get{return inputString;}

  71            set{inputString=value;}

  72        }

  73        /**//// <summary>

  74        /// 输出字符串

  75        /// </summary>

  76        public string OutString

  77        {

  78            get{return outString;}

  79            set{outString=value;}

  80        }

  81        /**//// <summary>

  82        /// 输入文件路径

  83        /// </summary>

  84        public string InputFilePath

  85        {

  86            get{return inputFilePath;}

  87            set{inputFilePath=value;}

  88        }

  89        /**//// <summary>

  90        /// 输出文件路径

  91        /// </summary>

  92        public string OutFilePath

  93        {

  94            get{return outFilePath;}

  95            set{outFilePath=value;}

  96        }

  97        /**//// <summary>

  98        /// 加密密钥

  99        /// </summary>

  100        public string EncryptKey

  101        {

  102            get{return encryptKey;}

  103            set{encryptKey=value;}

  104        }

  105        /**//// <summary>

  106        /// 解密密钥

  107        /// </summary>

  108        public string DecryptKey

  109        {

  110            get{return decryptKey;}

  111            set{decryptKey=value;}

  112        }

  113        /**//// <summary>

  114        /// 错误信息

  115        /// </summary>

  116        public string NoteMessage

  117        {

  118            get{return noteMessage;}

  119            set{noteMessage=value;}

  120        }

  121        #endregion

  122

  123        构造函数#region 构造函数

  124        /**//// <summary>

  125        /// 构造函数

  126        /// </summary>

  127        public DESEncryptor()

  128        {

  129            //

  130            // TODO: 在此处添加构造函数逻辑

  131            //

  132        }

  133        #endregion

  134

  135        DES加密字符串#region DES加密字符串

  136        /**//// <summary>

  137        /// 加密字符串

  138        /// 注意:密钥必须为8位

  139        /// </summary>

  140        public void DesEncrypt()

  141        {

  142            byte[] byKey=null;

  143            byte[] IV= {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};

  144            try

  145            {

  146                byKey = System.Text.Encoding.UTF8.GetBytes(this.encryptKey.Substring(0,8));

  147                DESCryptoServiceProvider des = new DESCryptoServiceProvider();

  148                byte[] inputByteArray = Encoding.UTF8.GetBytes(this.inputString);

  149                MemoryStream ms = new MemoryStream();

  150                CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write) ;

  151                cs.Write(inputByteArray, 0, inputByteArray.Length);

  152                cs.FlushFinalBlock();

  153                this.outString=Convert.ToBase64String(ms.ToArray());

  154            }

  155            catch(System.Exception error)

  156            {

  157                this.noteMessage=error.Message;

  158            }

  159        }

  160        #endregion

  161

  162        DES解密字符串#region DES解密字符串

  163        /**//// <summary>

  164        /// 解密字符串

  165        /// </summary>

  166        public void DesDecrypt()

  167        {

  168            byte[] byKey = null;

  169            byte[] IV= {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};

  170            byte[] inputByteArray = new Byte[this.inputString.Length];

  171            try

  172            {

  173                byKey = System.Text.Encoding.UTF8.GetBytes(decryptKey.Substring(0,8));

  174                DESCryptoServiceProvider des = new DESCryptoServiceProvider();

  175                inputByteArray = Convert.FromBase64String(this.inputString);

  176                MemoryStream ms = new MemoryStream();

  177                CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);

  178                cs.Write(inputByteArray, 0, inputByteArray.Length);

  179                cs.FlushFinalBlock();

  180                System.Text.Encoding encoding = new System.Text.UTF8Encoding();

  181                this.outString=encoding.GetString(ms.ToArray());

  182            }

  183            catch(System.Exception error)

  184            {

  185                this.noteMessage=error.Message;

  186            }

  187        }

  188        #endregion

  189}

  加密、解密WebService,调用工具内加密、解密方法:

  1/**//// <summary>

  2    /// Summary description for Service1

  3    /// </summary>

  4    [WebService(Namespace = "http://tempuri.org/")]

  5    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

  6    [System.ComponentModel.ToolboxItem(false)]

  7    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.

  8    // [System.Web.Script.Services.ScriptService]

  9    public class Service1 : System.Web.Services.WebService

  10    {

  11        /**//// <summary>

  12        /// 加密

  13        /// </summary>

  14        /// <param name="url">地址</param>

  15        /// <returns></returns>

  16        [WebMethod]

  17        public string Encrypt(string url)

  18        {

  19            return DESEncryptor.ExecEncrypt(url);

  20        }

  21

  22        /**//// <summary>

  23        /// 解密

  24        /// </summary>

  25        /// <param name="url">地址</param>

  26        /// <returns></returns>

  27        [WebMethod]

  28        public string DeEncrypt(string url)

  29        {

  30            return DESEncryptor.ExecDeEncrypt(url);

  31        }

  32

  }

  在MediaPlayer控件播放页面加载时,先调用WebService内加密方法对播放地址进行加密,然后注册JavaScript脚本调用视频文件播放方法:

  播放页面加载

  protected void Page_Load(object sender, EventArgs e)

  {

  if (!IsPostBack)

  {

  //对播放地址进行加密

  string encryptUrl = local.Encrypt(playUrl);

  //注册脚本,调用javascript播放方法

  Page.ClientScript.RegisterStartupScript(this.GetType(), "", " setTimeout(\"onPlay('" + encryptUrl + "')\",1000)", true);               }

  }

  JavaScript调用WebService通过微软提供的WebService.htc实现,ASP.NET中使用WebService.htc需要在HTML代码中添加如下代码:

  <div id="serviceDiv" style="behavior: url(WebService.htc)"></div> 注意:该div必需在forms之外

  Javascript代码:

  1 function getUrl(str) {

  2     //第一个参数是webservice的url,后面是名称

  3     serviceDiv.useService("http://localhost:88/Service1.asmx?WSDL", "news");

  4     //设置一个回调函数,service返回结果的时候回调;第一个参数是回调函数的名称,后面的是webservice的参数

  5     intCallID = serviceDiv.news.callService(url_result, "DeEncrypt", str); //这里有两个参数..

  6 }

  7

  8 function url_result(result)//回调函数

  9 {

  10     var media_player = $find('myUserMediaPlayer_player');

  11     media_player.set_mediaSource(result.value);

  12     media_player.set_autoPlay(true);

  13 }

  14

  15 function onPlay(str) {

  16     getUrl(str);

  17 }

  有几点需说明:

  1. 为什么在Page_Load事件里注册脚本不直接调用Javascript内播放方法,因为页面需完全加载后,WebService.htc才会被初始化,所以我用setTimeout方法延迟一段时间再调用播放方法。

  2. 大家在使用WebService回调函数时记得判断返回结果是否成功。

  通过以上方法,在页面上查看源文件便无法查看到播放文件地址了,MediaPlayer初始化语句更新为如下:

  更改后MediaPlayer控件初始化

  Sys.Application.add_init(function()

  {

  $create(Sys.UI.Silverlight.MediaPlayer,

  {"autoPlay":true,"scaleMode":1,"source":"../UserControl/playerTheme/VIPPlayer.xaml","volume":1},

  null, null, $get("ump_player_parent"));

  });

  不过这只是争对一般用户,如果大家有更好的方法可以拿出来一起共享,希望我的文章对大家有帮助

时间: 2024-11-03 04:18:06

ASP中实现对MediaPlayer控件播放文件地址隐藏的解决方案的相关文章

asp.net-怎么更改ASP中的tree view 控件里的文字

问题描述 怎么更改ASP中的tree view 控件里的文字 怎么更改ASP中的tree view 控件里的文字,老是改不掉 解决方案 直接修改 treeView1.Nodes[n],Text = xxx 看下你的控件有没有回发,服务器上page_load有没有判断 if (!postback) { 初始化 } 解决方案二: 谢谢,但是你这种方法有点烦,我找到了另一种方法,谢谢

系统中有多块声卡,C#编程中MediaPlayer控件可以将声音播放给指定的声卡吗?

问题描述 C#编程中,用MediaPlayer控件来播放网络上的流媒体,如何将声音播放给指定的声卡(我的系统中装有多块声卡)呢?请问该如何编程呢,MediaPlayer控件中有这样的函数吗?跪谢各位大侠了! 解决方案 解决方案二:你不能通过windows的驱动去操作.你可能只能去跟厂商联系,看看如何是用汇编语言.c语言跟板卡通讯.解决方案三:感觉比较复杂啊,能不能调用相关dll实现呢?

控件播放内存流视频

问题描述 pictureBox1.Image=Image.FromStream(ms):如果ms为一个视频内存流的话,请问是不是先将ms保存为文件,才能调用mediaplayer控件播放这个视频?如果是这样的,怎么将其保存为文件,然后将其播放,求教代码?急求,谢谢!!!!!好人一生平安 解决方案 解决方案二:这不是你可以考虑的东西.这个比较高大上,只有一些有钱的公司买了制作软件才能播放.你不用考虑这个.解决方案三:那如果这这样呢?pictureBox1.Image=Image.FromStrea

win8 app store开发中在线程或定时器中访问页面的控件

问题描述 win8appstore开发中在线程或定时器中访问页面的控件,请问怎样实现 解决方案 解决方案二:Dispatcher.runasync解决方案三:参考

asp.net web开发中实现对office文档(word、excel)进行网页内编辑

问题描述 asp.netweb开发中实现对office文档(word.excel)进行网页内编辑,希望能给出具体实例源码,不甚感谢! 解决方案 解决方案二:顶一下解决方案三:用控件www.ntko.com*****************************************************************************欢迎使用CSDN论坛专用阅读器:CSDNReader(附全部源代码)http://www.cnblogs.com/feiyun0112/arc

一起谈.NET技术,浅谈ASP.NET 4中构造HTML5视频控件

在本文中,将一步步地指导你如何使用Visual Studio 2010和ASP.NET 4的相关知识,打造一个基于HTML5标准规范的视频播放控件,其中你会学习到一些关于HTML 5的知识,还会学到如何使用ASP.NET 4去打造一个服务端的控件. 简介 ASP.NET 4中有大量由微软或第三方提供的控件,但要是这些控件不能满足你的需求,那该怎么办呢?答案是:自己动手去设计! 本教程会指导你如何去开发一个ASP.NET 的服务端控件,你会感受到在开发自己的服务端控件的同时,也提升了你开发的Web

asp.net中td中的两个控件左右并排好了,但是如何上下居中,怎么弄都不得,大神帮看看

问题描述 asp.net中td中的两个控件左右并排好了,但是如何上下居中,怎么弄都不得,大神帮看看 /asp:TextBox 如何让这个TextBox控件和ImageButton控件都是并排的上下居中吖,我用了valign="middle" 还是不得,各位大神,帮帮我吧,我弄了一个早上了,明天要交作业了 解决方案 td不够宽导致另外控件换行了吧,td宽度设置大一点能容下2个按钮 解决方案二: 长度是足够长的,会不会是我的TextBox小了?因为我的图片比那个TextBox大,可以再帮我

抢先试用ASP.NET 2.0中的新型安全控件

asp.net|安全|控件 一. 引言 与ASP.NET 2.0一同上市的有几个新的安全控件-它们位于工具的Login选项卡中(见图1)-这些控件大大简化了Web开发人员的工作.通过使用这些新的安全控件,现在你可以执行例如用户登录.注册.口令改变等的任务:而且,为此做出的努力仅是拖放相应的控件到你的Web表单上去.在本文中,我将向你展示怎样使用这些新控件来实现用户认证. 首先,让我们探索一下LoginView.LoginStatus和LoginName三个控件的使用.首先,让我们使用Visual

ASP.net中动态加载控件时一些问题的总结

asp.net|动态|加载|控件|问题 经常见到有人说在ASP.net中不要使用动态控件,我想主要的原因在于使用动态控件会带来一些问题,在做项目的过程中,我将由动态加载控件引发的总是作了一个小小的总结.1 .在使用LoadControl加载控件后,用户控件中的某些控件不再响应事件. 这个问题主要是由于将控件加载放在if (!Page.IsPostBack)之内引起的,放在外面即可.在思归的blog上对此问题进行了详细的说明.2.用户控件中某些控件的响应出现问题,如某个按钮第一次选择时不触发CLI