2013年12月19日星期四

视频播放实时记录日志并生成XML文件 - 飞鸟_Asuka

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
视频播放实时记录日志并生成XML文件 - 飞鸟_Asuka  阅读原文»

需求描述:

在JWPlayer视频播放过程中,要求实时记录视频观看者播放、暂停的时间,并记录从暂停到下一次播放时所经过的时间。将所有记录保存为XML文件,以方便数据库的后续使用。

实现过程:

尝试1:使用JS操作文件

网上查阅资料得知JS有ActiveXObject(仅用于IE和IE内核浏览器)以及XmlHttpRequest(通用)可以操作XML文件,但实际发现JS并没有写入文件的权限,因此放弃。

尝试2:使用ASPX页面实现网页本地保存

一开始只考虑使用单个ASPX页面,在后台的.cs文件中实现存取,但是后来发现TextBox.TextChanged事件并不是实时触发,也是需要刷新页面的,另外刷新页面之后视频会重新加载,达不到实时记录的目的。因此同样放弃这种方案,考虑使用AJAX配合ASHX一般处理程序来实现。

尝试3:AJAX+ASHX直接存取

本来的构想是:前端页面通过AJAX方式访问到ASHX中的ProcessRequest()方法,通过XmlDocument类及其相关操作生成XML文件,最后通过XmlDocument.Save()方法保存在服务器上。但是实际运行的过程中发现生成的XML文件只保存了最后的一次播放/暂停的时间。通过查阅资料、上网查询以及本地调试后得知,AJAX访问后台处理过程每次都会重新构造请求,而处理请求的逻辑中又包含了创建XML文件的过程,于是新的文件就将旧的文件覆盖了。因此无法采用这种直接存取的方式,并且由于要求实时记录,所以也不能采用Session或是Cache等保存这些时间值,换句话说,不能通过前端页面的.cs文件中去记录cache。因此有了下面的最终方案。

最终方案:AJAX+Stream+ASHX间接存取

既然无法保存在内存中,那么就把它拿出来。基于这种考虑,想到了通过日志文件记录所需记录的时间值(字符串),最后再整体输出成XML文件。

序列图如下:

总结

Ajax每次请求后台处理过程时会重新创建一个HttpHandler,使得一切与该HttpHandler所关联的对象全部都被重新创建,因此做不到将所要构建的对象保存在内存中。

解决方案是:1、通过Http Session或者Cache等方式暂存数据,这种方法适用于非实时更改的,相对固定的数据。2、通过外部文件转移数据,即适用于非实时数据也适用于实时数据,缺点是如果请求的数量比较多,文件大小会快速增长,需要定期清除多余的文件,维护上要麻烦一点。

进一步要解决的问题

如何实现按用户(用户ID或观看视频的IP等信息)分别记录视频进度


本文链接:http://www.cnblogs.com/ryuasuka/p/3483632.html,转载请注明。

java mail qq邮箱配置 实例 - Hi_Amos  阅读原文»

程序入口:
Test_Email_N.java

import java.io.IOException;
import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class Test_Email_N {
public static void main(String args[]){
try {
send_email();
}
catch (Exception e) {
e.printStackTrace();
}
}

public static void send_email() throws IOException, AddressException, MessagingException{

String to
= "1215186706@qq.com";
String subject
= "subject";
String content
= "content";
Properties properties
= new Properties();
properties.put(
"mail.smtp.host", "smtp.qq.com");
properties.put(
"mail.smtp.port", "25");
properties.put(
"mail.smtp.auth", "true");
Authenticator authenticator
= new Email_Authenticator("1215186706@qq.com", "password");
javax.mail.Session sendMailSession
= javax.mail.Session.getDefaultInstance(properties, authenticator);
MimeMessage mailMessage
= new MimeMessage(sendMailSession);
mailMessage.setFrom(
new InternetAddress("1215186706@qq.com"));
// Message.RecipientType.TO属性表示接收者的类型为TO
mailMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
mailMessage.setSubject(subject,
"UTF-8");
mailMessage.setSentDate(
new Date());
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart html = new MimeBodyPart();
html.setContent(content.trim(),
"text/html; charset=utf-8");
mainPart.addBodyPart(html);
mailMessage.setContent(mainPart);
Transport.send(mailMessage);
}
}

其中依赖的jar包为javax.mail,下面是maven管理的:

<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.5.0-b01</version>
</dependency>

这里继承了Authenticator 类,关于name,和password的:

package com.infomorrow.webtest.JuxinliTest.restdetect;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class Email_Authenticator extends Authenticator {
String userName
= null;
String password
= null;
public Email_Authenticator() {
}
public Email_Authenticator(String username, String password) {
this.userName = username;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
}

配置就这么多,把邮箱密码改成自己的就可以了,否则会报错。程序到这就可以运行了!

下面介绍的是配置properties文件来管理账号密码:

如下图,新建一个email.propertis文件。

email.propertis:

mail.smtp.host=smtp.qq.com
mail.smtp.port
=25
username
=1215186706@qq.com
password
=password
Test_Email.java 代码改为如下:
package com.infomorrow.webtest.JuxinliTest.restdetect;


import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class阅读更多内容

没有评论:

发表评论