我有一个项目,我需要从我的服务器上流式传输视频,我正在使用nginx来做这件事,也是使用spring mvc开发的webapp,以及tomcat来包含它。
它的工作原理:
java app生成md5散列链并将其发送给客户端进行请求,客户端向nginx服务器发出带有散列参数的请求,nginx服务器对散列值进行校验并拒绝处理。
下面是创建散列链接的java代码:
public static void main(String[] args) throws ParseException, NoSuchAlgorithmException {
String fileName = "bbb.mp4";
Date date = new Date(System.currentTimeMillis());
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
String monthName = getMonthForInt(month);
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int min = calendar.get(Calendar.MINUTE);
System.out.println("year " +year +", month "+ month +",day " +day + ", hour " +hour +" min "+ min);
String str = monthName +" "+ day+" "+year+" "+hour+":"+min+":52.454 UTC";
SimpleDateFormat df = new SimpleDateFormat("MMM dd yyyy HH:mm:ss.SSS zzz");
Date newDate = df.parse(str);
long epoch = date.getTime();
System.out.println(epoch);
String input = epoch +"/hls/"+fileName+" enigma";
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(input.getBytes());
byte[] enc = md.digest();
String md5Sum = new sun.misc.BASE64Encoder().encode(enc);
String hash = md5Sum.substring( 0,md5Sum.length() -2);
String link = "http://tutorme.ae/hls/"+fileName+"?md5="+hash+"&expires="+epoch;
System.out.println(link);
}输出应该是这样的:
http://tutorme.ae/hls/bbb.mp4?md5=D3U9uEtwHcgyNL3BeyfLsw&expires=1490178647610
所以这段代码工作了50%,另外50%它产生了一个更小的链接:
http://tutorme.ae/hls/bbb.mp4?md5=26k/bhvQP6JC1ehR+XmzuA&expires=1490178663810
我不知道它为什么这样做,而且线索会有帮助。
谢谢
发布于 2017-03-22 19:04:51
很抱歉,我只是添加了下面这行代码来修复它:
hash = hash.replace("/", "_");在最后一行。我不知道原因,实际上只是因为linux命令行中的散列不同于java。如果有人能解释一下那就太好了
https://stackoverflow.com/questions/42949217
复制相似问题