更新记录

1.0(2023-04-18)

文件/视频下载器,支持m3u8下载


平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 12.0 armeabi-v7a:支持,arm64-v8a:支持,x86:支持 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


使用说明:

如何试用?

1.点击试用,选择试用项目->manifest->原生插件->选择云端插件; 2.发行->APP云打包->选择“打自定义调试基座”(不要选择打正式包)->打包; 3.第2步打包成功后,会提示“打自定义调试基座包成功”,然后,运行->运行到手机或模拟器->运行到Android App基座; 4.弹框中,选择运行设备后,选择运行到自定义基座,就可以试用了。

下载:

<template>
    <view style="padding-top: 100rpx;width: 100%;padding: 0 20rpx;box-sizing: border-box;">
        <input placeholder="输入url" style="height: 100rpx;padding: 0 20rpx;border: 1px solid red;margin: 20rpx 0;"
            v-model="inputValue" />
        <button type="primary" style="margin: 20rpx 0;" plain="true" @click="start()">下载</button>
        <button type="primary" style="margin: 20rpx 0;" plain="true" @click="stop()">暂停</button>
        <button type="primary" style="margin: 20rpx 0;" plain="true" @click="resume()">继续</button>
        <button type="primary" style="margin: 20rpx 0;" plain="true" @click="cancel()">取消</button>
        <button type="primary" style="margin: 20rpx 0;" plain="true" @click="reStart()">重下</button>
        <button type="primary" style="margin: 20rpx 0;" plain="true" @click="play()">播放</button>
        <view style="margin: 20rpx 0;">
            下载进度:{{percent}}%
        </view>
        <view style="margin: 20rpx 0;word-break:break-all;word-wrap:break-word;">
            <text>信息提示:{{tips}}</text>
        </view>
    </view>
</template>

<script>
    // 获取 module 
    const downloader = uni.requireNativePlugin("YL-Download")

    export default {
        data() {
            return {
                inputValue: "https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/%E7%AC%AC1%E8%AE%B2%EF%BC%88uni-app%E4%BA%A7%E5%93%81%E4%BB%8B%E7%BB%8D%EF%BC%89-%20DCloud%E5%AE%98%E6%96%B9%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B@20200317.mp4",
                percent: "0",
                tips: "无"
            }
        },
        mounted() {
            //初始化,必须调用
            downloader.init();

            //如果下载m3u8视频,默认会把m3u8转换为mp4格式,以适应各种播放器,
            //如果想保留m3u8格式(即下载后以.m3u8格式结尾),则可以调用该方法
            //downloader.userM3u8Suffix();

            //检查该url的下载状态,
            //当退出当前页面,再此进入时调用此方法,可以自动继续显示下载进度,
            //如果未下载完成退出app,再次打开app进入该页面时,会自动开始下载,并返回下载状态,
            //如果检查已下载完成,则返回本地路径
            downloader.checkDownloading(this.inputValue, result => this.callback(result));
        },
        methods: {
            start() {
                downloader.setUrl(this.inputValue, result => this.callback(result));
                downloader.start();
            },
            stop() {
                downloader.stop();
            },
            resume() {
                downloader.resume();
            },
            cancel() { //已下载完成的调用取消,相当于删除
                downloader.cancel();
            },
            reStart() {
                downloader.reStart();
            },
            play() {
                //获取下载完成后的本地路径,未完成不返回路径
                downloader.getFilePath(this.inputValue, result => {
                    var data = JSON.parse(result);
                    if (data.msg) {
                        uni.navigateTo({
                            url: '/pages/player?path=' + encodeURIComponent(data.msg)
                        })
                    }
                });
            },
            callback(result) {
                //code:-1 错误信息 msg:错误信息
                //code:1 下载中 msg:下载进度
                //code:2 下载完成 msg:本地路径
                var data = JSON.parse(result);
                if (data.code == -1) {
                    this.tips = data.msg; //错误信息
                } else if (data.code == 1) {
                    this.percent = data.msg; //下载进度
                } else if (data.code == 2) {
                    this.percent = "100";
                    this.tips = data.msg; //文件保存路径
                }
            }
        }
    }
</script>

播放:

<template>
    <view style="width: 100%;box-sizing: border-box;">
        <video style="width: 100%;height: 210px;" :src="src" autoplay controls />
        <view style="margin: 20rpx;word-break:break-all;word-wrap:break-word;">
            <text>{{src}}</text>
        </view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                src: ""
            }
        },
        onLoad(option) {
            this.src = "file://" + decodeURIComponent(option.path);
        },
        methods: {}
    }
</script>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

"android.permission.INTERNET", "android.permission.ACCESS_NETWORK_STATE", "android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.READ_EXTERNAL_STORAGE", "android.permission.MOUNT_UNMOUNT_FILESYSTEMS", "android.permission.MANAGE_EXTERNAL_STORAGE"

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问