From 7088852a7db42b9fa84b37d3894443773c595012 Mon Sep 17 00:00:00 2001 From: JeffMony Date: Wed, 30 Sep 2020 15:30:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84m3u8=E4=B8=ADts=E5=88=86?= =?UTF-8?q?=E7=89=87=E5=90=88=E5=B9=B6=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: JeffMony --- README.md | 1 + .../com/jeffmony/videodemo/MainActivity.java | 14 -- .../download/DownloadSettingsActivity.java | 40 +++-- .../merge/MergeDownloadFileActivity.java | 57 ------- .../merge/MergeVideoListAdapter.java | 82 ---------- .../transcode/VideoTranscodeActivity.java | 21 --- .../res/layout/activity_download_settings.xml | 42 +++++- app/src/main/res/layout/activity_main.xml | 20 --- downloader/src/main/cpp/android_log.h | 2 +- downloader/src/main/cpp/jeffmony.cpp | 57 +++---- .../downloader/VideoDownloadConfig.java | 8 +- .../downloader/VideoDownloadManager.java | 81 +++++++++- .../downloader/process/FFmpegRemuxUtils.java | 2 +- .../process/IM3U8MergeResultListener.java | 8 + .../process/VideoProcessManager.java | 25 +++- .../task/M3U8VideoDownloadTask.java | 33 +---- .../downloader/utils/VideoDownloadUtils.java | 140 +----------------- .../src/main/jniLibs/arm64-v8a/libavcodec.so | Bin 7457624 -> 7457624 bytes .../src/main/jniLibs/arm64-v8a/libavfilter.so | Bin 1957128 -> 1957128 bytes .../src/main/jniLibs/arm64-v8a/libavformat.so | Bin 1766200 -> 1766200 bytes .../src/main/jniLibs/arm64-v8a/libavutil.so | Bin 251464 -> 251464 bytes .../src/main/jniLibs/arm64-v8a/libpostproc.so | Bin 30248 -> 30248 bytes .../main/jniLibs/arm64-v8a/libswresample.so | Bin 67112 -> 67112 bytes .../src/main/jniLibs/arm64-v8a/libswscale.so | Bin 308776 -> 308776 bytes .../main/jniLibs/armeabi-v7a/libavcodec.so | Bin 7786044 -> 7786044 bytes .../main/jniLibs/armeabi-v7a/libavfilter.so | Bin 1838824 -> 1838824 bytes .../main/jniLibs/armeabi-v7a/libavformat.so | Bin 1715792 -> 1715792 bytes .../src/main/jniLibs/armeabi-v7a/libavutil.so | Bin 267736 -> 267736 bytes .../main/jniLibs/armeabi-v7a/libpostproc.so | Bin 29988 -> 29988 bytes .../main/jniLibs/armeabi-v7a/libswresample.so | Bin 83340 -> 83340 bytes .../main/jniLibs/armeabi-v7a/libswscale.so | Bin 357772 -> 357772 bytes files/test2.jpg | Bin 17064 -> 19285 bytes 32 files changed, 218 insertions(+), 415 deletions(-) delete mode 100644 app/src/main/java/com/jeffmony/videodemo/merge/MergeDownloadFileActivity.java delete mode 100644 app/src/main/java/com/jeffmony/videodemo/merge/MergeVideoListAdapter.java delete mode 100644 app/src/main/java/com/jeffmony/videodemo/transcode/VideoTranscodeActivity.java create mode 100644 downloader/src/main/java/com/jeffmony/downloader/process/IM3U8MergeResultListener.java diff --git a/README.md b/README.md index 667f854..4b2176d 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ VideoDownloadConfig config = new VideoDownloadManager.Build(this) .setTimeOut(DownloadConstants.READ_TIMEOUT, DownloadConstants.CONN_TIMEOUT) .setConcurrentCount(DownloadConstants.CONCURRENT) .setIgnoreCertErrors(true) + .setShouldM3U8Merged(true) .buildConfig(); VideoDownloadManager.getInstance().initConfig(config); ``` diff --git a/app/src/main/java/com/jeffmony/videodemo/MainActivity.java b/app/src/main/java/com/jeffmony/videodemo/MainActivity.java index d9c8265..6814553 100644 --- a/app/src/main/java/com/jeffmony/videodemo/MainActivity.java +++ b/app/src/main/java/com/jeffmony/videodemo/MainActivity.java @@ -15,8 +15,6 @@ import com.jeffmony.videodemo.download.DownloadSettingsActivity; import com.jeffmony.videodemo.download.VideoDownloadListActivity; -import com.jeffmony.videodemo.merge.MergeDownloadFileActivity; -import com.jeffmony.videodemo.transcode.VideoTranscodeActivity; import java.util.ArrayList; import java.util.List; @@ -27,8 +25,6 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe private Button mDownloadSettingBtn; private Button mDownloadListBtn; - private Button mMergeM3U8FileBtn; - private Button mVideoTranscodeBtn; @Override protected void onCreate(Bundle savedInstanceState) { @@ -41,13 +37,9 @@ protected void onCreate(Bundle savedInstanceState) { private void initViews() { mDownloadSettingBtn = (Button) findViewById(R.id.download_settings_btn); mDownloadListBtn = (Button) findViewById(R.id.download_list_btn); - mMergeM3U8FileBtn = (Button) findViewById(R.id.merge_download_file_btn); - mVideoTranscodeBtn = (Button) findViewById(R.id.video_transcode_btn); mDownloadSettingBtn.setOnClickListener(this); mDownloadListBtn.setOnClickListener(this); - mMergeM3U8FileBtn.setOnClickListener(this); - mVideoTranscodeBtn.setOnClickListener(this); } private void requestPermissions() { @@ -95,12 +87,6 @@ public void onClick(View v) { } else if (v == mDownloadListBtn) { Intent intent = new Intent(this, VideoDownloadListActivity.class); startActivity(intent); - } else if (v == mMergeM3U8FileBtn) { - Intent intent = new Intent(this, MergeDownloadFileActivity.class); - startActivity(intent); - } else if (v == mVideoTranscodeBtn) { - Intent intent = new Intent(this, VideoTranscodeActivity.class); - startActivity(intent); } } } diff --git a/app/src/main/java/com/jeffmony/videodemo/download/DownloadSettingsActivity.java b/app/src/main/java/com/jeffmony/videodemo/download/DownloadSettingsActivity.java index 8379a68..c7bfd43 100644 --- a/app/src/main/java/com/jeffmony/videodemo/download/DownloadSettingsActivity.java +++ b/app/src/main/java/com/jeffmony/videodemo/download/DownloadSettingsActivity.java @@ -33,9 +33,12 @@ public class DownloadSettingsActivity extends AppCompatActivity implements View. private RadioButton mBtn5; private RadioButton mBtn11; private RadioButton mBtn12; + private RadioButton mBtn13; + private RadioButton mBtn14; private int mConcurrentNum = 3; private boolean mIgnoreCertErrors = true; + private boolean mShouldM3U8Merged = false; private Handler mHandler = new Handler() { @Override @@ -59,17 +62,19 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { } private void initViews() { - mStoreLocText = (TextView) findViewById(R.id.store_loc_txt); - mStoreSizeText = (TextView) findViewById(R.id.store_size); - mOpenFileText = (TextView) findViewById(R.id.open_file_txt); - mClearDownloadText = (TextView) findViewById(R.id.clear_download_cache); - mBtn1 = (RadioButton) findViewById(R.id.btn1); - mBtn2 = (RadioButton) findViewById(R.id.btn2); - mBtn3 = (RadioButton) findViewById(R.id.btn3); - mBtn4 = (RadioButton) findViewById(R.id.btn4); - mBtn5 = (RadioButton) findViewById(R.id.btn5); - mBtn11 = (RadioButton) findViewById(R.id.btn11); - mBtn12 = (RadioButton) findViewById(R.id.btn12); + mStoreLocText = findViewById(R.id.store_loc_txt); + mStoreSizeText = findViewById(R.id.store_size); + mOpenFileText = findViewById(R.id.open_file_txt); + mClearDownloadText = findViewById(R.id.clear_download_cache); + mBtn1 = findViewById(R.id.btn1); + mBtn2 = findViewById(R.id.btn2); + mBtn3 = findViewById(R.id.btn3); + mBtn4 = findViewById(R.id.btn4); + mBtn5 = findViewById(R.id.btn5); + mBtn11 = findViewById(R.id.btn11); + mBtn12 = findViewById(R.id.btn12); + mBtn13 = findViewById(R.id.btn13); + mBtn14 = findViewById(R.id.btn14); mStoreLocText.setText(VideoDownloadManager.getInstance().getDownloadPath()); mOpenFileText.setOnClickListener(this); @@ -81,6 +86,8 @@ private void initViews() { mBtn5.setOnClickListener(this); mBtn11.setOnClickListener(this); mBtn12.setOnClickListener(this); + mBtn13.setOnClickListener(this); + mBtn14.setOnClickListener(this); } @Override @@ -113,12 +120,21 @@ public void onClick(View v) { } else if (v == mBtn11) { mBtn11.setChecked(true); mBtn12.setChecked(false); - mIgnoreCertErrors = true; + mShouldM3U8Merged = true; } else if (v == mBtn12) { mBtn11.setChecked(false); mBtn12.setChecked(true); + mShouldM3U8Merged = false; + } else if (v == mBtn13) { + mBtn13.setChecked(true); + mBtn14.setChecked(false); + mIgnoreCertErrors = true; + } else if (v == mBtn14) { + mBtn13.setChecked(false); + mBtn14.setChecked(true); mIgnoreCertErrors = false; } + VideoDownloadManager.getInstance().setShouldM3U8Merged(mShouldM3U8Merged); VideoDownloadManager.getInstance().setConcurrentCount(mConcurrentNum); VideoDownloadManager.getInstance().setIgnoreAllCertErrors(mIgnoreCertErrors); } diff --git a/app/src/main/java/com/jeffmony/videodemo/merge/MergeDownloadFileActivity.java b/app/src/main/java/com/jeffmony/videodemo/merge/MergeDownloadFileActivity.java deleted file mode 100644 index 4794fdb..0000000 --- a/app/src/main/java/com/jeffmony/videodemo/merge/MergeDownloadFileActivity.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.jeffmony.videodemo.merge; - -import android.os.Bundle; -import android.widget.ListView; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import com.jeffmony.downloader.VideoDownloadManager; -import com.jeffmony.downloader.listener.IDownloadInfosCallback; -import com.jeffmony.downloader.model.VideoTaskItem; -import com.jeffmony.downloader.utils.LogUtils; -import com.jeffmony.videodemo.R; - -import java.util.ArrayList; -import java.util.List; - -public class MergeDownloadFileActivity extends AppCompatActivity { - - private static final String TAG = "MergeDownloadFileActivity"; - - private ListView mDownloadFileView; - private List mM3U8ItemList = new ArrayList<>(); - private MergeVideoListAdapter mAdapter; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_merge_download_file); - - mDownloadFileView = findViewById(R.id.download_m3u8_view); - - mAdapter = new MergeVideoListAdapter(this, R.layout.m3u8_item, mM3U8ItemList); - mDownloadFileView.setAdapter(mAdapter); - VideoDownloadManager.getInstance().fetchDownloadItems(mInfosCallback); - } - - private IDownloadInfosCallback mInfosCallback = - new IDownloadInfosCallback() { - @Override - public void onDownloadInfos(List items) { - mM3U8ItemList.clear(); - for (VideoTaskItem item : items) { - if (item.isHlsType() && item.isCompleted()) { - mM3U8ItemList.add(item); - } - } - LogUtils.i(TAG, "onDownloadInfos size=" + items.size() + ", result size="+mM3U8ItemList.size()); - } - }; - - @Override - protected void onDestroy() { - super.onDestroy(); - VideoDownloadManager.getInstance().removeDownloadInfosCallback(mInfosCallback); - } -} diff --git a/app/src/main/java/com/jeffmony/videodemo/merge/MergeVideoListAdapter.java b/app/src/main/java/com/jeffmony/videodemo/merge/MergeVideoListAdapter.java deleted file mode 100644 index 988b15a..0000000 --- a/app/src/main/java/com/jeffmony/videodemo/merge/MergeVideoListAdapter.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.jeffmony.videodemo.merge; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.jeffmony.downloader.merge.M3U8MergeInfo; -import com.jeffmony.downloader.merge.M3U8MergeManager; -import com.jeffmony.downloader.merge.IM3U8MergeListener; -import com.jeffmony.downloader.model.VideoTaskItem; -import com.jeffmony.downloader.utils.LogUtils; -import com.jeffmony.downloader.utils.Utility; -import com.jeffmony.videodemo.R; - -import java.util.List; - -public class MergeVideoListAdapter extends ArrayAdapter { - - private static final String TAG = "MergeVideoListAdapter"; - - private Context mContext; - - public MergeVideoListAdapter(Context context, int resource, List itemList) { - super(context, resource, itemList); - mContext = context; - } - - @NonNull - @Override - public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { - View view = LayoutInflater.from(getContext()).inflate(R.layout.m3u8_item, null); - VideoTaskItem taskItem = getItem(position); - TextView urlTxt = view.findViewById(R.id.m3u8_url_txt); - urlTxt.setText(taskItem.getUrl()); - TextView infoTxt = view.findViewById(R.id.m3u8_info_txt); - infoTxt.setText("大小:" + Utility.getSize(taskItem.getTotalSize()) + " 分片:" + taskItem.getTotalTs()); - TextView progressTxt = view.findViewById(R.id.m3u8_merge_progress); - TextView mergeBtn = view.findViewById(R.id.m3u8_merge_btn); - - mergeBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - progressTxt.setVisibility(View.VISIBLE); - M3U8MergeManager.getInstance().mergeM3U8(taskItem, new M3U8MergeListener(progressTxt)); - } - }); - - return view; - } - - class M3U8MergeListener implements IM3U8MergeListener { - - private TextView mProgressTxt; - - public M3U8MergeListener(TextView progressTxt) { - mProgressTxt = progressTxt; - } - - - @Override - public void onMergeProgress(M3U8MergeInfo info) { - mProgressTxt.setText(info.getCurTs() + ""); - } - - @Override - public void onMergeFailed(M3U8MergeInfo info) { - LogUtils.w(TAG, "onMergeFailed error = " + info.getErrorCode()); - mProgressTxt.setVisibility(View.INVISIBLE); - } - - @Override - public void onMergeFinished(M3U8MergeInfo info) { - mProgressTxt.setText(info.getCurTs() + ""); - } - } -} diff --git a/app/src/main/java/com/jeffmony/videodemo/transcode/VideoTranscodeActivity.java b/app/src/main/java/com/jeffmony/videodemo/transcode/VideoTranscodeActivity.java deleted file mode 100644 index 60b1ee2..0000000 --- a/app/src/main/java/com/jeffmony/videodemo/transcode/VideoTranscodeActivity.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.jeffmony.videodemo.transcode; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import com.jeffmony.downloader.transcode.VideoTranscodeManager; -import com.jeffmony.downloader.utils.VideoDownloadUtils; - -public class VideoTranscodeActivity extends AppCompatActivity { - - private static String INPUT_PATH = "/sdcard/Android/data/com.jeffmony.videodemo/files/" + VideoDownloadUtils.MERGE_VIDEO; - private static String OUTPUT_PATH = "/sdcard/Android/data/com.jeffmony.videodemo/files/" + VideoDownloadUtils.OUPUT_VIDEO; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - VideoTranscodeManager.getInstance().transcode(INPUT_PATH, OUTPUT_PATH); - } -} diff --git a/app/src/main/res/layout/activity_download_settings.xml b/app/src/main/res/layout/activity_download_settings.xml index d238128..0c981bd 100644 --- a/app/src/main/res/layout/activity_download_settings.xml +++ b/app/src/main/res/layout/activity_download_settings.xml @@ -147,7 +147,7 @@ android:padding="5dp" android:background="@color/colorPrimaryDark" android:textColor="@color/white" - android:text="是否忽略证书" + android:text="下载完成是否合并ts分片" android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:layout_width="wrap_content" @@ -159,7 +159,6 @@ @@ -167,6 +166,7 @@ @@ -183,7 +183,7 @@ android:padding="5dp" android:background="@color/colorPrimaryDark" android:textColor="@color/white" - android:text="移动网络下是否暂停下载" + android:text="是否忽略证书" android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:layout_width="wrap_content" @@ -207,6 +207,42 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" /> + + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index e4260f7..209ecb4 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -39,26 +39,6 @@ android:layout_width="180dp" android:layout_marginTop="20dp" android:layout_height="wrap_content" /> - -