数据推送 根据url获取视频信息
最近需要做一个视频数据推送,数据字段比较少,视频的没什么信息只有视频url,需要根据url获取视频的一些信息,其中用到了xuggle-xuggler-5.4.jar这个jar包挺好用的,但是在使用过程中发现有一些问题,jdk64位运行处理MP4文件时会出问题,没办法重新下了一个32的jdk,附上代码和jar包。
xuggle-xuggler-5.4.jar下载: https://download.csdn.net/download/ll185/12038506
package com.ll.Test;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.ll.dao.ActivityMapper;
import com.ll.dao.VideoMapper;
import com.ll.entity.Activity;
import com.ll.entity.Video;
import com.ll.entity.VideoProcess;
import com.xuggle.xuggler.IContainer;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class VideoPush {
@Test
public void test01() throws Exception{
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
Reader reader = Resources.getResourceAsReader("sqlmap-config.xml");
SqlSessionFactory factory = builder.build(reader);
SqlSession session = factory.openSession();
VideoMapper mapper = session.getMapper(VideoMapper.class);
ActivityMapper mapper2 = session.getMapper(ActivityMapper.class);
JSONObject json = new JSONObject();
String activityName = "";
String activityBeginDate = "";
String activityType = "";
String activityVideoGatherer = "";
String activitySite ="";
String fileSize = "";
String durations="";
String pushUrl = "推送地址";
String strd = "yyyy-MM-dd";
SimpleDateFormat format = new SimpleDateFormat(strd);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
int i = 0;
List<Video> lists = mapper.loadAll();
for (Video video : lists) {
net.sf.json.JSONArray jsona = new net.sf.json.JSONArray();
List<Activity> activitys = mapper2.loadAllActivity(video.getVideo_id());
if(activitys.size()>=1){
Activity activity = activitys.get(0);
activityName = activity.getActivity_name();
activityType = activity.getActivity_type();
activityVideoGatherer = activity.getActivity_video_gatherer();
activitySite = activity.getActivity_site();
activityBeginDate=activity.getActivity_begin_date();
if(activityBeginDate!=null && activityBeginDate!="" && activityBeginDate.length()>0){
Date date = format.parse(activityBeginDate);
activityBeginDate = format1.format(date);
}
}
URL url = new URL(video.getVideo_address());
HttpURLConnection con = (HttpURLConnection) url.openConnection();
int state = con.getResponseCode();
if(state!=404){
//System.out.println(video.getVideo_address());
VideoProcess process = getvideoInfo(video.getVideo_address());
if(process!=null){
fileSize = process.getFileSize();
durations = process.getDurations();
}
}
json.put("id", video.getVideo_id());
i++;
System.out.println(i);
jsona.add(json);
System.out.println(jsona);
String res = PushData(pushUrl, jsona);
System.out.println(res);
JSONObject jsonr = JSONObject.fromObject(res);
if(!"Success".equals(jsonr.get("message"))){
break;
}
}
}
private static String PushData(String pushUrl,JSONArray jsona) throws Exception{
String charset = "UTF-8";
CloseableHttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost(pushUrl);
post.setHeader("Content-Type", "application/json;charset=UTF-8");
//StringEntity(jsona.toString())数据推送过去会出现中文乱码,所以加上了utf-8
StringEntity se = new StringEntity(jsona.toString(),"utf-8");
se.setContentEncoding(charset);
se.setContentType("application/json");
post.setEntity(se);
CloseableHttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
String resData = EntityUtils.toString(response.getEntity());
client.close();
return resData;
}
/**
* 根据url获取视频时长和大小
* @param filename
* @return
*/
private static VideoProcess getvideoInfo(String filename){
VideoProcess process = new VideoProcess();
IContainer container = IContainer.make();
int result = container.open(filename, IContainer.Type.READ, null);
if (result<0){
//System.out.println(111);
}
long duration = container.getDuration();
long fileSize = container.getFileSize();
long secondDuration = duration/1000000;
String resData = stringForTime(secondDuration);
process.setFileSize(fileSize/1024+"");
process.setDurations(resData);
return process;
}
/**
* 将获取的时长(秒)转换为00:00:00格式
* @param seconds
* @return
*/
private static String stringForTime(long seconds) {
long hh;
long mm;
long ss;
String hh1;
String mm1;
String ss1;
if(seconds<=0){
return "00:00:00";
}
hh = seconds/3600|0;
seconds = seconds-hh*3600;
if(hh<10){
hh1 = "0"+hh;
}else{
hh1 = hh+"";
}
mm = seconds/60|0;
ss = seconds-mm*60;
if(mm<10){
mm1 = "0"+mm;
}else{
mm1 = mm+"";
}
if(ss<10){
ss1 = "0"+ss;
}else{
ss1 = ss+"";
}
return hh1+":"+mm1+":"+ss1;
}
}