整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

几句代码写个飞快的下载软件,轻快版 aria2 支持

几句代码写个飞快的下载软件,轻快版 aria2 支持 UPnP,独立 EXE 程序

ria2 虽然很强大,配置就略有些复杂,一些懒人包说实话整成了累人包。

今天抽了点时间改进了一下 aardio 中的 process.aria2 扩展库,顺手解决了 aria2 不支持 UPnP 内网穿透的问题 —— 再也不用手动去配置了。

process.aria2 可以自动创建并管理 aria2 服务进程,自动获取并添加最新 Tracker 服务器,自动探测可用空闲端口,多个 aria2 进程不会冲突。并且自动检测系统环境并自动设置最佳配置。

写界面也要不了几句代码。下面介绍 2 种实现界面的方案:

1、用网页写界面。先用 WebView2 + AriaNg 演示一下。至于强大的 WebView2 请参考:放弃 Electron,拥抱 WebView2!JavaScript 快速开发独立 EXE 程序

2、直接用 aardio 创建原生界面。

这两种方案的完整源码我放到 process.aria2 扩展库的范例里了。运行「 aardio 工具 > 扩展库 」,在库名称中输入 process.aria2 找到扩展库,双击扩展库名字可以打开范例( 右键菜单也可以 ):

这里要注意一下,BT 下载如果一开始没速度是正常的,等一下或者先找个热门资源下载速度就会上来了。

方案一:网页( WebView2 + AriaNg )实现 aria2 界面

先看效果:

软件的全部 aardio 代码其实没几句,如下:

