数据推送 根据url获取视频信息

数据推送 根据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;
	}
	
	
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值