libtorrent java_Libtorrent 之 NDK 编译

本文详细介绍了在Android上实现P2P视频点播软件的需求,探讨了多种方案,如Libtorrent + VLC,并重点讲述了如何通过NDK编译libtorrent库,尤其是对RuTracker-2.6.5.5的编译过程,包括设置环境变量、编译Boost库和修改源码等步骤。
摘要由CSDN通过智能技术生成

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

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

方案:Libtorrent + VLC

说明:

(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_plugin.cpp没有被编入frostwire-jlibtorrent,在重新编译forstwire-jlibtorrent未果的情况下,只能放弃该方案。

总结:鉴于frostwire-jlibtorrent无法重现编译,无奈只能放弃。所幸按照tribler-streaming作者介绍,成功编译了RuTracker-2.6.5.5,得出如下方案。

方案一  根据Rutracker-2.6.5.5自己写tribler-streaming的libtorrent.cpp文件。仔细阅读发现tribler-streaming调用的底层方法有一半是RuTracker原有的,剩下的一半是新加入的方法。这些新加入的方法有些是libtorrent本身支持的,比如SetPiecePriorities(),且有些新加入的方法没有被调用,可以不写。综上,自己写libtorrent.cpp非常可行。

方案二 NDK编译btstream,Java层调用btstream的方法实现播放。将btstream代码放入Rutracker-2.6.5.5/jni目录下,为libtorrent.cpp添加GetBTStream()方法,在RuTracker-2.6.5.5的Java层编写方法调用该JNI代码,验证是否能够成功播放。

无论如何,首先要做的是编译RuTracker-2.6.5.5。

1、NDK编译RuTracker-2.6.5.5

按照tribler-streaming说明,编译RuTracker-6.2.5.5,生成libtorrent.so,替换原libs下libtorrent.so文件,验证功能OK,编译成功。编译步骤如下:

Libtorrent

编译BOOST库

下载Boost-for-android代码:

$:git clone https://github.com/MysticTreeGames/Boost-for-Android

进入路径:

$:cd git/Boost-for-Android

执行如下命令:

$:./build-android.sh

设置环境变量

执行如下命令:

$:

sudo vi /etc/environment

$:

AndroidNDKRoot=path/to/android-ndk-r9 32

$:

NDK ROOT=path/to/android-ndk-r9 32

$:

NDK MODULE PATH=path/to/Boost-for-Android

$:

BOOST ROOT=path/to/boost

$:

BOOST BUILD PATH=path/to/boost/tools/build/v2

add the following to PATH:

path/to/Boost-for-Android

编译RUTRACKER

下载 RuTracker 源码:

svn checkout http://softwarrior.googlecode.com/svn/tags/RutrackerDownloader/2.6.5.5/

extract all from the JNI folder.

修改jni/libtorrent目录下, adaptle.cpp:

Changeifdef NR fallocateto:ifndef NR fallocate

将先前编译的Boost库拷贝到jni/libboost目录下,记得修改Android.mk,保证链接正确的boost库

在 Application.mk中添加:

APP ABI := armeabi armeabiv7a

命令行编译LIBTORRENT :

进入RuTracker 目录:

cd path/to/RuTracker

执行如下命令:

ndk-build clean

ndk-build

等侯片刻,在libs会生成armeabi和armeabi-v7a版本的libtorrent.so,编译成功

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值