![]() |
|
|
![]() |
#1 |
Senior Member
Регистрация: 15.03.2012
Сообщений: 1,094
|
![]()
Этот ветка создана для всех желающих помочь получить СТАТИЧЕСКИ скомпилированную библиотеку Libtorrent.
Зачем это нужно? На текущий момент эту библиотеку используют многие плагины, представленные на нашем форуме. Используют для организации потокового скачивания торрент-раздач (реализация торрент-плееров). Однако есть небольшая засада. Установка этой библиотеки для обычного пользователя не так тривиальна в случае, если она используется в связки с XBMC. В добавок к этому, кучу “головняков” имеют и разработчики плагинов, пытаясь разобраться в “зоопарке” железа пользователей. Все эти проблемы можно решить, если скомпилировать библиотеку для всех платформ в статическом режиме. В этом случае, все зависимости (OpenSSL, GeoIP и др.) и сам libtorrent будут собраны в ОДИН файл. Точнее – по одному файлу на каждую платформу (linux32, linux64 и т.д.). Если библиотека собрана в статическом режиме, то ей безразлично где она находится, какой python-интерпретатор ее использует (системный или встроеный в XBMC) и т.д. Полученные файлы можно просто закидывать в свои плагины и пользователь даже не заметит, что используется libtorrent. Все «портянки» с описанием установки библиотеки уйдут в прошлое. Как компилировать? Чтобы не загрязнять собственную систему, а также быть полностью уверенными в том, что все зависимости собираются внутрь библиотеки (и она будет работать поверх чистой ОС) вся компиляция происходит в виртуальной машине. На основе VirtualBox. Для упрощения передачи друг-другу наработок используется Vagrant. Как поставить Vagrant? Vagrant хорошо работает в Linux и MacOS. Про Windows ничего не могу сказать. Имеется в виду сам Vagrant, а не виртуальные машины с целевыми системами. Vagrant имеет две зависимости: Ruby и VirtualBox. Если у вас MacOS, то Ruby уже стоит. Если Linux свежий, то Ruby также скорее всего установлен. VirtaulBox ставится элементарно. Если вы используете GUI в Linux или MacOS, то ставьте VirtualBox с помощью графического установщика. Просто ответьте на все вопросы положительно. С установкой Vagrant также справится любая домохозяйка. На официальном сайте скачайте графический установщик и также ответьте на все вопросы положительно. Как использовать Vagrant?
На этом все. Нужная виртуальная машина скачается из интернет и в ней запустится компиляция libtorrent. После того, как все скомпилируется, файл будет находиться по адресу ~/build/vm. Просто скопируйте его куда-нибудь и после этого виртуальную машину можно уничтожить. Уничтожение виртуальной машины происходит при помощи консольной команды vagrant destroy выполненной из той-же директории, где лежит Vagrantfile. Для повторной компиляции (например, в случае ошибки), вначале надо уничтожить виртуальную машину (выполните vagrant destroy) и затем заново выполните vagrant up. Если вам надо войти внутрь виртуальной машины, то в той же директории выполните vagrant ssh. Как редактировать Vagrantfile для сборки под другую систему? Найдите в Vagrantfile внизу строчку config.vm.box = "бла-бла-бла" В этой строчке указывается целевая операционная система под которую вы хотите скомпилировать libtorrent. Например, кодовое имя для «пустой» 64-битной Убунты будет hashicorp/precise64. Весь список доступных ОС вы можете найти на сайте VagrantCloud. Далее. Выбранная система будет установлена «голой». Весь процесс компиляции запрограммирован в строках, которые начинаются с $script = SCRIPT и заканчиваются строкой SCRIPT. Все что между этими строками – это обычный shell. Вот в нем вы и можете «играться» сколько захотите. Какая помощь необходима от сообщества? Если вы умеете статически компилировать libtorrent под какую-то конкретную систему (на которой работает XBMC) создайте такой же Vagrantfile и скиньте его в эту ветку. Я размещу его в этом заглавном посте. Также, если у вас есть какие-то полезные ссылки по теме, то также их скидывайте в эту ветку. Я размещу их в заглавном посте. Будущее. Как только мы «научимся» компилировать под большинство требуемых нами платформ, можно будет создать какой-нибудь проектик где-нибудь на github`е и уже как-то все это причесать в виде отдельного плагина для XBMC. Имея такой плагин, создать уже к нему качественный торрент-плеер будет делом небольшого времени. Полезные ссылки:
Готовые наработки Текущий статус проекта Таблица с текущем состоянием проекта находится здесь: https://docs.google.com/spreadsheets...GA00ZDnlBb99_g Скомпилированные модули Скомпилированные модули можно взять в плагине script.module.libtorrent, который разрабатывает DiMartino. Папка с самими модулями находится здесь: https://github.com/DiMartinoXBMC/scr...hon_libtorrent Скрипты компиляции (включая Vagrantfile) Некоторые компилятся с ошибками (отмечены красным) и выложены для обмена наработками. Vagrantfile для Linux 32-bit: (версия 1.0.6): Vagrantfile для Linux 64-bit (версия 1.0.6): Инструкция для компиляции в Windows (автор - Roman_V_M): Скрипт компиляции для Win32 (автор - Roman_V_M): Скрипт компиляции для Android (по словам автора - "пока сыровато") [версия - 1.0.3] (автор - srg70): Скрипт компиляции для Mac OS X [версия - 0.16.19] (автор - srg70):
__________________
RuTracker: http://xbmc.ru/forum/showthread.php?t=2243 Ruhunt.Pulsar: http://xbmc.ru/forum/showthread.php?t=6759 Last.VK: http://xbmc.ru/forum/showthread.php?t=3709 Lovi.fm: http://xbmc.ru/forum/showthread.php?t=6758 Последний раз редактировалось HAL9000; 28.01.2016 в 23:35. |
![]() |
![]() |
![]() |
#2 |
Senior Member
|
![]()
Пока человечество не научится компилировать boost.python под Android и iOS, мы не сможем собрать ни статические, ни любые другие py-libtorrent под эти платформы.
С остальными платформами не должно быть больших проблем. Я бы начал с составления списка наших целей, а именно до сих пор не имеющих своих libtorrent.so ОСей. Отмечу, что я скомпилировал 1.0.2 и 1.0.0 под windows и linux_x86_64, так они ужасно искали сидов, с чем связано решительно не понятно, настройки сессий сравнивал буквально построчно, все разные выставлял в соответствии со старой версией, где на популярную раздачу уже через секунду есть сид. Поэтому временно в модуле для Torrenter использую старую 0.6.10, хотя уже тестирую 0.6.18 и ищет сидов она так же хорошо как 0.6.10. Надо попробовать со всеми равными флагами компиляции. Дошло до того, что я перехватывал пакеты, выяснил, что 1.0.2 посылает всем find_node запросы, а старая get_peers, у них даже в блоге libtorrent об этом что-то написано. И так, по моим прикидкам для создания libtorrent в python обмотке требуется: компилятор способный скомпилировать boost.python, потому что сам python, openssl и даже остальные модули boost вроде не испытывают проблем с кроссплатформенностью.
__________________
Плагин MyShows.ru (+оценка KinoPoisk.ru) для Kodi http://xbmc.ru/forum/showthread.php?t=3264 Торрент-стример Torrenter v2 http://xbmc.ru/forum/showthread.php?t=6837 Последний раз редактировалось DiMartino; 08.12.2014 в 07:00. |
![]() |
![]() |
![]() |
#3 |
Member
Регистрация: 25.01.2013
Сообщений: 85
|
![]()
Отличное начинание!
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Регистрация: 12.06.2011
Адрес: Киев
Сообщений: 1,933
|
![]() Цитата:
Может есть смысл выкладывать уже скомпилированные модули с указанием версии libtorrent, системы и платформы, например libtorent 0.16.19, Windows x86? Насчет того, чтобы свести все бинарные модули в один аддон-модуль, идея тоже интересная. Единственное но - всё равно придется делать проверку системы при помощи platform, чтобы импортировать нужный бинарный модуль. Но это дело техники. Кстати, объясните чайнику, какой принцип воспризведения торрентов в Коди? Мы запускаем закачку, ставим ей set_sequential_download(True), чтобы грузить куски последовательно, дожидаемся, пока загрузится достаточный кусок файла (в %) и потом отдаем частично загруженный файл плееру Коди, который играет файл с начала, пока в фоне грузятся остальные части? Так? Или я чего-то не понимаю?
__________________
Координатор русского перевода Kodi: https://www.transifex.com/projects/p/kodi-main/ ------------------------------ Raspberry PI 2 + LibreELEC 8 (Kodi 17) Samsung Galaxy Tab A 10.1 + Kodi 17 for Android ------------------------------ Читаем и пополняем Википедию форума: http://xbmc.ru/wiki ------------------------------ На любые личные сообщения, не связанные с переводом Kodi, не отвечаю. Для обсуждений и советов есть форум. |
|
![]() |
![]() |
![]() |
#5 | ||
Senior Member
|
![]() Цитата:
PHP код:
Цитата:
Класс Torrent стримит так: создает сессию, подключает dht, добавляет торрент, обнуляет приоритет всех кусков, высчитывает первый и последний кусок файла, выставляет приоритет первый+сколько скажут в МБ и два последних, set_sequential_download, полностью скачивает буфер, МЕГАКОСТЫЛЬ, начинает играть и ставит все остальные куски в скачку.
__________________
Плагин MyShows.ru (+оценка KinoPoisk.ru) для Kodi http://xbmc.ru/forum/showthread.php?t=3264 Торрент-стример Torrenter v2 http://xbmc.ru/forum/showthread.php?t=6837 |
||
![]() |
![]() |
![]() |
#6 | |
Senior Member
Регистрация: 12.06.2011
Адрес: Киев
Сообщений: 1,933
|
![]() Цитата:
На основании этих статей также попробовал реализовать алгоритм "скользящего окна" (правда, в упрощенном виде) - вроде как получилось. В общем, как оказалось, в реализации стриминга торрентов нет ничего сложного. Кстати, так до сих пор и не понял, зачем нужен мегакостыль.
__________________
Координатор русского перевода Kodi: https://www.transifex.com/projects/p/kodi-main/ ------------------------------ Raspberry PI 2 + LibreELEC 8 (Kodi 17) Samsung Galaxy Tab A 10.1 + Kodi 17 for Android ------------------------------ Читаем и пополняем Википедию форума: http://xbmc.ru/wiki ------------------------------ На любые личные сообщения, не связанные с переводом Kodi, не отвечаю. Для обсуждений и советов есть форум. |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
|
![]() Цитата:
__________________
Плагин MyShows.ru (+оценка KinoPoisk.ru) для Kodi http://xbmc.ru/forum/showthread.php?t=3264 Торрент-стример Torrenter v2 http://xbmc.ru/forum/showthread.php?t=6837 |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Регистрация: 15.03.2012
Сообщений: 1,094
|
![]() Цитата:
set_sequential_download() сама по себе работает плохо. Хотя для проформы включать ее можно. После того, как начинаешь "играться" с приоритетами кусков, она вряд-ли будет на что-то влиять. В общем, включить ее можно из соображений "кашу маслом не испортишь". По поводу приоритетов кусков - это единственный способ организовать стриминг видео-торрентов. Теперь, когда вы Roman_V_M разобрались как это работает, то наверника понимаете почему "сбоят" все плагины с торрент-плеерами. Какой-то кусочек не нашелся в p2p-рое и все - сбой воспроизведения. Единственная возможность приблизиться к "потоковому качеству" - это четко расчитывать сколько кусочков нужно прямо сейчас xbmc-плееру. Чтобы в нужный момент поставить воспроизведение на паузу и дождаться когда недостающий кусочек придет из роя. И вот тут включается "математика", которой задолбаешься заниматься. Нужно разбираться во всех видео-форматах, чтобы понимать сколько кусков нужно прямо сейчас. Исходя из этих форматов как-то надо расчитывать прогноз когда доступных кусков станет уже мало для xbmc-плеера (чтобы вовремя поставить на паузу - плеер xbmc не отличается моментальной отзывчивостью к своему API). Прогнозируя это, нужно брать во внимание текущую личерскую скорость скачки. Размер файла. И т.д. Дополнительный головняк добавляется, если есть желание прикрутить перемотку (а оно естественно есть). Опять нужно смотреть на каждый формат в отдельности - позволит-ли он "перепрыгнуть" сразу в новеое место файла? или ему надо все-равно все последовательно скармливать? В общем, создание торрент-плеера - вещь интересная, но сложная. Достойна отдельного проекта. Что у меня есть из наработок? Есть DelugeStream. Заброшенный мной. Мечтаю найти время вернуться к нему. Вернее не к самому проекту, а только к части, которая занимается контролем libtorrent. Если скомпилим libtorrent - точно вернусь ![]() ![]() Если интересно, то работа с приоритетами кусков запрограммирована там в функции update и, следующей за ней, prioritize_up. Там, конечно, еще надо допиливать, но сделано очень много. Включая поддержку просмотра отдельных серий в сериальной раздаче, поддержку сразу одновременной закачки нескольких раздач (для одновременного просмотра с разных устройств разного контента) и многое другое. Если будут вопросы по коду или неясности в стиле "зачем там что-нибудь сделано", пишите - я отвечу. P.S.: Оффтоп: Торренты не предназначены для потока. И НИКОГДА не будут для этого предназначены. Повышенный интерес к этой технологии существует исключительно из-за мегатонны контента, который доступен на трекерах. Как только в таком же объеме будут представленны обычные пиратские сайты, смысл в торрент-плеерах пропадет.
__________________
RuTracker: http://xbmc.ru/forum/showthread.php?t=2243 Ruhunt.Pulsar: http://xbmc.ru/forum/showthread.php?t=6759 Last.VK: http://xbmc.ru/forum/showthread.php?t=3709 Lovi.fm: http://xbmc.ru/forum/showthread.php?t=6758 |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
|
![]() Цитата:
__________________
Плагин MyShows.ru (+оценка KinoPoisk.ru) для Kodi http://xbmc.ru/forum/showthread.php?t=3264 Торрент-стример Torrenter v2 http://xbmc.ru/forum/showthread.php?t=6837 |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Регистрация: 15.03.2012
Сообщений: 1,094
|
![]()
Может быть. Последний раз когда я смотрел, это было не так. Может что и изменилось.
Думаю, что лучше все-таки пытаться поддерживать именно скрипты компиляции. Потому что, человек может заболеть, влюбиться, уйти с головой в основную работу и так далее... Если есть скрипты, то с выходом новой версии libtorrent кто-нибудь другой сможет подхватить проект. И тогда работа не пропадет. А готовые сборки и сейчас есть. Вон по форуму где-то гуляет сборка для OpenELEC, но версия libtorrent старая. По идее надо бы собрать новую версию, но никто не готов браться за это с нуля.
__________________
RuTracker: http://xbmc.ru/forum/showthread.php?t=2243 Ruhunt.Pulsar: http://xbmc.ru/forum/showthread.php?t=6759 Last.VK: http://xbmc.ru/forum/showthread.php?t=3709 Lovi.fm: http://xbmc.ru/forum/showthread.php?t=6758 |
![]() |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
Опции просмотра | |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
OpenELEC с поддержкой ACEStream и LibTorrent-Rasterbar | OneEvil | Поддержка платформы Linux \ Live | 383 | 29.07.2015 06:21 |
Рзделы для видео библиотеки | mdog288 | Подсказки, описания и FAQ по XBMC | 3 | 16.09.2011 10:17 |