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/**

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

3    ///

4    public class DESEncryptor

5  {

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

7        /**

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

9        ///

10        /// 源字符串

11        /// 加密后的字符串

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        /**

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

21        ///

22        /// 已经加密的字符串

23        /// 还原后的字符串

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        /**

35        /// 输入字符串

36        ///

37        private string inputString=null;

38        /**

39        /// 输出字符串

40        ///

41        private string outString=null;

42        /**

43        /// 输入文件路径

44        ///

45        private string inputFilePath=null;

46        /**

47        /// 输出文件路径

48        ///

49        private string outFilePath=null;

50        /**

51        /// 加密密钥

52        ///

53        private string encryptKey="fanmenglife";

54        /**

55        /// 解密密钥

56        ///

57        private string decryptKey = "fanmenglife";

58        /**

59        /// 提示信息

60        ///

61        private string noteMessage=null;

62        #endregion

63

64        公共属性#region 公共属性

65        /**

66        /// 输入字符串

67        ///

68        public string InputString

69        {

70            get{return inputString;}

71            set{inputString=value;}

72        }

73        /**

74        /// 输出字符串

75        ///

76        public string OutString

77        {

78            get{return outString;}

79            set{outString=value;}

80        }

81        /**

82        /// 输入文件路径

83        ///

84        public string InputFilePath

85        {

86            get{return inputFilePath;}

87            set{inputFilePath=value;}

88        }

89        /**

90        /// 输出文件路径

91        ///

92        public string OutFilePath

93        {

94            get{return outFilePath;}

95            set{outFilePath=value;}

96        }

97        /**

98        /// 加密密钥

99        ///

100        public string EncryptKey

101        {

102            get{return encryptKey;}

103            set{encryptKey=value;}

104        }

105        /**

106        /// 解密密钥

107        ///

108        public string DecryptKey

109        {

110            get{return decryptKey;}

111            set{decryptKey=value;}

112        }

113        /**

114        /// 错误信息

115        ///

116        public string NoteMessage

117        {

118            get{return noteMessage;}

119            set{noteMessage=value;}

120        }

121        #endregion

122

123        构造函数#region 构造函数

124        /**

125        /// 构造函数

126        ///

127        public DESEncryptor()

128        {

129            //

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

131            //

132        }

133        #endregion

134

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

136        /**

137        /// 加密字符串

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

139        ///

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        /**

164        /// 解密字符串

165        ///

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/**

2    /// Summary description for Service1

3    ///

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        /**

12        /// 加密

13        ///

14        /// 地址

15        ///

16        [WebMethod]

17        public string Encrypt(string url)

18        {

19            return DESEncryptor.ExecEncrypt(url);

20        }

21

22        /**

23        /// 解密

24        ///

25        /// 地址

26        ///

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代码中添加如下代码:

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"));

});

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

JavaScript高级程序设计 XML、Ajax 学习笔记

javascript 用记忆函数快速计算递归函数

Atlas学习手记(25):使用行为增强用户界面(五):AutoComplete Behavior

最常用的五类CSS选择器

Lazy Load 延迟加载图片的 jQuery 插件

Marquee标记在XHTML代码中该如何用

10g中构建“高”索引

用javascript自动显示最后更新时间

LINQ学习笔记:XDocument文档与XML声明

js在客户端验证密码强度,兼容FireFox和IE

JQuery下的Live方法和$.browser方法使用代码

常用MySQL的命令集锦

javascript 随意拖动的小方块特效

Linux中APMD参数以及使用介绍

php播放器隐藏播放地址,window_ASP中实现对MediaPlayer控件播放文件地址隐藏的解决方案,在播放视频时,直接查看页面 - phpStudy...相关推荐

  1. 在Winform(C++/CLR)平台设计的(本地在线)音乐播放器(基于WMP(Windows Media Player)控件实现)

    首先,祝贺阿根廷获得2022世界杯冠军! 文章目录 简介 功能展示 1.用户注册.登录.自定义主题 2.本地歌曲导入.播放并读取歌词文件 3.在线歌曲搜索.收藏.播放 4.歌词同步及桌面歌词 5.在线 ...

  2. Ubuntu下安装Audacious音乐播放器详细配置方法(中文化,歌词显示等)

    Windows下有不少比较有名气的音乐播放器,例如千千静听,Kugou,foobar和QQ音乐等,但是ubuntu下的音乐播放器则没有这么丰富,但是现在则给大家介绍一款ubuntu下的"千千 ...

  3. android 播放器封装,Android视频播放最全总结:MediaPlayer+TextureView封装一个完美实现全屏、小窗视频播放器,附项目源码...

    原标题:Android视频播放最全总结:MediaPlayer+TextureView封装一个完美实现全屏.小窗视频播放器,附项目源码 作者:xiaoyanger 来源:http://www.jian ...

  4. c#winform演练 ktv项目 MediaPlayer控件播放音乐

    c#winform演练 ktv项目 MediaPlayer控件播放音乐 如何播放媒体 媒体控件.URL = 媒体文件的路径 路径说明 绝对路径 从盘符到目录到文件的完整路径 相对路径 项目的bin下有 ...

  5. VS2015中配置MSComm通讯控件和注意事项

    1.MSCommon通讯控件前文回顾 MSComm 作为一个串行通讯控件.在为程序员串口通讯编程节省了很多时间,基于对话框的应用中加入一个MSComm控件非常简单. MSComm控件提供了两种处理通信 ...

  6. MFC中使用TAB Control控件

    2019独角兽企业重金招聘Python工程师标准>>> MFC中使用TAB Control控件 MFC中使用TAB Control控件(转) 假如我现在有个SDI程序,View是Fo ...

  7. VS2010中MSCOMM 串口通信控件的注册使用

    VS2010本身并不自带MSCOMM控件,因此在Win7.win8/8.1系统中使用VS2010进行串口编程时, 在COM控件一栏中没法找到. 网上解决这个问题的文章很多,但尝试了很多种方法都没有解决 ...

  8. 【小沐学C#】WPF中嵌入web网页控件(WebBrowser、WebView2、CefSharp)

    文章目录 1.简介 1.1 WPF简介 1.2 WPF 体系结构 1.3 WPF入门开发 2.WebBrowser 2.1 WebBrowser特点 2.2 WebBrowser常用的属性.方法和事件 ...

  9. ASP.NET中AJAX的UpdatePannel控件的用法

    ScriptManager和UpdatePanel控件联合使用可以实现页面异步局部更新的效果.其中的UpdatePanel就是设置页面中异 步局部更新区域,它必须依赖于ScriptManager存在, ...

最新文章

  1. mysql注入实例获取答案_本文实例讲述了MySQL解决SQL注入的另类方法。分享给大家供大家参考,具体如下:问题解读我觉得,这个问题每年带来的成本可以高达数十亿美元了。本文就来谈谈,...
  2. 【译】BINDER - ANALYSIS AND EXPLOITATION OF CVE-2020-0041
  3. LwIP应用开发笔记之六:LwIP无操作系统TCP客户端
  4. 网鼎杯2020php反序列化,2020-网鼎杯(青龙组)_Web题目 AreUserialz Writeup
  5. 零基础学Python的几个经典例子
  6. CVPR2021 最佳论文候选—提高图像风格迁移的鲁棒性
  7. Activity间数据传输
  8. mysql 配置详解
  9. apache ab 压测
  10. 2018年单招理科考计算机吗,2018高职单招考试难吗 单招考试的内容
  11. Java I/O总结——OutputStream
  12. 第二十三章:触发器和行为(九)
  13. Linux系统编程---消息队列
  14. CentOS服务器ntpdate同步及使用ntpdate同步时钟服务器时间
  15. 什么是表压?什么是绝压?表压和绝压什么关系?
  16. 前端安全须知(淘宝)
  17. 如何运营好微信公众号
  18. html布局直接填充,css实现自动填充布局
  19. 沙盒型源码安全解决方案
  20. 区块链溯源是什么?一文带您读懂! 1

热门文章

  1. 人像美白的python实现
  2. 禅道软件是干嘛的(一)
  3. 北理工课程表导入到Google日历中
  4. first-child和last-child的一点理解
  5. 什么是敏捷软件开发?
  6. Storage Systems
  7. 戴维南和诺顿定理的验证
  8. 想装一台自己的电脑,可以先了解下这些问题
  9. 服务器与虚拟机进行双机热备,基于虚拟机的双机热备高可靠协同办公系统
  10. 禁用服务器系统关机,关机 允许系统在无需登录 Windows 10 (的情况下) - Windows security | Microsoft Docs...