fix bug https://github.com/AriaLyy/Aria/issues/508 fix bug https://github.com/AriaLyy/Aria/issues/503 修复m3u8创建索引不成功的问题
This commit is contained in:
@@ -71,6 +71,29 @@ public class DownloadModule extends BaseModule {
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建m3u8下载地址
|
||||
*/
|
||||
public List<FileListEntity> createM3u8TestList(){
|
||||
String[] names = new String[]{"m3u8test1.ts", "m3u8test2.ts"};
|
||||
String[] urls = new String[]{
|
||||
"http://qn.shytong.cn/b83137769ff6b555/11b0c9970f9a3fa0.mp4.m3u8",
|
||||
"http://qn.shytong.cn/8f4011f2a31bd347da42b54fe37a7ba8-transcode.m3u8"
|
||||
};
|
||||
List<FileListEntity> list = new ArrayList<>();
|
||||
int i = 0;
|
||||
for (String name : names) {
|
||||
FileListEntity entity = new FileListEntity();
|
||||
entity.name = name;
|
||||
entity.key = urls[i];
|
||||
entity.type = 2;
|
||||
entity.downloadPath = Environment.getExternalStorageDirectory() + "/Download/" + name;
|
||||
list.add(entity);
|
||||
i++;
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
private String[] getStringArray(int array) {
|
||||
return getContext().getResources().getStringArray(array);
|
||||
}
|
||||
@@ -91,7 +114,7 @@ public class DownloadModule extends BaseModule {
|
||||
FileListEntity entity = new FileListEntity();
|
||||
entity.urls = getStringArray(urls);
|
||||
entity.names = getStringArray(names);
|
||||
entity.isGroup = true;
|
||||
entity.type = 1;
|
||||
entity.name = alias;
|
||||
entity.key = CommonUtil.getMd5Code(Arrays.asList(entity.urls));
|
||||
entity.downloadPath = Environment.getExternalStorageDirectory() + "/Download/" + alias;
|
||||
|
||||
@@ -215,6 +215,7 @@ public class SingleTaskActivity extends BaseActivity<ActivitySingleBinding> {
|
||||
|
||||
@Download.onTaskResume
|
||||
void taskResume(DownloadTask task) {
|
||||
ALog.d(TAG, "resume");
|
||||
if (task.getKey().equals(mUrl)) {
|
||||
getBinding().setStateStr(getString(R.string.stop));
|
||||
}
|
||||
|
||||
@@ -24,12 +24,14 @@ import com.arialyy.aria.core.common.FtpOption;
|
||||
import com.arialyy.aria.core.download.DownloadGroupEntity;
|
||||
import com.arialyy.aria.core.inf.IEntity;
|
||||
import com.arialyy.aria.core.task.DownloadGroupTask;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
import com.arialyy.frame.util.show.L;
|
||||
import com.arialyy.frame.util.show.T;
|
||||
import com.arialyy.simple.R;
|
||||
import com.arialyy.simple.base.BaseActivity;
|
||||
import com.arialyy.simple.databinding.ActivityDownloadGroupBinding;
|
||||
import com.arialyy.simple.widget.SubStateLinearLayout;
|
||||
import java.security.AlgorithmConstraints;
|
||||
|
||||
/**
|
||||
* Created by lyy on 2017/7/6.
|
||||
@@ -128,6 +130,7 @@ public class FTPDirDownloadActivity extends BaseActivity<ActivityDownloadGroupBi
|
||||
}
|
||||
|
||||
@DownloadGroup.onTaskResume() void taskResume(DownloadGroupTask task) {
|
||||
ALog.d(TAG, "ftp dir resume");
|
||||
}
|
||||
|
||||
@DownloadGroup.onTaskStop() void taskStop(DownloadGroupTask task) {
|
||||
|
||||
@@ -213,17 +213,10 @@ public class M3U8LiveDLoadActivity extends BaseActivity<ActivityM3u8LiveBinding>
|
||||
public void onClick(View view) {
|
||||
switch (view.getId()) {
|
||||
case R.id.start:
|
||||
startD();
|
||||
if (!AppUtil.chekEntityValid(mEntity)) {
|
||||
startD();
|
||||
break;
|
||||
}
|
||||
if (Aria.download(this).load(mEntity.getId()).isRunning()) {
|
||||
Aria.download(this).load(mEntity.getId()).stop();
|
||||
} else {
|
||||
Aria.download(this).load(mEntity.getId())
|
||||
.m3u8LiveOption(getLiveoption())
|
||||
.resume();
|
||||
startD();
|
||||
}
|
||||
break;
|
||||
case R.id.cancel:
|
||||
@@ -245,6 +238,7 @@ public class M3U8LiveDLoadActivity extends BaseActivity<ActivityM3u8LiveBinding>
|
||||
private M3U8LiveOption getLiveoption() {
|
||||
M3U8LiveOption option = new M3U8LiveOption();
|
||||
option
|
||||
//.generateIndexFile()
|
||||
.setLiveTsUrlConvert(new LiveTsUrlConverter());
|
||||
//.setBandWidthUrlConverter(new BandWidthUrlConverter(mUrl));
|
||||
return option;
|
||||
|
||||
@@ -90,10 +90,10 @@ public class M3U8VodDLoadActivity extends BaseActivity<ActivityM3u8VodBinding> {
|
||||
getBinding().setFilePath(entity.getFilePath());
|
||||
mUrl = entity.getUrl();
|
||||
mFilePath = entity.getFilePath();
|
||||
mVideoFragment = new VideoPlayerFragment(0, entity);
|
||||
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
|
||||
ft.add(R.id.video_content, mVideoFragment);
|
||||
ft.commit();
|
||||
//mVideoFragment = new VideoPlayerFragment(0, entity);
|
||||
//FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
|
||||
//ft.add(R.id.video_content, mVideoFragment);
|
||||
//ft.commit();
|
||||
}
|
||||
});
|
||||
getBinding().setViewModel(this);
|
||||
@@ -176,7 +176,7 @@ public class M3U8VodDLoadActivity extends BaseActivity<ActivityM3u8VodBinding> {
|
||||
@M3U8.onPeerComplete
|
||||
void onPeerComplete(String m3u8Url, String peerPath, int peerIndex) {
|
||||
//ALog.d(TAG, "peer complete, path: " + peerPath + ", index: " + peerIndex);
|
||||
mVideoFragment.addPlayer(peerIndex, peerPath);
|
||||
//mVideoFragment.addPlayer(peerIndex, peerPath);
|
||||
}
|
||||
|
||||
@M3U8.onPeerFail
|
||||
@@ -217,6 +217,7 @@ public class M3U8VodDLoadActivity extends BaseActivity<ActivityM3u8VodBinding> {
|
||||
|
||||
@Download.onTaskResume
|
||||
void taskResume(DownloadTask task) {
|
||||
ALog.d(TAG, "m3u8 vod resume");
|
||||
if (task.getKey().equals(mUrl)) {
|
||||
getBinding().setStateStr(getString(R.string.stop));
|
||||
}
|
||||
@@ -303,9 +304,10 @@ public class M3U8VodDLoadActivity extends BaseActivity<ActivityM3u8VodBinding> {
|
||||
private M3U8VodOption getM3U8Option() {
|
||||
M3U8VodOption option = new M3U8VodOption();
|
||||
option
|
||||
.generateIndexFile()
|
||||
.setVodTsUrlConvert(new VodTsUrlConverter())
|
||||
.setMergeHandler(new TsMergeHandler());
|
||||
//.generateIndexFile()
|
||||
//.merge(true)
|
||||
.setVodTsUrlConvert(new VodTsUrlConverter());
|
||||
//.setMergeHandler(new TsMergeHandler());
|
||||
//.setBandWidthUrlConverter(new BandWidthUrlConverter(mUrl));
|
||||
return option;
|
||||
}
|
||||
|
||||
@@ -35,10 +35,12 @@ public class M3U8VodModule extends BaseViewModule {
|
||||
//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://cn1.fa1244.cn/hls/20190516/6d271eaa73b2e4cb51d13831b0c1ab4c/1557976262/index.m3u8";
|
||||
private final String defUrl = "http://qn.shytong.cn/b83137769ff6b555/11b0c9970f9a3fa0.mp4.m3u8";
|
||||
private final String filePath =
|
||||
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath()
|
||||
+ "/道士下山.ts";
|
||||
//+ "/道士下山.ts";
|
||||
+ "/bb1.ts";
|
||||
|
||||
private MutableLiveData<DownloadEntity> liveData = new MutableLiveData<>();
|
||||
private DownloadEntity singDownloadInfo;
|
||||
|
||||
@@ -28,7 +28,7 @@ import com.arialyy.aria.core.common.AbsEntity;
|
||||
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.wrapper.AbsTaskWrapper;
|
||||
import com.arialyy.aria.core.wrapper.ITaskWrapper;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
import com.arialyy.simple.R;
|
||||
import com.arialyy.simple.base.adapter.AbsHolder;
|
||||
@@ -152,12 +152,19 @@ public class DownloadAdapter extends AbsRVAdapter<AbsEntity, DownloadAdapter.Sim
|
||||
* 只更新速度
|
||||
*/
|
||||
private void updateSpeed(SimpleHolder holder, final AbsEntity entity) {
|
||||
long size = entity.getFileSize();
|
||||
long progress = entity.getCurrentProgress();
|
||||
int current = size == 0 ? 0 : (int) (progress * 100 / size);
|
||||
|
||||
holder.speed.setText(entity.getConvertSpeed());
|
||||
holder.fileSize.setText(covertCurrentSize(progress) + "/" + CommonUtil.formatFileSize(size));
|
||||
holder.progress.setProgress(current);
|
||||
if (entity.getTaskType() == ITaskWrapper.M3U8_VOD
|
||||
|| entity.getTaskType() == ITaskWrapper.M3U8_LIVE) {
|
||||
holder.progress.setProgress(entity.getPercent());
|
||||
holder.fileSize.setVisibility(View.GONE);
|
||||
} else {
|
||||
long size = entity.getFileSize();
|
||||
long progress = entity.getCurrentProgress();
|
||||
int current = size == 0 ? 0 : (int) (progress * 100 / size);
|
||||
holder.fileSize.setText(covertCurrentSize(progress) + "/" + CommonUtil.formatFileSize(size));
|
||||
holder.progress.setProgress(current);
|
||||
}
|
||||
//if (holder instanceof GroupHolder){
|
||||
// handleSubChild((GroupHolder) holder, entity);
|
||||
//}
|
||||
@@ -257,9 +264,9 @@ public class DownloadAdapter extends AbsRVAdapter<AbsEntity, DownloadAdapter.Sim
|
||||
case IEntity.STATE_STOP:
|
||||
case IEntity.STATE_PRE:
|
||||
case IEntity.STATE_POST_PRE:
|
||||
if (entity.getId() < 0){
|
||||
if (entity.getId() < 0) {
|
||||
start(entity);
|
||||
}else {
|
||||
} else {
|
||||
resume(entity);
|
||||
}
|
||||
break;
|
||||
@@ -278,36 +285,38 @@ public class DownloadAdapter extends AbsRVAdapter<AbsEntity, DownloadAdapter.Sim
|
||||
return;
|
||||
}
|
||||
switch (entity.getTaskType()) {
|
||||
case AbsTaskWrapper.D_FTP:
|
||||
case ITaskWrapper.D_FTP:
|
||||
Aria.download(getContext())
|
||||
.loadFtp(entity.getId())
|
||||
//.login("lao", "123456")
|
||||
.cancel(true);
|
||||
break;
|
||||
case AbsTaskWrapper.D_FTP_DIR:
|
||||
case ITaskWrapper.D_FTP_DIR:
|
||||
break;
|
||||
case AbsTaskWrapper.D_HTTP:
|
||||
case ITaskWrapper.D_HTTP:
|
||||
case ITaskWrapper.M3U8_VOD:
|
||||
Aria.download(getContext()).load(entity.getId()).cancel(true);
|
||||
break;
|
||||
case AbsTaskWrapper.DG_HTTP:
|
||||
case ITaskWrapper.DG_HTTP:
|
||||
Aria.download(getContext()).load(entity.getId()).cancel(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void resume(AbsEntity entity){
|
||||
private void resume(AbsEntity entity) {
|
||||
switch (entity.getTaskType()) {
|
||||
case AbsTaskWrapper.D_FTP:
|
||||
case ITaskWrapper.D_FTP:
|
||||
//Aria.download(getContext()).loadFtp((DownloadEntity) entity).login("lao", "123456").create();
|
||||
Aria.download(getContext()).loadFtp(entity.getId()).resume();
|
||||
break;
|
||||
case AbsTaskWrapper.D_FTP_DIR:
|
||||
case ITaskWrapper.D_FTP_DIR:
|
||||
Aria.download(getContext()).loadFtpDir(entity.getId()).resume();
|
||||
break;
|
||||
case AbsTaskWrapper.D_HTTP:
|
||||
case ITaskWrapper.D_HTTP:
|
||||
case ITaskWrapper.M3U8_VOD:
|
||||
Aria.download(getContext()).load(entity.getId()).resume();
|
||||
break;
|
||||
case AbsTaskWrapper.DG_HTTP:
|
||||
case ITaskWrapper.DG_HTTP:
|
||||
Aria.download(getContext()).loadGroup(entity.getId()).resume();
|
||||
break;
|
||||
}
|
||||
@@ -315,16 +324,17 @@ public class DownloadAdapter extends AbsRVAdapter<AbsEntity, DownloadAdapter.Sim
|
||||
|
||||
private void start(AbsEntity entity) {
|
||||
switch (entity.getTaskType()) {
|
||||
case AbsTaskWrapper.D_FTP:
|
||||
case ITaskWrapper.D_FTP:
|
||||
//Aria.download(getContext()).loadFtp((DownloadEntity) entity).login("lao", "123456").create();
|
||||
Aria.download(getContext()).loadFtp(entity.getKey()).create();
|
||||
break;
|
||||
case AbsTaskWrapper.D_FTP_DIR:
|
||||
case ITaskWrapper.D_FTP_DIR:
|
||||
break;
|
||||
case AbsTaskWrapper.D_HTTP:
|
||||
case ITaskWrapper.D_HTTP:
|
||||
case ITaskWrapper.M3U8_VOD:
|
||||
Aria.download(getContext()).load(entity.getKey()).create();
|
||||
break;
|
||||
case AbsTaskWrapper.DG_HTTP:
|
||||
case ITaskWrapper.DG_HTTP:
|
||||
Aria.download(getContext()).loadGroup(((DownloadGroupEntity) entity).getUrls()).create();
|
||||
break;
|
||||
}
|
||||
@@ -336,15 +346,16 @@ public class DownloadAdapter extends AbsRVAdapter<AbsEntity, DownloadAdapter.Sim
|
||||
}
|
||||
|
||||
switch (entity.getTaskType()) {
|
||||
case AbsTaskWrapper.D_FTP:
|
||||
case ITaskWrapper.D_FTP:
|
||||
Aria.download(getContext()).loadFtp(entity.getId()).stop();
|
||||
break;
|
||||
case AbsTaskWrapper.D_FTP_DIR:
|
||||
case ITaskWrapper.D_FTP_DIR:
|
||||
break;
|
||||
case AbsTaskWrapper.D_HTTP:
|
||||
case ITaskWrapper.D_HTTP:
|
||||
case ITaskWrapper.M3U8_VOD:
|
||||
Aria.download(getContext()).load(entity.getId()).stop();
|
||||
break;
|
||||
case AbsTaskWrapper.DG_HTTP:
|
||||
case ITaskWrapper.DG_HTTP:
|
||||
Aria.download(getContext()).loadGroup(entity.getId()).stop();
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -22,9 +22,13 @@ import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import com.arialyy.aria.core.Aria;
|
||||
import com.arialyy.aria.core.download.m3u8.M3U8VodOption;
|
||||
import com.arialyy.aria.core.processor.IVodTsUrlConverter;
|
||||
import com.arialyy.simple.R;
|
||||
import com.arialyy.simple.base.adapter.AbsHolder;
|
||||
import com.arialyy.simple.base.adapter.AbsRVAdapter;
|
||||
import com.arialyy.simple.core.download.m3u8.M3U8VodDLoadActivity;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -60,27 +64,44 @@ final class FileListAdapter extends AbsRVAdapter<FileListEntity, FileListAdapter
|
||||
protected void bindData(FileListHolder holder, int position, final FileListEntity item) {
|
||||
holder.name.setText("文件名:" + item.name);
|
||||
holder.url.setText("下载地址:" + item.key);
|
||||
holder.url.setVisibility(item.isGroup ? View.GONE : View.VISIBLE);
|
||||
if (item.type == 1) {
|
||||
holder.url.setVisibility(View.GONE);
|
||||
}
|
||||
holder.path.setText("保存路径:" + item.downloadPath);
|
||||
if (mBtStates.get(item.key)) {
|
||||
holder.bt.setEnabled(true);
|
||||
holder.bt.setOnClickListener(new View.OnClickListener() {
|
||||
@Override public void onClick(View v) {
|
||||
Toast.makeText(getContext(), "开始下载:" + item.name, Toast.LENGTH_SHORT).show();
|
||||
if (item.isGroup) {
|
||||
Aria.download(getContext())
|
||||
.loadGroup(Arrays.asList(item.urls))
|
||||
.setSubFileName(Arrays.asList(item.names))
|
||||
.setDirPath(item.downloadPath)
|
||||
.setGroupAlias(item.name)
|
||||
.unknownSize()
|
||||
.create();
|
||||
} else {
|
||||
Aria.download(getContext())
|
||||
.load(item.key)
|
||||
.setFilePath(item.downloadPath)
|
||||
.create();
|
||||
switch (item.type) {
|
||||
case 0:
|
||||
Aria.download(getContext())
|
||||
.load(item.key)
|
||||
.setFilePath(item.downloadPath)
|
||||
.create();
|
||||
break;
|
||||
case 1:
|
||||
Aria.download(getContext())
|
||||
.loadGroup(Arrays.asList(item.urls))
|
||||
.setSubFileName(Arrays.asList(item.names))
|
||||
.setDirPath(item.downloadPath)
|
||||
.setGroupAlias(item.name)
|
||||
.unknownSize()
|
||||
.create();
|
||||
break;
|
||||
case 2:
|
||||
M3U8VodOption option = new M3U8VodOption();
|
||||
option.setVodTsUrlConvert(new IVodTs());
|
||||
option.generateIndexFile();
|
||||
|
||||
Aria.download(getContext())
|
||||
.load(item.key)
|
||||
.setFilePath(item.downloadPath, true)
|
||||
.m3u8VodOption(option)
|
||||
.create();
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
} else {
|
||||
@@ -125,4 +146,15 @@ final class FileListAdapter extends AbsRVAdapter<FileListEntity, FileListAdapter
|
||||
bt = findViewById(R.id.bt);
|
||||
}
|
||||
}
|
||||
static class IVodTs implements IVodTsUrlConverter{
|
||||
|
||||
@Override public List<String> convert(String m3u8Url, List<String> tsUrls) {
|
||||
List<String> temp = new ArrayList<>();
|
||||
for (String tsUrl : tsUrls){
|
||||
temp.add("http://qn.shytong.cn" + tsUrl);
|
||||
}
|
||||
|
||||
return temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,13 @@ package com.arialyy.simple.core.download.mutil;
|
||||
|
||||
public class FileListEntity {
|
||||
public String name, key, downloadPath;
|
||||
public boolean isGroup = false;
|
||||
|
||||
/**
|
||||
* 0:普通任务
|
||||
* 1:组合任务
|
||||
* 2:m3u8任务
|
||||
*/
|
||||
public int type = 0;
|
||||
|
||||
public String[] urls, names;
|
||||
}
|
||||
|
||||
@@ -113,7 +113,7 @@ public class MultiDownloadActivity extends BaseActivity<ActivityMultiDownloadBin
|
||||
mAdapter.updateState(task.getEntity());
|
||||
}
|
||||
|
||||
@Download.onTaskRunning() void taskRunning(DownloadTask task) {
|
||||
@Download.onTaskRunning void taskRunning(DownloadTask task) {
|
||||
mAdapter.setProgress(task.getEntity());
|
||||
}
|
||||
|
||||
|
||||
@@ -57,6 +57,7 @@ public class MultiTaskActivity extends BaseActivity<ActivityMultiBinding> {
|
||||
setTitle("多任务下载");
|
||||
mData.addAll(getModule(DownloadModule.class).createGroupTestList());
|
||||
mData.addAll(getModule(DownloadModule.class).createMultiTestList());
|
||||
mData.addAll(getModule(DownloadModule.class).createM3u8TestList());
|
||||
mAdapter = new FileListAdapter(this, mData);
|
||||
mList = getBinding().list;
|
||||
mBar = findViewById(R.id.toolbar);
|
||||
|
||||
Reference in New Issue
Block a user