- PVSM.RU - https://www.pvsm.ru -
Ровно месяц назад была опубликована статья LiveDC — Быстрый доступ к p2p файлам [1]. Смысл ее в том, что Erty_Hackward [2] написал DC-клиент с возможностью просмотра файлов до их окончательной загрузки. С его помощью можно, например, смотреть фильмы спустя пару минут после начала закачки, перематывать их, смотреть с любого момента. А можно извлечь нужный файл из большого архива, не перекачивая целый архив.
Мне очень понравилась идея этой программы. Но она написана на C#. А хотелось бы использовать ее в линуксе. Поэтому с разрешения автора я с большим удовольствием взялся за создание аналогичной программы для линукса. В результате получился консольный битторрент клиент QLiveBittorrent.
Расскажу о работе QLiveBittorrent на примере скачивания фильма. Ну, например, мой друг выложил в сеть видеозапись выпускного вечера, недавно прошедшего в нашей школе, а я хочу ее скачать, и еще раз насладиться этим незабываемым зрелищем.
Я начинаю скачивать фильм. Указываю папку, куда его надо подмонтировать. И тут же пытаюсь его открыть. Фильм открывается 1-2 мин — в зависимости от скорости. Начинаю смотреть — лагов, как правило, нет, если скорости хватает. Далее я перематываю фильм на середину. Наблюдаю тормоза ~30 сек, и продолжаю смотреть его с середины.
Происходит примерно следующее. Изначально, в момент открытия фильма в плеере, программа скачивает первые несколько блоков фильма и последний блок, чтоб получить информацию о его продолжительности. Далее она продолжает скачивать фильм с начала. Но в момент перемотки фильма на середину, программа начинает скачивать именно тот блок, который был запрошен плеером.
Кроме скачивания фильмов, программу можно использовать для работы с архивами, iso-образами, для просмотра папок с огромным числом картинок. Это очень удобно — начать качать архив, и с самого начала, не дожидаясь пока он скачается, открыть его, сразу указать, какой файл тебе нужен, и скачать именно его.
После того, как я осознал, что будет проще написать свое, чем пытаться портировать LiveDC на линукс, я сразу же приступил к разработке.
Сначала я думал встроить свой функционал в мой любимый bittorrent клиент [3]. Но после просмотра исходников это желание отпало. Миллионы файлов, везде defin-ы на разные системы, все это в виде простыни, и ничего не понятно. Однако, под впечатлением от qbittorrent, я выбрал тот же инструментарий.
За день был написан драйвер файловой системы qlive.
Еще за день — графика и скачивание торрентов.
Выглядело это примерно так:
На этом разработка впала в ступор. Программа работала, докачивала необходимые куски, но регулярно получала SIGSEGV (ошибка «программа обратилась не по адресу»). В это же время я грустно смотрел на функционал qbittorrent и utorrent, и до меня медленно доходило, что энтузиазма на месяцы разработки у меня не хватит…
Второе дыхание открылось, когда я решил забить на GUI. Кому он нужен? На его поддержку уходит слишком много нервов! Так появился консольный битторрент клиент. А затем появилась интересная идея разделить сидирующие торренты от качающихся.
В результате программа оказалась разделенной на качающую часть, которая умеет монтировать недокачанные файлы, ограничивать скорость скачивания и быть обычным торрент-клиентом и сидирующую часть (seed-manager), которая умеет раздавать то, что скачано, а также ограничивать скорость отдачи.
А работает она примерно так: есть X-server, есть клиенты. В какой-то момент клиент подключается. Вопрос — когда это происходит? Экспериментальным путем (методом пристального взгляда) я выяснил, что подключение происходит в момент создания QApplication. Соответственно, если нужна графика, то я создаю QApplication, если нет — QCoreApplication. Таким образом, программа может запускаться как в голой консоли, так и с графическим мини-интерефейсом.
Исходники [11]
ArchLinux (AUR) [12]
linux-x86-64 [13]
Для работы требуются библиотеки boost, Qt, libtorrent-rasterbar.
Настройки хранятся по адресу ~/.qlivebittorrent
Автор: vtyulb
Источник [14]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/38144
Ссылки в тексте:
[1] LiveDC — Быстрый доступ к p2p файлам: http://habrahabr.ru/post/181906/
[2] Erty_Hackward: http://habrahabr.ru/users/erty_hackward/
[3] мой любимый bittorrent клиент: http://qbittorrent.sourceforge.net/
[4] Qt5: http://qt.digia.com/
[5] libtorrent-rasterbar: http://www.rasterbar.com/products/libtorrent/
[6] FUSE: http://fuse.sourceforge.net/
[7] ximaera: http://habrahabr.ru/users/ximaera/
[8] статья про boost::program_options: http://habrahabr.ru/post/174347/
[9] Libtorrent api: http://www.rasterbar.com/products/libtorrent/manual.html
[10] github.com/qbittorrent/qBittorrent: https://github.com/qbittorrent/qBittorrent
[11] Исходники: https://github.com/vtyulb/QLiveBittorrent
[12] ArchLinux (AUR) : https://aur.archlinux.org/packages/qlivebittorrent-git/
[13] linux-x86-64: https://sourceforge.net/projects/qlivebittorrent/files/QLiveBittorrent.tar.gz/download
[14] Источник: http://habrahabr.ru/post/185770/
Нажмите здесь для печати.