Commit 2b0ae935 authored by yanxia54's avatar yanxia54

异常信息优化

parent fe741404
package com.yanzuoguang.media; package com.yanzuoguang.media;
import com.yanzuoguang.util.helper.JsonHelper; import com.yanzuoguang.util.helper.JsonHelper;
import org.springframework.stereotype.Component;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -10,7 +11,7 @@ import java.util.Map; ...@@ -10,7 +11,7 @@ import java.util.Map;
* *
* @author 颜佐光 * @author 颜佐光
*/ */
public class MediaCacheLocal implements MediaCacheBase { public class MediaCacheLocal implements MediaCache {
private Map<String, MapLock> mapLock = new HashMap<String, MapLock>(); private Map<String, MapLock> mapLock = new HashMap<String, MapLock>();
......
package com.yanzuoguang.media; package com.yanzuoguang.media;
import com.yanzuoguang.util.MediaHelper;
import com.yanzuoguang.util.exception.CodeException; import com.yanzuoguang.util.exception.CodeException;
import com.yanzuoguang.util.helper.FileHelper; import com.yanzuoguang.util.helper.FileHelper;
import com.yanzuoguang.util.helper.JsonHelper; import com.yanzuoguang.util.helper.JsonHelper;
import com.yanzuoguang.util.helper.StringHelper;
import com.yanzuoguang.util.thread.ThreadHelper; import com.yanzuoguang.util.thread.ThreadHelper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -45,7 +47,7 @@ public class MediaFirst { ...@@ -45,7 +47,7 @@ public class MediaFirst {
throw new CodeException("请通过程序编写视频缓存处理对象"); throw new CodeException("请通过程序编写视频缓存处理对象");
} }
// 将临时文件移动到正式文件 // 将临时文件移动到正式文件
cache.lockTempFile(req, new Runnable() { this.getCache().lockTempFile(req, new Runnable() {
@Override @Override
public void run() { public void run() {
File file = getFile(req); File file = getFile(req);
...@@ -90,27 +92,28 @@ public class MediaFirst { ...@@ -90,27 +92,28 @@ public class MediaFirst {
private void handle(MediaReqVo req) { private void handle(MediaReqVo req) {
do { do {
MediaResVo res = cache.get(req); MediaResVo res = this.getCache().get(req);
if (res == null) { if (res == null) {
res = JsonHelper.to(req, MediaResVo.class); res = JsonHelper.to(req, MediaResVo.class);
} }
// 下载m3mu并转换成mp4 // 下载m3mu并转换成mp4
String name = StringHelper.getNewID();
downM3mu(req); downM3mu(req);
// 转换为图片 // 转换为图片
catImage(req); catImage(req);
// 将下载临时文件移动到临时文件 // 将下载临时文件移动到临时文件
cache.lockTempFile(req, new Runnable() { // this.getCache().lockTempFile(req, new Runnable() {
@Override // @Override
public void run() { // public void run() {
File catTemp = getCatTempFile(req); // File catTemp = getCatTempFile(req);
File fileTemp = getFileTemp(req); // File fileTemp = getFileTemp(req);
if (catTemp.exists()) { // if (catTemp.exists()) {
catTemp.renameTo(fileTemp); // catTemp.renameTo(fileTemp);
} // }
} // }
}); // });
// 写入缓存 // 写入缓存
cache.sub(res); this.getCache().sub(res);
// 判断是否还有执行次数 // 判断是否还有执行次数
if (res.getCount() < 1) { if (res.getCount() < 1) {
break; break;
...@@ -122,10 +125,27 @@ public class MediaFirst { ...@@ -122,10 +125,27 @@ public class MediaFirst {
} }
private void downM3mu(MediaReqVo req) { private void downM3mu(MediaReqVo req) {
try {
String targetFile = getTargetFile(req.getImageUrl());
HlsDownloader downloader = new HlsDownloader(req.getUrl(),
targetFile + ".mp4",
1,
req.getCount()
);
downloader.download(false, true);
} catch (Exception e) {
e.printStackTrace();
}
} }
private void catImage(MediaReqVo req) { private void catImage(MediaReqVo req) {
String targetFile = getTargetFile(req.getImageUrl());
MediaHelper.getVideoFirstImage(targetFile + ".mp4", targetFile + ".jpg");
}
private String getTargetFile(String file) {
// 注意,路径应为文件在工程中的相对路径
File f = new File(file);
return f.getAbsolutePath();
} }
} }
package helper; package helper;
import com.yanzuoguang.media.HlsDownloader; import com.yanzuoguang.media.*;
import com.yanzuoguang.media.MediaFirst;
import com.yanzuoguang.media.MediaReqVo;
import com.yanzuoguang.media.MediaResVo;
import com.yanzuoguang.util.MediaHelper; import com.yanzuoguang.util.MediaHelper;
import com.yanzuoguang.util.YzgError; import com.yanzuoguang.util.YzgError;
import com.yanzuoguang.util.thread.ThreadHelper; import com.yanzuoguang.util.thread.ThreadHelper;
...@@ -33,15 +30,14 @@ public class MediaFirstTest { ...@@ -33,15 +30,14 @@ public class MediaFirstTest {
@Test @Test
public void test() { public void test() {
MediaFirst first = new MediaFirst(); MediaFirst first = new MediaFirst(new MediaCacheLocal());
for (int i = 0; i < 1000; i++) { for (int i = 0; i < 50; i++) {
MediaResVo start = first.start(new MediaReqVo()); MediaReqVo req=new MediaReqVo();
File file = new File(start.getImageUrl()); req.setUrl("http://rtmp.tourbida.com/hls/f4c1444c-1b31-4de8-9bd9-7ff6a231e262.m3u8");
if (file.exists()) { req.setCount(1);
System.out.println("文件" + file.getAbsolutePath() + "已经存在"); req.setSplit(3000);
} else { req.setImageUrl("target/videodir/f4c1444c-1b31-4de8-9bd9-7ff6a231e262_"+i);
System.out.println("文件" + file.getAbsolutePath() + "不存在"); MediaResVo start = first.start(req);
}
ThreadHelper.sleep(5000); ThreadHelper.sleep(5000);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment