Libtorrent 之 NDK 编译

项目要求:实现Android端P2P视频点播软件   

转载请注明出处: http://blog.csdn.net/echoaiya/article/details/44196771

方案:Libtorrent + VLC

参考:(1) Tribler-streaming 

            (2) RuTracker-2.6.5.5

            (3) frostwire-android

            (4) frostwire-jlibtorrent

            (5) libbtstream


说明:

(1)Tribler-streaming JAVA语言,是国外某大学学生团队实现的android平台P2P视频点播系统,其采用的是VLC+libtorrent,文档说明中提到实现了P2P视频点播,不过提供的代码验证不通过,且未提供JNI代码,libtorrent.so库中有些底层方法不知是如何实现的。其JAVA层修改片优先级以实现播放的方法可以参考一下。底层代码在com.softwarrior.libtorrent.LibTorrent.java,播放代码在org.videolan.vlc.gui.video.VideoPlayerActivity。


(2)RuTracker-2.6.5.5 JAVA语言,网上最新版本APK是RuTracker-2.9.6.5,只找到2.6.5.5的代码,它与俄罗斯种子网站RuTracker应该是一家。RuTracker-2.6.5.5主要作用是从几个种子网站搜索种子并下载,经测试其代码可用,且最重要的是提供了libtorrent的JNI编译代码(本人尝试多次ndk编译libtorrent-1.0.2均失败,发现不能直接编译,需要修改libtorrent-1.0.2,如何修改就不得而知了)。不过该libtorrent版本较低,要换新版本可能会比较麻烦。


(3)frostwire-android JAVA语言其实现了类似于RuTracker-2.6.5.5的功能,UI更加漂亮,搜索的种子网站也较多。其依赖于frost-wire-jlibtorrent和frostwire-common两个JAVA库。


(4)frostwire-jlibtorrent JAVA语言,利用swig将C++写的libtorrent-1.0.2转换为Java,且ndk编译生成jlibtorrent.so库,方便调用libtorrent底层实现。找到此代码非常开心,以为有它万事大吉,谁知frostwire作者在写libtorrent.i时,忽略了好些libtorrent的类和方法,更郁闷的是,按照作者的方法死活编译不过ndk,无法自己生成jlibtorrent.so库,浪费了我半个月的时间,纠结得要死,最后还是无奈放弃。


(5)libbtstream C++语言,网上找到的一个据说实现了libtorrent顺序下载片并播放的API库,代码由C++语言编写。原本打算将libbtstream转为JAVA,调用frostwire-jlibtorrent实现功能,无奈libbtstream所需的两个类torrent.cpp和torrent_

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要使用 libtorrent4j 下载种子,您需要进行以下操作: 1. 导入 libtorrent4j 库和相关的模块,例如: ```java import com.frostwire.jlibtorrent.*; ``` 2. 创建一个 `SessionManager` 对象,并设置一些参数,例如: ```java SettingsPack settings = new SettingsPack(); settings.setInteger(SettingsPack.int_types.download_rate_limit.swigValue(), 1000); settings.setInteger(SettingsPack.int_types.upload_rate_limit.swigValue(), 1000); SessionManager s = new SessionManager(); s.applySettings(settings); s.start(); ``` 在这个例子中,我们设置了最大下载速度和上传速度为 1000 B/s,并创建了一个 `SessionManager` 对象。然后,我们使用 `applySettings` 方法将设置应用于会话管理器,并使用 `start` 方法启动会话管理器。 3. 创建一个 `TorrentHandle` 对象,并通过 `addTorrentInfo` 方法将种子添加到会话管理器中,例如: ```java String torrentFilePath = "/path/to/torrent/file"; byte[] torrentFileBytes = Files.readAllBytes(Paths.get(torrentFilePath)); TorrentInfo torrentInfo = new TorrentInfo(torrentFileBytes); TorrentHandle torrentHandle = s.getTorrents().addTorrentInfo(torrentInfo); ``` 在这个例子中,我们将种子文件读入 `byte` 数组中,并使用 `TorrentInfo` 对象解析种子文件的元数据。然后,我们使用 `addTorrentInfo` 方法将元数据添加到会话管理器中,并获得一个 `TorrentHandle` 对象,用于管理下载进程。 4. 启动下载进程,例如: ```java torrentHandle.resume(); ``` 在这个例子中,我们使用 `resume` 方法启动下载进程。 5. 等待下载完成,并关闭会话管理器,例如: ```java while (!torrentHandle.isFinished()) { System.out.println("Downloaded: " + torrentHandle.getStatus().getProgress() * 100 + "%"); Thread.sleep(1000); } s.stop(); ``` 在这个例子中,我们使用 `isFinished` 方法检查下载进程是否完成,如果没有完成,则打印下载进度,并使用 `Thread.sleep` 方法暂停 1 秒钟。一旦下载完成,我们使用 `stop` 方法关闭会话管理器。 这就是使用 libtorrent4j 下载种子的基本步骤。请注意,这只是一个简单的例子,您可能需要根据具体情况进行更多的设置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值