项目要求:实现Android端P2P视频点播软件
转载请注明出处: http://blog.csdn.net/echoaiya/article/details/44196771
方案:Libtorrent + VLC
参考:(1) Tribler-streaming
(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_