Compare commits
6 Commits
3.7.6
...
3.7.8-pre-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c9c00c38c6 | ||
|
|
846235a826 | ||
|
|
06dd6b35e0 | ||
|
|
944d69a1af | ||
|
|
1ee36e0bc1 | ||
|
|
0765ab67f7 |
@@ -16,29 +16,10 @@
|
||||
package com.arialyy.aria.core.command;
|
||||
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.common.AbsEntity;
|
||||
import com.arialyy.aria.core.download.DGTaskWrapper;
|
||||
import com.arialyy.aria.core.download.DTaskWrapper;
|
||||
import com.arialyy.aria.core.download.DownloadEntity;
|
||||
import com.arialyy.aria.core.download.DownloadGroupEntity;
|
||||
import com.arialyy.aria.core.inf.IEntity;
|
||||
import com.arialyy.aria.core.inf.IOptionConstant;
|
||||
import com.arialyy.aria.core.manager.TaskWrapperManager;
|
||||
import com.arialyy.aria.core.queue.DGroupTaskQueue;
|
||||
import com.arialyy.aria.core.queue.DTaskQueue;
|
||||
import com.arialyy.aria.core.queue.UTaskQueue;
|
||||
import com.arialyy.aria.core.task.AbsTask;
|
||||
import com.arialyy.aria.core.upload.UTaskWrapper;
|
||||
import com.arialyy.aria.core.upload.UploadEntity;
|
||||
import com.arialyy.aria.core.wrapper.AbsTaskWrapper;
|
||||
import com.arialyy.aria.core.wrapper.ITaskWrapper;
|
||||
import com.arialyy.aria.orm.DbEntity;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
import com.arialyy.aria.util.NetUtils;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
/**
|
||||
* Created by AriaL on 2017/6/13.
|
||||
@@ -50,7 +31,6 @@ import java.util.concurrent.Executors;
|
||||
*/
|
||||
final class ResumeAllCmd<T extends AbsTaskWrapper> extends AbsNormalCmd<T> {
|
||||
|
||||
|
||||
ResumeAllCmd(T entity, int taskType) {
|
||||
super(entity, taskType);
|
||||
}
|
||||
@@ -60,8 +40,7 @@ final class ResumeAllCmd<T extends AbsTaskWrapper> extends AbsNormalCmd<T> {
|
||||
ALog.w(TAG, "恢复任务失败,网络未连接");
|
||||
return;
|
||||
}
|
||||
new Thread(new ResumeThread(isDownloadCmd, IEntity.STATE_COMPLETE)).start();
|
||||
new Thread(new ResumeThread(isDownloadCmd,
|
||||
String.format("state!=%s", IEntity.STATE_COMPLETE))).start();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -47,11 +47,11 @@ public class ResumeThread implements Runnable {
|
||||
private String TAG = CommonUtil.getClassName(getClass());
|
||||
private List<AbsTaskWrapper> mWaitList = new ArrayList<>();
|
||||
private boolean isDownloadCmd;
|
||||
private int excludeState;
|
||||
private String sqlCondition;
|
||||
|
||||
ResumeThread(boolean isDownload, int excludeState) {
|
||||
ResumeThread(boolean isDownload, String sqlCondition) {
|
||||
this.isDownloadCmd = isDownload;
|
||||
this.excludeState = excludeState;
|
||||
this.sqlCondition = sqlCondition;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -63,8 +63,8 @@ public class ResumeThread implements Runnable {
|
||||
if (type == 1) {
|
||||
List<DownloadEntity> entities =
|
||||
DbEntity.findDatas(DownloadEntity.class,
|
||||
"isGroupChild=? AND state!=? ORDER BY stopTime DESC", "false",
|
||||
String.valueOf(excludeState));
|
||||
String.format("NOT(isGroupChild) AND NOT(isComplete) AND %s ORDER BY stopTime DESC",
|
||||
sqlCondition));
|
||||
if (entities != null && !entities.isEmpty()) {
|
||||
for (DownloadEntity entity : entities) {
|
||||
addResumeEntity(TaskWrapperManager.getInstance()
|
||||
@@ -73,8 +73,9 @@ public class ResumeThread implements Runnable {
|
||||
}
|
||||
} else if (type == 2) {
|
||||
List<DownloadGroupEntity> entities =
|
||||
DbEntity.findDatas(DownloadGroupEntity.class, "state!=? ORDER BY stopTime DESC",
|
||||
String.valueOf(excludeState));
|
||||
DbEntity.findDatas(DownloadGroupEntity.class,
|
||||
String.format("NOT(isComplete) AND %s ORDER BY stopTime DESC",
|
||||
sqlCondition));
|
||||
if (entities != null && !entities.isEmpty()) {
|
||||
for (DownloadGroupEntity entity : entities) {
|
||||
addResumeEntity(
|
||||
@@ -84,8 +85,9 @@ public class ResumeThread implements Runnable {
|
||||
}
|
||||
} else if (type == 3) {
|
||||
List<UploadEntity> entities =
|
||||
DbEntity.findDatas(UploadEntity.class, "state!=? ORDER BY stopTime DESC",
|
||||
String.valueOf(excludeState));
|
||||
DbEntity.findDatas(UploadEntity.class,
|
||||
String.format("NOT(isComplete) AND %s ORDER BY stopTime DESC",
|
||||
sqlCondition));
|
||||
if (entities != null && !entities.isEmpty()) {
|
||||
for (UploadEntity entity : entities) {
|
||||
addResumeEntity(TaskWrapperManager.getInstance()
|
||||
@@ -125,7 +127,7 @@ public class ResumeThread implements Runnable {
|
||||
queue = DGroupTaskQueue.getInstance();
|
||||
}
|
||||
|
||||
if (queue == null){
|
||||
if (queue == null) {
|
||||
ALog.e(TAG, "任务类型错误");
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -91,6 +91,7 @@ final class StartCmd<T extends AbsTaskWrapper> extends AbsNormalCmd<T> {
|
||||
* 当缓冲队列为null时,查找数据库中所有等待中的任务
|
||||
*/
|
||||
private void findAllWaitTask() {
|
||||
new Thread(new ResumeThread(isDownloadCmd, IEntity.STATE_WAIT)).start();
|
||||
new Thread(
|
||||
new ResumeThread(isDownloadCmd, String.format("state=%s", IEntity.STATE_WAIT))).start();
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,9 @@
|
||||
## 开发日志
|
||||
+ v_3.7.8-pre-1(2019/11/20)
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/526
|
||||
+ v_3.7.7 (2019/11/20)
|
||||
- 修复ftp无法完成下载的问题
|
||||
- 修复一个http下载崩溃的问题
|
||||
+ v_3.7.6 (2019/11/19)
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/505
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/516
|
||||
|
||||
@@ -85,6 +85,8 @@ public class FtpDirDLoaderUtil extends AbsGroupUtil {
|
||||
* @param needCloneInfo 第一次下载,信息已经在{@link FtpDirInfoThread}中clone了
|
||||
*/
|
||||
private void startDownload(boolean needCloneInfo) {
|
||||
// ftp需要获取完成只任务信息才更新只任务数量
|
||||
getState().setSubSize(getWrapper().getSubTaskWrapper().size());
|
||||
try {
|
||||
LOCK.lock();
|
||||
condition.signalAll();
|
||||
|
||||
@@ -73,6 +73,7 @@ public class DGroupLoaderUtil extends AbsGroupUtil {
|
||||
|
||||
@Override protected boolean onStart() {
|
||||
super.onStart();
|
||||
getState().setSubSize(getWrapper().getSubTaskWrapper().size());
|
||||
if (getState().getCompleteNum() == getState().getSubSize()) {
|
||||
mListener.onComplete();
|
||||
} else {
|
||||
|
||||
@@ -463,7 +463,8 @@ public class M3U8VodLoader extends BaseM3U8Loader {
|
||||
private int cancelNum = 0; // 已经取消的线程的数
|
||||
private int stopNum = 0; // 已经停止的线程数
|
||||
private int failNum = 0; // 失败的线程数
|
||||
private long progress; //当前总进度,百分比进度
|
||||
private long percent; //当前总进度,百分比进度
|
||||
private long progress;
|
||||
private TaskRecord taskRecord; // 任务记录
|
||||
private Looper looper;
|
||||
|
||||
@@ -480,6 +481,7 @@ public class M3U8VodLoader extends BaseM3U8Loader {
|
||||
}
|
||||
}
|
||||
this.listener = listener;
|
||||
progress = getEntity().getCurrentProgress();
|
||||
}
|
||||
|
||||
private void updateStateCount() {
|
||||
@@ -586,7 +588,7 @@ public class M3U8VodLoader extends BaseM3U8Loader {
|
||||
}
|
||||
break;
|
||||
case STATE_RUNNING:
|
||||
//progress += (long) msg.obj;
|
||||
progress += (long) msg.obj;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
@@ -610,7 +612,7 @@ public class M3U8VodLoader extends BaseM3U8Loader {
|
||||
int percent = completeNum * 100 / taskRecord.threadRecords.size();
|
||||
getEntity().setPercent(percent);
|
||||
getEntity().update();
|
||||
progress = percent;
|
||||
this.percent = percent;
|
||||
}
|
||||
|
||||
@Override public boolean isFail() {
|
||||
|
||||
@@ -81,8 +81,7 @@ public abstract class AbsGroupUtil implements IUtil, Runnable {
|
||||
* 初始化组合任务状态
|
||||
*/
|
||||
private void initState() {
|
||||
mState = new GroupRunState(getWrapper().getKey(), mListener,
|
||||
mGTWrapper.getSubTaskWrapper().size(), mSubQueue);
|
||||
mState = new GroupRunState(getWrapper().getKey(), mListener, mSubQueue);
|
||||
for (DTaskWrapper wrapper : mGTWrapper.getSubTaskWrapper()) {
|
||||
if (wrapper.getEntity().getState() == IEntity.STATE_COMPLETE) {
|
||||
mState.updateCompleteNum();
|
||||
|
||||
@@ -112,30 +112,4 @@ public abstract class AbsSubDLoadUtil implements IUtil {
|
||||
mSchedulers.obtainMessage(ISchedulers.STOP, this).sendToTarget();
|
||||
}
|
||||
}
|
||||
|
||||
//@Override public void start() {
|
||||
// if (mWrapper.getRequestType() == ITaskWrapper.D_HTTP) {
|
||||
// if (needGetInfo) {
|
||||
// new Thread(new HttpFileInfoThread(mWrapper, new OnFileInfoCallback() {
|
||||
//
|
||||
// @Override public void onComplete(String url, CompleteInfo info) {
|
||||
// mDLoader = new Downloader(mListener, mWrapper);
|
||||
// mDLoader.start();
|
||||
// }
|
||||
//
|
||||
// @Override public void onFail(AbsEntity entity, BaseException e, boolean needRetry) {
|
||||
// mSchedulers.obtainMessage(ISchedulers.FAIL, SubDLoadUtil.this).sendToTarget();
|
||||
// }
|
||||
// })).start();
|
||||
// } else {
|
||||
// mDLoader = new Downloader(mListener, mWrapper);
|
||||
// mDLoader.start();
|
||||
// }
|
||||
// } else if (mWrapper.getRequestType() == ITaskWrapper.D_FTP) {
|
||||
// mDLoader = new Downloader(mListener, mWrapper);
|
||||
// mDLoader.start();
|
||||
// } else {
|
||||
// ALog.w(TAG, String.format("不识别的类型,requestType:%s", mWrapper.getRequestType()));
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
@@ -72,14 +72,16 @@ public class GroupRunState {
|
||||
|
||||
private String mGroupHash;
|
||||
|
||||
GroupRunState(String groupHash, IDGroupListener listener, int subSize,
|
||||
SimpleSubQueue queue) {
|
||||
GroupRunState(String groupHash, IDGroupListener listener, SimpleSubQueue queue) {
|
||||
this.listener = listener;
|
||||
this.queue = queue;
|
||||
mSubSize = subSize;
|
||||
mGroupHash = groupHash;
|
||||
}
|
||||
|
||||
public void setSubSize(int subSize){
|
||||
mSubSize = subSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* 组合任务是否正在自行
|
||||
*
|
||||
|
||||
@@ -34,10 +34,6 @@ public abstract class AbsThreadTaskAdapter implements IThreadTaskAdapter {
|
||||
* 速度限制工具
|
||||
*/
|
||||
protected BandwidthLimiter mSpeedBandUtil;
|
||||
/**
|
||||
* 当前线程的下去区间的进度
|
||||
*/
|
||||
private long mRangeProgress;
|
||||
private ThreadRecord mThreadRecord;
|
||||
private IThreadTaskObserver mObserver;
|
||||
private AbsTaskWrapper mWrapper;
|
||||
@@ -48,7 +44,6 @@ public abstract class AbsThreadTaskAdapter implements IThreadTaskAdapter {
|
||||
mThreadRecord = config.record;
|
||||
mWrapper = config.taskWrapper;
|
||||
mThreadConfig = config;
|
||||
mRangeProgress = mThreadRecord.startLocation;
|
||||
if (getTaskConfig().getMaxSpeed() > 0) {
|
||||
mSpeedBandUtil = new BandwidthLimiter(getTaskConfig().getMaxSpeed(), config.startThreadNum);
|
||||
}
|
||||
@@ -68,7 +63,7 @@ public abstract class AbsThreadTaskAdapter implements IThreadTaskAdapter {
|
||||
* 当前线程的下去区间的进度
|
||||
*/
|
||||
protected long getRangeProgress() {
|
||||
return mRangeProgress;
|
||||
return mObserver.getThreadProgress();
|
||||
}
|
||||
|
||||
protected ThreadRecord getThreadRecord() {
|
||||
|
||||
@@ -53,4 +53,9 @@ public interface IThreadTaskObserver {
|
||||
* @param len 新增的长度
|
||||
*/
|
||||
void updateProgress(long len);
|
||||
|
||||
/**
|
||||
* 获取线程当前进度
|
||||
*/
|
||||
long getThreadProgress();
|
||||
}
|
||||
|
||||
@@ -318,6 +318,11 @@ public class ThreadTask implements IThreadTask, IThreadTaskObserver {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getThreadProgress() {
|
||||
return mRangeProgress;
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消任务
|
||||
*/
|
||||
|
||||
@@ -101,9 +101,6 @@ public class ComponentUtil {
|
||||
public <T extends IUtil> T buildUtil(AbsTaskWrapper wrapper, IEventListener listener) {
|
||||
int requestType = wrapper.getRequestType();
|
||||
String className = null;
|
||||
if (requestType == 1){
|
||||
throw new IllegalArgumentException("xxxx");
|
||||
}
|
||||
switch (requestType) {
|
||||
case ITaskWrapper.M3U8_LIVE:
|
||||
className = "com.arialyy.aria.m3u8.live.M3U8LiveUtil";
|
||||
|
||||
26
README.md
26
README.md
@@ -44,16 +44,16 @@ Aria有以下特点:
|
||||
|
||||
## 引入库
|
||||
[](https://github.com/AriaLyy/Aria/blob/master/LICENSE)
|
||||
[](https://github.com/AriaLyy/Aria)
|
||||
[](https://github.com/AriaLyy/Aria)
|
||||
[](https://github.com/AriaLyy/Aria)
|
||||
[](https://github.com/AriaLyy/Aria)
|
||||
[](https://github.com/AriaLyy/Aria)
|
||||
[](https://github.com/AriaLyy/Aria)
|
||||
[](https://github.com/AriaLyy/Aria)
|
||||
[](https://github.com/AriaLyy/Aria)
|
||||
|
||||
```java
|
||||
implementation 'com.arialyy.aria:core:3.7.6'
|
||||
annotationProcessor 'com.arialyy.aria:compiler:3.7.6'
|
||||
implementation 'com.arialyy.aria:ftpComponent:3.7.6' # 如果需要使用ftp,请增加该组件
|
||||
implementation 'com.arialyy.aria:m3u8Component:3.7.6' # 如果需要使用m3u8下载功能,请增加该组件
|
||||
implementation 'com.arialyy.aria:core:3.7.8-pre-3'
|
||||
annotationProcessor 'com.arialyy.aria:compiler:3.7.8-pre-3'
|
||||
implementation 'com.arialyy.aria:ftpComponent:3.7.8-pre-3' # 如果需要使用ftp,请增加该组件
|
||||
implementation 'com.arialyy.aria:m3u8Component:3.7.8-pre-3' # 如果需要使用m3u8下载功能,请增加该组件
|
||||
```
|
||||
如果出现android support依赖错误,请将 `compile 'com.arialyy.aria:core:<last-version>'`替换为
|
||||
```
|
||||
@@ -137,14 +137,8 @@ protected void onCreate(Bundle savedInstanceState) {
|
||||
|
||||
|
||||
### 版本日志
|
||||
+ v_3.7.6 (2019/11/19)
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/505
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/516
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/515
|
||||
- 增加强制上传的api`forceUpload()`
|
||||
- 修复for循环上传文件出现的问题
|
||||
- 移除创建任务的500ms间隔限制
|
||||
- 修复多线程读写时可能出现的`database is locked`的问题
|
||||
+ v_3.7.8-pre-1 (2019/11/20)
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/526
|
||||
|
||||
[更多版本记录](https://github.com/AriaLyy/Aria/blob/master/DEV_LOG.md)
|
||||
|
||||
|
||||
@@ -29,5 +29,5 @@ dependencies {
|
||||
implementation "com.jcraft:jsch:0.1.55"
|
||||
implementation "com.jcraft:jzlib:1.1.3"
|
||||
implementation project(path: ':FtpComponent')
|
||||
compile project(path: ':PublicComponent')
|
||||
implementation project(path: ':PublicComponent')
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:sharedUserId="com.arialyy"
|
||||
package="com.arialyy.simple">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
|
||||
@@ -39,7 +39,7 @@ public class HttpDownloadModule extends BaseViewModule {
|
||||
//"http://202.98.201.103:7000/vrs/TPK/ZTC440402001Z.tpk";
|
||||
private final String defFilePath =
|
||||
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath()
|
||||
+ "/TOTWOO-v3.5.6.apk";
|
||||
+ "/tttt.apk";
|
||||
|
||||
private MutableLiveData<DownloadEntity> liveData = new MutableLiveData<>();
|
||||
private DownloadEntity singDownloadInfo;
|
||||
@@ -51,7 +51,8 @@ public class HttpDownloadModule extends BaseViewModule {
|
||||
//String url = AppUtil.getConfigValue(context, HTTP_URL_KEY, defUrl);
|
||||
//String url =
|
||||
// "http://sdkdown.muzhiwan.com/openfile/2019/05/21/com.netease.tom.mzw_5ce3ef8754d05.apk";
|
||||
String url = "http://image.totwoo.com/totwoo-TOTWOO-v3.5.6.apk";
|
||||
//String url = "http://image.totwoo.com/totwoo-TOTWOO-v3.5.6.apk";
|
||||
String url = "https://imtt.dd.qq.com/16891/apk/70BFFDB05AB8686F2A4CF3E07588A377.apk?fsname=com.tencent.tmgp.speedmobile_1.16.0.33877_1160033877.apk&csr=1bbd";
|
||||
//String url = "https://ss1.baidu.com/-4o3dSag_xI4khGko9WTAnF6hhy/image/h%3D300/sign=a9e671b9a551f3dedcb2bf64a4eff0ec/4610b912c8fcc3cef70d70409845d688d53f20f7.jpg";
|
||||
String filePath = AppUtil.getConfigValue(context, HTTP_PATH_KEY, defFilePath);
|
||||
|
||||
|
||||
@@ -277,7 +277,7 @@ public class SingleTaskActivity extends BaseActivity<ActivitySingleBinding> {
|
||||
Aria.download(this).load(mTaskId).stop();
|
||||
} else {
|
||||
Aria.download(this).load(mTaskId)
|
||||
//.updateUrl("http://sdkdown.muzhiwan.com/openfile/2019/07/11/com.netease.syfz.mzw_5d26f8d9cee27.apk")
|
||||
.updateUrl("http://sdkdown.muzhiwan.com/openfile/2019/07/11/com.netease.syfz.mzw_5d26f8d9cee27.apk")
|
||||
.resume();
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -32,10 +32,10 @@ public class GroupModule extends BaseModule {
|
||||
|
||||
public List<String> getUrls() {
|
||||
List<String> urls = new ArrayList<>();
|
||||
urls.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1574141924275&di=a7ea1497a4a2528a45ce7103bf61adf4&imgtype=0&src=http%3A%2F%2Fg.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2Fc2cec3fdfc03924590b2a9b58d94a4c27d1e2500.jpg");
|
||||
urls.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1574141924272&di=7861479e7cb3cea98d585eaf108f056f&imgtype=0&src=http%3A%2F%2Fd.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F562c11dfa9ec8a13c0741f5afd03918fa0ecc01a.jpg");
|
||||
//String[] str = getContext().getResources().getStringArray(R.array.group_urls_1);
|
||||
//Collections.addAll(urls, str);
|
||||
//urls.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1574141924275&di=a7ea1497a4a2528a45ce7103bf61adf4&imgtype=0&src=http%3A%2F%2Fg.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2Fc2cec3fdfc03924590b2a9b58d94a4c27d1e2500.jpg");
|
||||
//urls.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1574141924272&di=7861479e7cb3cea98d585eaf108f056f&imgtype=0&src=http%3A%2F%2Fd.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F562c11dfa9ec8a13c0741f5afd03918fa0ecc01a.jpg");
|
||||
String[] str = getContext().getResources().getStringArray(R.array.group_urls_1);
|
||||
Collections.addAll(urls, str);
|
||||
return urls;
|
||||
}
|
||||
|
||||
|
||||
@@ -308,7 +308,7 @@ public class M3U8VodDLoadActivity extends BaseActivity<ActivityM3u8VodBinding> {
|
||||
//.merge(true)
|
||||
.setVodTsUrlConvert(new VodTsUrlConverter());
|
||||
//.setMergeHandler(new TsMergeHandler());
|
||||
//.setBandWidthUrlConverter(new BandWidthUrlConverter(mUrl));
|
||||
option.setBandWidthUrlConverter(new BandWidthUrlConverter(mUrl));
|
||||
return option;
|
||||
}
|
||||
|
||||
@@ -324,7 +324,10 @@ public class M3U8VodDLoadActivity extends BaseActivity<ActivityM3u8VodBinding> {
|
||||
static class VodTsUrlConverter implements IVodTsUrlConverter {
|
||||
@Override public List<String> convert(String m3u8Url, List<String> tsUrls) {
|
||||
Uri uri = Uri.parse(m3u8Url);
|
||||
String parentUrl = "http://" + uri.getHost();
|
||||
//String parentUrl = "http://" + uri.getHost() + "/gear1/";
|
||||
int index = m3u8Url.lastIndexOf("/");
|
||||
String parentUrl = m3u8Url.substring(0, index + 1);
|
||||
//String parentUrl = "http://" + uri.getHost() + "/";
|
||||
List<String> newUrls = new ArrayList<>();
|
||||
for (String url : tsUrls) {
|
||||
newUrls.add(parentUrl + url);
|
||||
|
||||
@@ -34,9 +34,8 @@ public class M3U8VodModule extends BaseViewModule {
|
||||
// m3u8测试集合:http://www.voidcn.com/article/p-snaliarm-ct.html
|
||||
//private final String defUrl = "https://www.gaoya123.cn/2019/1557993797897.m3u8";
|
||||
// 多码率地址:
|
||||
//private final String defUrl = "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8";
|
||||
//private final String defUrl = "http://cn1.fa1244.cn/hls/20190516/6d271eaa73b2e4cb51d13831b0c1ab4c/1557976262/index.m3u8";
|
||||
private final String defUrl = "http://qn.shytong.cn/b83137769ff6b555/11b0c9970f9a3fa0.mp4.m3u8";
|
||||
private final String defUrl = "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8";
|
||||
//private final String defUrl = "http://qn.shytong.cn/b83137769ff6b555/11b0c9970f9a3fa0.mp4.m3u8";
|
||||
private final String filePath =
|
||||
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath()
|
||||
//+ "/道士下山.ts";
|
||||
|
||||
@@ -44,8 +44,8 @@ task clean(type: Delete) {
|
||||
}
|
||||
|
||||
ext {
|
||||
versionCode = 376
|
||||
versionName = '3.7.6'
|
||||
versionCode = 378
|
||||
versionName = '3.7.8-pre-3'
|
||||
userOrg = 'arialyy'
|
||||
groupId = 'com.arialyy.aria'
|
||||
publishVersion = versionName
|
||||
|
||||
Reference in New Issue
Block a user