• Stars
    star
    458
  • Rank 95,591 (Top 2 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 4 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

支持下载队列,支持M3U8视频、MP4视频等,支持M3U8合并为MP4视频。

VideoDownloader

视频下载SDK功能

  • 下载整视频,如mp4/mkv/mov/3gp等视频
  • 下载HLS,即M3U8视频
  • M3U8 视频下载完成,会生成一个本地的local.m3u8文件
  • 视频下载完成,可以点击播放视频文件
  • 视频下载数据库记录视频下载信息
  • 增加视频下载队列
  • 增加M3U8合并为MP4的功能
  • 可以定制下载视频的标题和封面
  • 增加视频下载的group-name

版本更新

5.8.0
5.7.0
  • 解决合并时的HLS 支持hls-allowed_extensions ALL
5.6.0
  • 裁剪ffmpeg库,从10M降至1M
  • 优化TS合并逻辑
  • 提供armeabi-v7a arm64-v8a x86 x86_86四种so库
5.5.0
  • 增加视频下载的分组名
5.4.0
  • 可以定制视频下载的封面和标题
5.3.0
  • 优化M3U8合并为MP4的过程,解决时间戳不连续导致的合并失败的问题
  • 优化视频下载成功率
4.2.0
  • 优化TS合并逻辑
4.1.0
  • M3U8文件下载完成后合并为MP4文件
  • 优化部分HTTPS链接下载失败的问题
3.0.0
  • 解决部分M3U8视频下载失败的问题
  • 更新playersdk版本
  • 优化fileName和filePath问题

在build.gradle中引入

allprojects {
    repositories {
	    maven { url 'https://jitpack.io' }
	}
}

在demo中直接引用

dependencies {
    implementation 'com.github.JeffMony:VideoDownloader:5.8.0'
}

如果需要使用M3U8合并为MP4的功能,还需要额外引入(因为这个包有点大,如果需要就引入吧)

dependencies {
    implementation 'com.github.JeffMony:JeffFFmpegDemo:1.6.0'
}

如果想使用的合并库小一点.也可以使用较小的库,可以裁减很大的包

dependencies {
    implementation 'com.github.JeffMony:JeffM3U8Lib:1.2.0'
}

视频下载SDK接入

1.应用启动的时候注册download config
File file = VideoDownloadUtils.getVideoCacheDir(this);
if (!file.exists()) {
    file.mkdir();
}
VideoDownloadConfig config = new VideoDownloadManager.Build(this)
    .setCacheRoot(file)
    .setUrlRedirect(true)
    .setTimeOut(DownloadConstants.READ_TIMEOUT, DownloadConstants.CONN_TIMEOUT)
    .setConcurrentCount(DownloadConstants.CONCURRENT)
    .setIgnoreCertErrors(true)
    .setShouldM3U8Merged(true)
    .buildConfig();
VideoDownloadManager.getInstance().initConfig(config);
2.注册download listener回调,这个回调只要注册一次就行了,是全局回调
VideoDownloadManager.getInstance().setGlobalDownloadListener(mListener);

private DownloadListener mListener = new DownloadListener() {

    @Override
    public void onDownloadDefault(VideoTaskItem item) {}

    @Override
    public void onDownloadPending(VideoTaskItem item) {}

    @Override
    public void onDownloadPrepare(VideoTaskItem item) {}

    @Override
    public void onDownloadStart(VideoTaskItem item) {}

    @Override
    public void onDownloadProgress(VideoTaskItem item) {}

    @Override
    public void onDownloadSpeed(VideoTaskItem item) {}

    @Override
    public void onDownloadPause(VideoTaskItem item) {}

    @Override
    public void onDownloadError(VideoTaskItem item) {}

    @Override
    public void onDownloadSuccess(VideoTaskItem item) {}
};

VideoTaskItem中信息介绍

public class VideoTaskItem implements Cloneable {

    private String mUrl;                 //下载视频的url
    private long mDownloadCreateTime;    //下载创建的时间
    private int mTaskState;              //当前任务的状态
    private String mMimeType;            // 视频url的mime type
    private String mFinalUrl;            //30x跳转之后的url
    private int mErrorCode;              //当前任务下载错误码
    private int mVideoType;              //当前文件类型
    private M3U8 mM3U8;                  //M3U8结构,如果非M3U8,则为null
    private int mTotalTs;                //当前M3U8的总分片
    private int mCurTs;                  //当前M3U8已缓存的分片
    private float mSpeed;                //当前下载速度, getSpeedString 函数可以将速度格式化
    private float mPercent;              //当前下载百分比, 0 ~ 100,是浮点数
    private long mDownloadSize;          //已下载大小, getDownloadSizeString 函数可以将大小格式化
    private long mTotalSize;             //文件总大小, M3U8文件无法准确获知
    private String mFileHash;            //文件名的md5
    private String mSaveDir;             //保存视频文件的文件目录名
    private boolean mIsCompleted;        //是否下载完成
    private boolean mIsInDatabase;       //是否存到数据库中
    private long mLastUpdateTime;        //上一次更新数据库的时间
    private String mFileName;            //文件名
    private String mFilePath;            //文件完整路径(包括文件名)
    private boolean mPaused;

}

VideoTaskState下载状态信息介绍

public class VideoTaskState {
    public static final int DEFAULT = 0;//默认状态
    public static final int PENDING = -1;//下载排队
    public static final int PREPARE = 1;//下载准备中
    public static final int START = 2;  //开始下载
    public static final int DOWNLOADING = 3;//下载中
    public static final int PROXYREADY = 4; //视频可以边下边播
    public static final int SUCCESS = 5;//下载完成
    public static final int ERROR = 6;//下载出错
    public static final int PAUSE = 7;//下载暂停
    public static final int ENOSPC = 8;//空间不足
}
3.获取当前的下载任务
VideoDownloadManager.getInstance().fetchDownloadItems(IDownloadInfosCallback callback)

public interface IDownloadInfosCallback {
    void onDownloadInfos(List<VideoTaskItem> items);
}

接口返回的List就是当前正在下载的任务

4.启动下载
VideoDownloadManager.getInstance().startDownload(item);
5.暂停下载
VideoDownloadManager.getInstance().pauseDownloadTask(item.getUrl());
6.恢复下载
VideoDownloadManager.getInstance().pauseDownloadTask(item.getUrl());
7.删除下载任务
VideoDownloadManager.getInstance().deleteVideoTask(String videoUrl, boolean shouldDeleteSourceFile)
8.全部暂停
VideoDownloadManager.getInstance().pauseDownloadTask(List<String> urlList)
9.M3U8合并接口
        VideoProcessManager.getInstance().mergeTs(inputFilePath, outputFilePath, new IM3U8MergeListener() {
            @Override
            public void onMergedFinished() {
                LogUtils.i(TAG, "onMergedFinished");
                Toast.makeText(VideoMergeActivity.this, "合并成功", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onMergeFailed(Exception e) {
                LogUtils.i(TAG, "onMergeFailed, e=" + e.getMessage());
                Toast.makeText(VideoMergeActivity.this, "合并失败", Toast.LENGTH_SHORT).show();
            }
        });
功能示意

欢迎关注我的公众号JeffMony,我会持续为你带来音视频---算法---Android---python 方面的知识分享

More Repositories

1

JeffVideoCache

Better than AndroidVideoCache, it supports M3U8 and MP4
Java
296
star
2

MediaSDK

The library is working for downloading video while playing the video, the video contains M3U8/MP4
Java
269
star
3

PlayerSDK

提供一个高效的播放器库,播放相关的优化和功能都会在这个项目中完成
Java
147
star
4

MediaEditSDK

使用android原生的MediaExtractor,MediaCodec和OpenGL ES对视频进行编辑, 裁剪,滤镜, 特效等.
Java
77
star
5

MediaParserTools

解析mp4 flv ts h264 ts 文件的一整套工具
38
star
6

AV_Library

从0开始教你做一款剪映APP
34
star
7

VideoCapCut

全面的商业化音视频编辑软件
Java
32
star
8

AndroidFFmpegCompile

编译Android 平台上 ffmpeg,openssl,x264 库
C
25
star
9

JeffFFmpegDemo

C
24
star
10

AV_Knowledge

专注音视频面试题汇总
C
23
star
11

JeffLiveSDK

Android 平台下的直播SDK(1.实现opengl 滤镜;2.实现H264视频编码,AAC音频编码3.实现FLV封包;4.实现RTMP推流)
Java
16
star
12

VideoApplication

1.分离音频、视频 2.裁剪音频、视频 3.音频、视频合成功能 4.两个或者多个视频拼接 5.取出视频中关键帧 6.生成快慢视频 7.生成倒播的视频
Java
16
star
13

JeffVideoLib

M3U8视频合并为MP4视频专用库,已经尽量裁减优化,减少包大小,只保留这个功能
C++
15
star
14

Laker

视频播放器外接的渲染工具,使用opengl渲染视频,实现视频翻转、各种滤镜、调整亮度、色温、对比度、饱和度、锐度、添加水印等等
C++
14
star
15

VLCAndroidDemo

实现Android VLC 库的播放调用,实现VLC的主要接口
Java
10
star
16

OpenCamera

实现android-camera和camera2的功能,可以3A调整,尽可能利用系统api爆发的能量
Java
10
star
17

JeffAudioPlayer

从0开始实现一款音频播放器
C
9
star
18

AV_Book

音视频开发书籍汇总
8
star
19

CustomPlayer

使用FFmpeg OpenGL-ES OpenSL-ES 实现一个简单的视频播放器
C
7
star
20

AVInterview

音视频/Android面试题集合
C
7
star
21

CameraApp

Camera1 Camera2 CameraX实现拍照、录视频、剪视频功能
Java
6
star
22

M3U8ParserTools

python 实现 M3U8文件的解析功能
Python
6
star
23

GifSDK

实现将若干张图片变成一个gif图
Java
6
star
24

AudioSDK

音频处理库
C
4
star
25

DexMerge

实现dex合并的功能
Java
4
star
26

androidEnhance

Android 平台framework、chromium、camera、音视频相关技术博客汇总
3
star
27

MessageQueue

c++ message queue
C++
3
star
28

Algorithm_Interview

算法知识总结
Java
3
star
29

FFmpegDemo

代码实现FFmpeg基本功能
C
2
star
30

JMediaCodec

实现MediaCodec并行编码和解码的工作
Java
2
star
31

MediaCache

C++
2
star
32

OpenGLDemo

提供了OpenGL ES 相关的几个demo,可以学习OpenGL ES基本功能
Java
2
star
33

JeffMP4SDK

实现MP4视频的拼接,h264转MP4视频,ts合并为MP4视频
Java
2
star
34

JeffMony

1
star
35

libwebp-android

libwebp library with android platform
CMake
1
star
36

CustomCameraFilter

Camera OpenGLES implements custom filters
Java
1
star
37

SPS-PPS-Parser

1
star
38

FutureHouse

1
star
39

JeffCamera

C
1
star