Skip to content

Commit 22c788d

Browse files
committed
修复长链接致使文件名过长引起任务异常的问题
修复m3u8中ts的url为具体直链时引起的下载异常的问题 调整本地m3u8切片文件命名策略
1 parent fc306e7 commit 22c788d

File tree

5 files changed

+42
-22
lines changed

5 files changed

+42
-22
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ allprojects {
1111
}
1212
1313
dependencies {
14-
compile 'com.github.Jay-Goo:M3U8Downloader:V1.0.6'
14+
compile 'com.github.Jay-Goo:M3U8Downloader:V1.0.7'
1515
}
1616
```
1717

app/src/main/java/jaygoo/m3u8downloader/MainActivity.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import jaygoo.library.m3u8downloader.bean.M3U8Task;
2525
import jaygoo.library.m3u8downloader.utils.AES128Utils;
2626
import jaygoo.library.m3u8downloader.utils.M3U8Log;
27+
import jaygoo.library.m3u8downloader.utils.MD5Utils;
2728
import jaygoo.library.m3u8downloader.utils.MUtils;
2829

2930
public class MainActivity extends AppCompatActivity {
@@ -32,7 +33,7 @@ public class MainActivity extends AppCompatActivity {
3233
Manifest.permission.READ_EXTERNAL_STORAGE,
3334
};
3435

35-
M3U8Task[] taskList = new M3U8Task[6];
36+
M3U8Task[] taskList = new M3U8Task[5];
3637
private VideoListAdapter adapter;
3738
private String dirPath;
3839
private String encryptKey = "63F06F99D823D33AAB89A0A93DECFEE0"; //get the key by AES128Utils.getAESKey()
@@ -90,19 +91,16 @@ public void onClick(View v) {
9091
}
9192

9293
private void initData(){
93-
94-
M3U8Task bean0 = new M3U8Task("https://media6.smartstudy.com/52/9c/10732/4/dest.m3u8");
95-
M3U8Task bean1 = new M3U8Task("https://media6.smartstudy.com/b2/75/2475/4/dest.m3u8");
94+
M3U8Task bean0 = new M3U8Task("http://hls.ciguang.tv/hdtv/video.m3u8");
95+
M3U8Task bean1 = new M3U8Task("http://pl-ali.youku.com/playlist/m3u8?ts=1524205957&keyframe=0&m3u8Md5=a85842b9ca4e77db4aa57c314c8e61c7&t1=200&pid=1133275aa6ac0891&vid=XMzU1MDY0NjEyMA==&type=flv&oip=1779113856&sid=0524205957937209643a0&token=2124&did=ae8263a35f7eaca76f68bb61436e6dac&ev=1&ctype=20&ep=YlUi3d%2BWQ%2F5shnijRhmbvlc%2FYJ8QmCsaCWAJ1RRpNbA%3D&ymovie=1");
9696
M3U8Task bean2 = new M3U8Task("https://media6.smartstudy.com/ae/07/3997/2/dest.m3u8");
97-
M3U8Task bean3 = new M3U8Task("http://hls.ciguang.tv/hdtv/video.m3u8");
97+
M3U8Task bean3 = new M3U8Task("https://www3.laqddc.com/hls/2018/04/07/BQ2cqpyZ/playlist.m3u8");
9898
M3U8Task bean4 = new M3U8Task("http://hcjs2ra2rytd8v8np1q.exp.bcevod.com/mda-hegtjx8n5e8jt9zv/mda-hegtjx8n5e8jt9zv.m3u8");
99-
M3U8Task bean5 = new M3U8Task("https://media6.smartstudy.com/55/34/2542/4/dest.m3u8");
10099
taskList[0] = bean0;
101100
taskList[1] = bean1;
102101
taskList[2] = bean2;
103102
taskList[3] = bean3;
104103
taskList[4] = bean4;
105-
taskList[5] = bean5;
106104
}
107105

108106
private OnM3U8DownloadListener onM3U8DownloadListener = new OnM3U8DownloadListener() {

library/src/main/java/jaygoo/library/m3u8downloader/M3U8DownloadTask.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,18 +253,18 @@ public void run() {
253253

254254
File file;
255255
try {
256-
String fileName = M3U8EncryptHelper.encryptFileName(encryptKey,m3U8Ts.getFile());
256+
String fileName = M3U8EncryptHelper.encryptFileName(encryptKey, m3U8Ts.obtainEncodeTsFileName());
257257
file = new File(dir + File.separator + fileName);
258258
} catch (Exception e) {
259-
file = new File(dir + File.separator + m3U8Ts.getFile());
259+
file = new File(dir + File.separator + m3U8Ts.getUrl());
260260
}
261261

262262
if (!file.exists()) {//下载过的就不管了
263263

264264
FileOutputStream fos = null;
265265
InputStream inputStream = null;
266266
try {
267-
URL url = new URL(basePath + m3U8Ts.getFile());
267+
URL url = new URL(m3U8Ts.obtainFullUrl(basePath));
268268
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
269269
conn.setConnectTimeout(connTimeout);
270270
conn.setReadTimeout(readTimeout);

library/src/main/java/jaygoo/library/m3u8downloader/bean/M3U8Ts.java

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,32 @@
22

33
import android.support.annotation.NonNull;
44

5+
import java.util.regex.Matcher;
6+
import java.util.regex.Pattern;
7+
8+
import jaygoo.library.m3u8downloader.utils.MD5Utils;
9+
510
/**
611
* m3u8切片类
712
* Created by HDL on 2017/7/24.
813
*/
914

1015
public class M3U8Ts implements Comparable<M3U8Ts> {
11-
private String file;
16+
private String url;
1217
private long fileSize;
1318
private float seconds;
1419

15-
public M3U8Ts(String file, float seconds) {
16-
this.file = file;
20+
public M3U8Ts(String url, float seconds) {
21+
this.url = url;
1722
this.seconds = seconds;
1823
}
1924

20-
public String getFile() {
21-
return file;
25+
public String getUrl() {
26+
return url;
2227
}
2328

24-
public void setFile(String file) {
25-
this.file = file;
29+
public void setUrl(String url) {
30+
this.url = url;
2631
}
2732

2833
public float getSeconds() {
@@ -33,25 +38,42 @@ public void setSeconds(float seconds) {
3338
this.seconds = seconds;
3439
}
3540

41+
public String obtainEncodeTsFileName(){
42+
if (url == null)return "error.ts";
43+
return MD5Utils.encode(url).concat(".ts");
44+
}
45+
46+
public String obtainFullUrl(String hostUrl){
47+
if (url == null) {
48+
return null;
49+
}
50+
if (url.startsWith("http")) {
51+
return url;
52+
}else if (url.startsWith("//")) {
53+
return "http:".concat(url);
54+
}else {
55+
return hostUrl.concat(url);
56+
}
57+
}
3658
@Override
3759
public String toString() {
38-
return file + " (" + seconds + "sec)";
60+
return url + " (" + seconds + "sec)";
3961
}
4062

4163
/**
4264
* 获取时间
4365
*/
4466
public long getLongDate() {
4567
try {
46-
return Long.parseLong(file.substring(0, file.lastIndexOf(".")));
68+
return Long.parseLong(url.substring(0, url.lastIndexOf(".")));
4769
}catch (NumberFormatException e){
4870
return 0;
4971
}
5072
}
5173

5274
@Override
5375
public int compareTo(@NonNull M3U8Ts o) {
54-
return file.compareTo(o.file);
76+
return url.compareTo(o.url);
5577
}
5678

5779
public long getFileSize() {

library/src/main/java/jaygoo/library/m3u8downloader/utils/MUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public static File createLocalM3U8(File m3u8Dir, String fileName, M3U8 m3U8, Str
130130
for (M3U8Ts m3U8Ts : m3U8.getTsList()) {
131131
if (keyPath != null) bfw.write("#EXT-X-KEY:METHOD=AES-128,URI=\""+keyPath+"\"\n");
132132
bfw.write("#EXTINF:" + m3U8Ts.getSeconds()+",\n");
133-
bfw.write(m3U8Ts.getFile());
133+
bfw.write(m3U8Ts.obtainEncodeTsFileName());
134134
bfw.newLine();
135135
}
136136
bfw.write("#EXT-X-ENDLIST");

0 commit comments

Comments
 (0)