import win.ui;
/*DSG{{*/
var winform=win.form(text="aria下载器";right=1250;bottom=704;border="none")
winform.add(
bk={cls="bk";left=0;top=0;right=1251;bottom=31;bgcolor=11841964;dl=1;dr=1;dt=1;forecolor=5392444;linearGradient=0;z=2};
custom={cls="custom";text="";left=0;top=28;right=1251;bottom=706;bgcolor=16777215;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/

import process.aria2;
var aria2=process.aria2();  
aria2.startServer(); 
 
import web.view;
var wb=web.view(winform.custom);

//创建嵌入HTTP服务器
import wsock.tcp.simpleHttpServer; 
wsock.tcp.simpleHttpServer.threadGlobal={
    ARIA2_RPC_PORT=tostring(aria2.rpcPort);
    ARIA2_RPC_SECRET=crypt.bin.encodeBase64(aria2.rpcToken);
}

wb.go("/html/index.html");

//关闭窗口前关闭 aria2
winform.onDestroy=function(){
	aria2.stop();
}

//添加窗口标题栏、边框、阴影等
import win.ui.simpleWindow;
win.ui.simpleWindow(winform);

winform.show();
win.loopMessage();

aardio 用 simpleHttpServer 创建了一个嵌入式的微型 HTTP 服务端,另外 aardio 也可以将网页端的 AriaNg 自动嵌入 EXE 文件 —— 所以能生成独立 EXE。

aardio 支持类似 PHP 的服务端模板语法,这里我们简单地将初始化配置的 *.js 文件 改为 *.aardio 文件,然后在这个 aardio 文件里动态读取上面代码设置的


ARIA2_RPC_PORT, ARIA2_RPC_SECRET

就可以让 AriaNg 愉快地连接到 aardio 创建的 aria2 服务端了。

实际上就是修改 aria-ng-***.min.js,主要修改代码如下:

response.contentType="application/x-javascript"; ?> 
//…… 省略其他代码 ……
angular.module("ariaNg").constant("ariaNgDefaultOptions", {
    rpcPort: "<?=ARIA2_RPC_PORT ?>",
    secret: "<?=ARIA2_RPC_SECRET ?>"
}) 

当然这种事就不需要自己动手去改动 AriaNg 了,我在范例里写了一个『 更新前端 HTML.aardio 』,直接运行这个代码就可以自动下载最新版 AriaNg,自动修改 AriaNg …… 全自动搞定。


方案二:直接用 aardio 创建原生界面

这个界面我写得比较简单,主要演示用 aardio 直接调用 aria2 的 JSON-RPC 接口有多方便。这个先搞定了的话,单纯画个界面用什么界面组件就可以自由发挥了。

先看界面:

此方案生成的软件体积更小,下面看完整源码( 不再需要其他代码 )。

家好,我是路程lucky,热爱开发、设计、学习、生活、爱捣鼓的web前后端工程师,为您带来原创文章~

本文基于centos系统的aria2离线下载服务的安装,适用于各类所需人群学习、研究、实践。离线下载的原理、实践相信能给大家带来收获。

引言

在前几期文章中,我们分别在windows和centos操作系统基础上搭建了DLNA媒体服务,已经能够实现了媒体服务器上绑定的文件夹能够动态监测文件夹内容,包含媒体文件就能够局域网发送更新信息,从而电视端、手机端的DLNA终端设备更新获取到最新的播放媒体信息。

「动手打造家庭媒体网络平台」体验篇-媒体服务配置和预览效果

「动手打造家庭媒体网络平台」安装篇-windows搭建DLNA媒体服务

「动手打造家庭媒体网络平台」安装篇-centos搭建DLNA媒体服务


点击新增

然而,我们当时只是测试,手动在服务器的文件夹存放文件,这十分的不方便。我们预期是能够离线下载。因此,我们的服务器需要一个离线下载工具,能够在对应文件夹中下载我们所需的媒体资源。

什么是离线下载

最简单的理解是不在本机进行下载,由服务器帮你下载好,当你需要的时候再取回本地。

软件选择

经过调查当前支持linux的离线下载的软件有:

  • aria2:一个多平台轻量级,支持 HTTP、FTP、BitTorrent 等多协议的命令行下载工具。http://aria2.github.io/
  • transmission:由C开发而成(Mac OS上用的是Objective-C),硬件资源消耗极少,界面极度精简。https://transmissionbt.com/

这里我们采用的是aria2

软件结构

aria2分为客户端和服务器端。

  • 服务端:真正下载资源的服务aria2c进程。

aria2服务端官网

  • 客户端:GUI界面,提供资源的增删改调用服务器进行下载。这里推荐使用ariang的UI套件:基于angular开发的静态资源,接口请求aria2c进程。下载地址:http://ariang.mayswind.net/

ariang客户端网站

aria2服务端软件安装

centos下的软件主要步骤类似之前安装serviio软件一致,通过tar解压、configure配置、make install安装的方式进行安装即可。

先从官网下载压缩包https://github.com/aria2/aria2/releases/tag/release-1.35.0或者下载aria2源代码https://github.com/aria2/aria2,这里我们下载最新版。这里下载tar.gz的tar包。

选择tar.gz

关键步骤:

cd /lucky
// 解压安装包
tar -xzvf aria2-1.35.0.tar.gz
./configure
make
make install

直接启动aria2:

// 启动aria2进程, --enable-rpc=true参数为启动rpc进程,默认为6800端口,这样ui可以访问到
aria2c  --enable-rpc=true

*创建aria2自动启动服务

由于默认软件安装并不会每次开机就执行。我们需要将aria2改造为可启动的service服务,模式与原理跟之前的安装serviio类似具体可以参考。

aria2可以通过配置文件方式启动,给予它设置一些默认参数,这里我们放到/etc/aria2/aria2.conf文件中,如果没有可以新建。

STEP1.创建aria2-rpc.service

// 创建service文件
touch /lib/systemd/system/aria2-rpc.service

// 输入服务内容
[Unit]
Description=aria2c-rpc
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
User=root
Group=root
GuessMainPID=yes
ExecStart=/bin/aria2c --enable-rpc=true -D --conf-path=/etc/aria2/aria2.conf
ExecReload=/bin/kill -s QUIT $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

STEP2.启动服务

// centos系统方式启动
systemctl start aria2c-rpc
// 停止
systemctl stop aria2c-rpc
// 重启
systemctl restart aria2c-rpc

aria2客户端软件安装

客户端其实就是html、css、js的静态资源。需要搭建web服务器即可。这里使用nginx直接作为静态资源服务器能够访问到。放到对应目录即可。接口会调用 端口为6800的rpc服务知晓实时的状态

预览效果

浏览器访问web客户端页面,点击新增,输入下载地址,开始下载

点击新增

新增下载地址

设置下载路径

当文件下载完成后,就会按照我们之前的章节所提到的,媒体服务自动更新,DLNA客户端自动获取到最新视频,即实现了观看离线下载的媒体

结尾

离线下载技术使得我们能够将下载的任务交给服务器,实现资源共享。

通过离线下载媒体资源,贯通媒体资源播放,从而实现了媒体文件从源头获取到最终终端播放的一条顺畅数据流,全程手机操作,在互联网时代,真正实现了家庭媒体网络平台。


坚持原创,坚持动手实践,那么持续关注我,给予创造的动力,还给你一片广袤的天空。我是路程lucky,分享和实践专业技能,为美好生活和未来而努力奋斗。

riaNg Native中文版是mac上一款基于aria2开源下载软件的Web前端,遵守MIT开源协议, 使用纯 html & Javascript 开发, 不需要任何编译器或运行环境. 只要将 AriaNg 放在 Web 服务器里并在浏览器中打开即可使用. AriaNg使用响应式布局, 支持各种计算机或移动设备,支持多语言包括中文。

纯Html和Javascript,无需运行时

响应式设计,支持桌面和移动设备

用户友好的界面

排序任务(按名称,大小,进度,剩余时间,下载速度等),文件,bittorrent同行

搜索任务

重试任务

通过拖动调整任务顺序

更多任务信息(健康百分比,bt同行的客户信息等)

按照指定的文件类型(视频,音频,图片,文档,应用程序,存档等)或文件扩展名过滤文件

多目录任务的树视图

下载/上传aria2或单个任务的速度表

完全支持aria2设置

url命令行api支持

下载完成的通知

多语言支持

多aria2 RPC主机支持

导出和导入设置支持

减少带宽使用,仅请求增量数据

查看AriaNg Native 1.1.5安装包!http://ll006.cn/wOdKvs