Commit f1f7d5ee authored by yanzg's avatar yanzg

下载视频

parent 2b0ae935
......@@ -4,7 +4,6 @@ import com.yanzuoguang.util.MediaHelper;
import com.yanzuoguang.util.exception.CodeException;
import com.yanzuoguang.util.helper.FileHelper;
import com.yanzuoguang.util.helper.JsonHelper;
import com.yanzuoguang.util.helper.StringHelper;
import com.yanzuoguang.util.thread.ThreadHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -64,12 +63,13 @@ public class MediaFirst {
@Override
public void run() {
// 开始开启线程运行
ThreadHelper.runThread(new Runnable() {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
handle(req);
}
});
thread.start();
}
});
}
......@@ -83,11 +83,11 @@ public class MediaFirst {
}
private File getDownM3muFile(MediaReqVo req) {
return null;
return new File(req.getImageUrl() + ".tmp.mp4");
}
private File getCatTempFile(MediaReqVo req) {
return null;
return new File(req.getImageUrl() + ".tmp.jpg");
}
private void handle(MediaReqVo req) {
......@@ -96,56 +96,58 @@ public class MediaFirst {
if (res == null) {
res = JsonHelper.to(req, MediaResVo.class);
}
try {
// 下载m3mu并转换成mp4
String name = StringHelper.getNewID();
downM3mu(req);
// 转换为图片
catImage(req);
// 将下载临时文件移动到临时文件
// this.getCache().lockTempFile(req, new Runnable() {
// @Override
// public void run() {
// File catTemp = getCatTempFile(req);
// File fileTemp = getFileTemp(req);
// if (catTemp.exists()) {
// catTemp.renameTo(fileTemp);
// }
// }
// });
this.getCache().lockTempFile(req, new Runnable() {
@Override
public void run() {
File mp4 = getDownM3muFile(req);
File catTemp = getCatTempFile(req);
File fileTemp = getFileTemp(req);
if (catTemp.exists()) {
catTemp.renameTo(fileTemp);
}
mp4.delete();
}
});
// 写入缓存
this.getCache().sub(res);
// 判断是否还有执行次数
if (res.getCount() < 1) {
if (isFinish(req)) {
break;
}
// 等待下一次截图
} catch (Exception ex) {
ex.printStackTrace();
}
ThreadHelper.sleep(res.getSplit());
} while (true);
} while (!isFinish(req));
}
private void downM3mu(MediaReqVo req) {
try {
String targetFile = getTargetFile(req.getImageUrl());
private void downM3mu(MediaReqVo req) throws Exception {
String localUrl = getDownM3muFile(req).getAbsolutePath();
HlsDownloader downloader = new HlsDownloader(req.getUrl(),
targetFile + ".mp4",
localUrl,
1,
req.getCount()
1
);
downloader.download(false, true);
} catch (Exception e) {
e.printStackTrace();
}
}
private void catImage(MediaReqVo req) {
String targetFile = getTargetFile(req.getImageUrl());
MediaHelper.getVideoFirstImage(targetFile + ".mp4", targetFile + ".jpg");
String localTempUrl = this.getDownM3muFile(req).getAbsolutePath();
String localCatUrl = this.getCatTempFile(req).getAbsolutePath();
MediaHelper.getVideoFirstImage(localTempUrl, localCatUrl);
}
private String getTargetFile(String file) {
// 注意,路径应为文件在工程中的相对路径
File f = new File(file);
return f.getAbsolutePath();
public boolean isFinish(MediaReqVo req) {
MediaResVo res = this.getCache().get(req);
System.out.println("剩余次数:" + res.getCount());
// 判断是否还有执行次数
return res.getCount() < 1;
}
}
......@@ -31,16 +31,22 @@ public class MediaFirstTest {
@Test
public void test() {
MediaFirst first = new MediaFirst(new MediaCacheLocal());
for (int i = 0; i < 50; i++) {
MediaReqVo req=new MediaReqVo();
MediaReqVo req = new MediaReqVo();
req.setUrl("http://rtmp.tourbida.com/hls/f4c1444c-1b31-4de8-9bd9-7ff6a231e262.m3u8");
req.setCount(1);
req.setSplit(3000);
req.setImageUrl("target/videodir/f4c1444c-1b31-4de8-9bd9-7ff6a231e262_"+i);
req.setImageUrl(getTargetFile("target/xxx.jpg"));
req.setCount(100);
req.setSplit(1000);
for (int i = 0; i < 1000; i++) {
MediaResVo start = first.start(req);
ThreadHelper.sleep(5000);
ThreadHelper.sleep(50 * 1000);
}
// 等待视频处理结束
while (!first.isFinish(req)) {
ThreadHelper.sleep(100);
}
}
......
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