微软山西移动流媒体发布平台时遇到MediaPlayer控件播放地址隐藏的问题
在播放视频时,直接查看页面源文件可看到视频文件地址,MediaPlayer将在页面上加上如下初始化语句:
1
Sys.Application.add_init(function() {2
$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"));3
});
解决方案是先建立一个字符串加密解密服务
加密、解密工具类:
1
/// 2
/// 对字符串进行、加解密的工具类3
/// 4
public class DESEncryptor5
{6
静态公共方法32

33
私有成员 63

64
公共属性 122

123
构造函数 134

135
DES加密字符串 161

162
DES解密字符串 189
}
加密、解密WebService,调用工具内加密、解密方法:
1
/// 2
/// Summary description for Service13
/// 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.WebService10
{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
}
在播放页面加载时,先调用WebService内加密方法对播放地址进行加密,然后注册JavaScript脚本调用视频文件播放方法:
1
protected void Page_Load(object sender, EventArgs e)2
{3
if (!IsPostBack)4
{5
//对播放地址进行加密6
string encryptUrl = local.Encrypt(playUrl);7
//注册脚本,调用javascript播放方法8
Page.ClientScript.RegisterStartupScript(this.GetType(), "", " setTimeout(\"onPlay('" + encryptUrl + "')\",1000)", true); 9
}10
}
JavaScript调用WebService通过微软提供的WebService.htc实现,ASP.NET中使用WebService.htc需要在HTML代码中添加如下代码:
注意:该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初始化语句更新为如下:
1
Sys.Application.add_init(function() {2
$create(Sys.UI.Silverlight.MediaPlayer, {"autoPlay":true,"scaleMode":1,"source":"../UserControl/playerTheme/VIPPlayer.xaml","volume":1}, null, null, $get("ump_player_parent"));3
});来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-609338/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12639172/viewspace-609338/
本文介绍了解决MediaPlayer控件在播放视频时,直接查看页面源文件可看到视频文件地址的问题的方法。通过建立字符串加密解密服务,先对播放地址进行加密,然后在播放页面加载时调用WebService内加密方法加密播放地址,并注册JavaScript脚本调用视频文件播放方法。最终在页面上查看源文件便无法查看到播放文件地址。
4624

被折叠的 条评论
为什么被折叠?



