Commit f1f7d5ee authored by yanzg's avatar yanzg

下载视频

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