0,0
рейтинг
6 июля 2013 в 23:42

Разработка → QLiveBittorrent — консольный bittorrent клиент для просмотра файлов до скачивания

Qt*
Ровно месяц назад была опубликована статья LiveDC — Быстрый доступ к p2p файлам. Смысл ее в том, что Erty_Hackward написал DC-клиент с возможностью просмотра файлов до их окончательной загрузки. С его помощью можно, например, смотреть фильмы спустя пару минут после начала закачки, перематывать их, смотреть с любого момента. А можно извлечь нужный файл из большого архива, не перекачивая целый архив.

Мне очень понравилась идея этой программы. Но она написана на C#. А хотелось бы использовать ее в линуксе. Поэтому с разрешения автора я с большим удовольствием взялся за создание аналогичной программы для линукса. В результате получился консольный битторрент клиент QLiveBittorrent.




Как оно работает

Расскажу о работе QLiveBittorrent на примере скачивания фильма. Ну, например, мой друг выложил в сеть видеозапись выпускного вечера, недавно прошедшего в нашей школе, а я хочу ее скачать, и еще раз насладиться этим незабываемым зрелищем.

Я начинаю скачивать фильм. Указываю папку, куда его надо подмонтировать. И тут же пытаюсь его открыть. Фильм открывается 1-2 мин — в зависимости от скорости. Начинаю смотреть — лагов, как правило, нет, если скорости хватает. Далее я перематываю фильм на середину. Наблюдаю тормоза ~30 сек, и продолжаю смотреть его с середины.

Происходит примерно следующее. Изначально, в момент открытия фильма в плеере, программа скачивает первые несколько блоков фильма и последний блок, чтоб получить информацию о его продолжительности. Далее она продолжает скачивать фильм с начала. Но в момент перемотки фильма на середину, программа начинает скачивать именно тот блок, который был запрошен плеером.

Кроме скачивания фильмов, программу можно использовать для работы с архивами, iso-образами, для просмотра папок с огромным числом картинок. Это очень удобно — начать качать архив, и с самого начала, не дожидаясь пока он скачается, открыть его, сразу указать, какой файл тебе нужен, и скачать именно его.

Как оно начиналось

После того, как я осознал, что будет проще написать свое, чем пытаться портировать LiveDC на линукс, я сразу же приступил к разработке.

Сначала я думал встроить свой функционал в мой любимый bittorrent клиент. Но после просмотра исходников это желание отпало. Миллионы файлов, везде defin-ы на разные системы, все это в виде простыни, и ничего не понятно. Однако, под впечатлением от qbittorrent, я выбрал тот же инструментарий.
  1. Qt5
  2. libtorrent-rasterbar
  3. FUSE

За день был написан драйвер файловой системы qlive.
Еще за день — графика и скачивание торрентов.
Выглядело это примерно так:


На этом разработка впала в ступор. Программа работала, докачивала необходимые куски, но регулярно получала SIGSEGV (ошибка «программа обратилась не по адресу»). В это же время я грустно смотрел на функционал qbittorrent и utorrent, и до меня медленно доходило, что энтузиазма на месяцы разработки у меня не хватит…

Второе дыхание

Второе дыхание открылось, когда я решил забить на GUI. Кому он нужен? На его поддержку уходит слишком много нервов! Так появился консольный битторрент клиент. А затем появилась интересная идея разделить сидирующие торренты от качающихся.

В результате программа оказалась разделенной на качающую часть, которая умеет монтировать недокачанные файлы, ограничивать скорость скачивания и быть обычным торрент-клиентом и сидирующую часть (seed-manager), которая умеет раздавать то, что скачано, а также ограничивать скорость отдачи.


Интересные моменты разработки

  1. Иногда, тестируя закачку торрентов, я с удивлением обнаруживал, что скорость скачивания превосходит максимальную скорость моего роутера — 802.11G ~2MБ/с. Она достигала 40-50 МБ/с, что было в принципе невозможно! Я пытался валить все на кеши. Однако, выяснилось, что у меня было запущено 2 клиента на компьютере, которые и обменивались между собой информацией на скорости чтения жесткого диска. Один читает, другой пишет. Впоследствии я использовал это для тестирования.

  2. Из-за того, что клиент консольный, мне пришлось разбираться с сигналами завершения. Я добавил обработку сигнала SIGTERM (сигнал для запроса завершения процесса). Во время дебага, когда я посылал SIGTERM «руками», он успешно перехватывался и обрабатывался. Однако, на практике, когда я в терминале жал ctrl-c, сигнал не обрабатывался. Оказалось, что терминал посылает не SIGTERM, а SIGINT (сигнал для остановки процесса пользователем с терминала). Это меня поразило. Оказывается, при нажатии ctrl-c идет сигнал не «останови процесс», а «пользователь хочет, чтоб процесс остановился». Наверное, можно придумать глубокий смысл разницы этих процессов, но это было довольно неожиданно и странно.

  3. Несмотря на то, что клиент консольный, мне хотелось, чтобы какое-то подобие GUI все же оставалось. Но ведь, если приложение консольное, то хочется, чтобы оно запускалось в голой консоли (TTY), а это невозможно при наличии GUI… Или возможно? Для этого надо понимать, как работает графика в линуксе.

    А работает она примерно так: есть X-server, есть клиенты. В какой-то момент клиент подключается. Вопрос — когда это происходит? Экспериментальным путем (методом пристального взгляда) я выяснил, что подключение происходит в момент создания QApplication. Соответственно, если нужна графика, то я создаю QApplication, если нет — QCoreApplication. Таким образом, программа может запускаться как в голой консоли, так и с графическим мини-интерефейсом.

  4. Смешивание Qt и libtorrent — это чистый ад. Мои нервы в конце концов не выдержали, и я начал пытаться переводить все в Qt. К сожалению, libtorrent использует std, поэтому весь мой код увешан QString::fromStdString(string) и QString.toStdString(), а так же конверсиями vector char, QVector char, QByteArray и т.п.

  5. Во время разработки я столкнулся с неприятной проблемой. В один прекрасный момент к программе подключаются медленные пиры и начинают неторопливо отдавать нужные куски. При этом в среднем скорость закачки хорошая, но задержки из-за них недопустимые. Я пытался с этим бороться. В какой-то степени задачу удалось решить за счет того, что первые 2 минуты программа ищет быстрых пиров, а затем ограничивает их максимальное число пятью пирами. Это позволяет отшивать большинство медленных пиров.

  6. Для того, чтобы после полуночи не было проблем с вычитанием времени, в программе реализована функция midnight(), которая каждую секунду проверяет, не полночь ли сейчас? В течение 5 секунд после полуночи программу колбасит — она при обновлении информации на экране обнуляет все временные счетчики, игнорируя запросы пользователя. Такой вот редкостный костыль. Я его за 3 минуты до полуночи написал.

Список фич

  1. Если торрент опубликовали только что, то отношение количества сидеров к личерам слишком маленькое. Это влечет за собой почти полную невозможность скачать такой торрент за разумное время. Поэтому в QLiveBittorrent добавлена возможность «превращения» в обычного торрент-клиента. Для этого надо нажать клавишу 'a' (английскую).

  2. При чтении подмонтированных файлов программы впадают в ступор, пока необходимые куски не будут скачаны. Но они обязательно из него выходят, когда это происходит. Это особенность программы.

  3. Авторитетные источники утверждают, что на канале 600КБ/с фильм весом 1.45G с внешней звуковой дорожкой и субтитрами проигрывается без лагов.

  4. Если нажать на клавиатуре ctrl-c (или послать SIGTERM), то программа начнет завершаться — сбрасывать данные на жесткий диск и отправлять информацию трекерам. После сброса данных можно нажать ctrl-c — тогда информация не будет послана трекерам. Это сделано, потому что меня очень расстраивают программы, которые невозможно завершить.

Источники

  1. Erty_Hackward — оригинальная идея
  2. ximaera — рассказал про то, как надо парсить параметры из командной строки.
  3. статья про boost::program_options
  4. Libtorrent api — хорошая библиотека, но эмоции от одностраничной документации непередаваемы.
  5. github.com/qbittorrent/qBittorrent — читал исходники, но ничего не понял.

Скачивание

Исходники
ArchLinux (AUR)
linux-x86-64

Для работы требуются библиотеки boost, Qt, libtorrent-rasterbar.
Настройки хранятся по адресу ~/.qlivebittorrent

UPD 00:30
Забыл описать еще две фичи:
  1. После загрузки торрента, он автоматически добавляется в список сидирования. Если seed-manager уже запущен, то он добавится в список в течение 10 минут.
  2. Если торрент был удален, то он будет удален из списка сидирования при первом же запросе.


UPD 18:00
DAP-DarkneSS выложил версию под OpenSUSE. Спасибо.
Версия под OpenSUSE

UPD 23:15
В выложенной версии не работало GUI. В чем ошибка я так и не понял, но требуемый костыль найден.
Файлы перезалиты.

UPD +месяц
DAP-DarkneSS выложил версии под Debian, Ubuntu и Fedora. Спасибо.
Debian и Ubuntu
Fedora
Тюльбашев Владислав @vtyulb
карма
48,2
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (91)

  • +2
    Плюсанул со всей силы :)
    Я некоторое время уже подумываю над реализацией подобного, но только для iOS и на Objective-C. По форматам торрент файлов, протоколам информации набрал, глянул, но очень скудная. Спасибо Вам за ссылки дополнительные.

    Теперь вот задумался, есть ли смысл нечто подобное, но в виде либы реализовывать для iOS или нет.
    • 0
      В Cydia есть приложение TorPlayer, оно умеет фильмы с торрентов проигрывать, но со скудным функционалом.
    • 0
      А есть ли под винду? или аналоги под винду?
      • 0
        Есть многократно упомянутый LiveDC.

        Если только для фильмов, то, как пишут в комментариях это:
        TorrentStream

        И, вероятно, uTorrent и Vuze.
        • 0
          Вообще я о консольных приложениях говорил…
  • 0
    Плюсую. Впервые просмотр недокаченых фильмов увидел в VLC 7 лет назад — очень крутая фича. Нравилось то что можно окрыть недокачеый файл, тогда как другие плееры говорили что вай битый и просто отказывались его проигрывать. Но чтобы достать фйл из архива не скачевая весь архив — это просто счастье! Спасибо за такую хорошую прогу!
    • 0
      Спасибо)

      Да, я тоже пользовался VLC для этих целей. Проблема была [есть] в том, что когда происходит небольшая аномалия и скорость скачивания падает, а VLC доходит до части, которую еще не скачал, он падает. А при повторном запуске — перемотка практически не работает.
  • +2
    Хотел бы поддержать ваше начинание на MacOSX простенькой гуйкой =)
    • 0
      Всегда рад, пишите в личку :-)
    • 0
      А бинарник консольного варианта сможете выложить?
  • +1
    Ух ты! Прямо то, что нужно для собственного «дропбокса»
    Не планируете отдельную ветку в этом ключе?
    • 0
      Битторрент протокол не предназначен для подобных финтов. То, что на нем получилось подобное сделать — не иначе, как чудо. Спасибо Erty_Hackward за веру в то, что оно может работать и за идею. Я бы сказал, что для этого стоит создать свой протокол.
      • 0
        Вообще говоря utorrent на виндовозе некоторое время такое вытворяет. И, если не ошибаюсь, vuse.
        • 0
          В uTorrent я такого не нашел. Vuze, насколько я понял, не умеет при этом проматывать на произвольный участок. И опять же архивы)

          А вообще под виндами есть прекрасная программа
  • –14
    Неужели где то ещё есть такие дохлы интернет каналы что фильмы надо качать часами? А если ваш интернет канал позволяет смотреть фильм во время скачивания — зачем его вообще скачивать? он-лайн ресурсов фильмовых навалом, в том числе и легальных. Объясните мне пожалуйста — в упор не понимаю цели.
    • +1
      промазал, ответил ниже
    • 0
      а если вы хотите посмотреть с 30 минуты? И да, такие каналы есть… у меня сейчас около мегабита.
      • –1
        Т.е. у вас тонкий канал и он-лайн видео-сайты с выбором качества, исходя из толщины канала вам не подходят, а тянуть с торрента и постоянно ждать догрузки — вас устраивает?
        • 0
          Нередко бывает достаточно развитая домашняя сеть с тонким каналом.
          Например, 10 тыс. пользователей на 100мбит («домашние») и интернет, скажем, 4мбита.
          И здесь торрент просто рулит! Переключение с «внешних» (интернет) сидов на локальных (а из 10 тыс. юзеров, как показывает практика, всегда найдётся по крайней мере два-три локальных сида) просто волшебно ускоряет загрузку.
          • –2
            Вы пишите отличную ахинею! Какое в пень «переключение с внешних на локальных»????? Естественно сиды ы вашей сети отдают быстрее, чем через интернет, только как это относится к сабжу?
            • 0
              Именно в точности к вопросу и относятся!
              «онлайн вилдеосайты» с тонким каналом не тянут. А ждать догрузки с торрента — не в падлу, покуда эта самая догрузка идёт с весьма толстого канала. К тому же децентрализованного.
              • 0
                Ну да, а атк же быстро скачать с тех же локальных сидов и спокойно потом смотреть вам конечно не судьба, вы слишком сильно торопитесь и/или столь нетерпеливы?
                у меня даже ещё вопрос есть, то, что тут многие за плюс приводят: несколько аудиодорог и сабы: а если они в виде отдельных файлов и лежат рядом в папочке — вы уже хрен их попереключаете — плеер их просто не увидит?
                да и на сколько я понял — вы только качаете, ничего при этом не раздавая, что негативно влияет на рейтинг, да и вообще «не хорошо»
                и ещё одно — если торрент только что был выложен и сидов пока мало — фиг вы что посмотрите на лету, а быстрее его будет нормально скачать, отсюда #1 в списке «фич»
                • 0
                  если торрент только что был выложен и сидов пока мало — фиг вы что посмотрите на лету, а быстрее его будет нормально скачать
                  Зависит от того, что качаешь. Когда на thepiratebay выложили Декстера новую серию недавно, вполне можно уже было смотреть через несколько минут, ибо там пиров образовалось сразу около 20000.
                • 0
                  Видите ли, тут вся разница между жамкнуть сразу «play» (причём, согласно объяснению автора, ЛЮБЫМ плейером, ибо нужная папка/файл уже смонтированы), либо тыкать какой-то левый клиент и ждать загрузки. И все альтернативные «аудиодороги» и прочее плейер увидит, ибо файлы такие есть! Только доступ чуть медленнее. Лично мне это огромный плюс (не я один сижу и смотрю за новинками. Супруга далеко не гуру в разных «монтированиях» и «плейерах». Потому здесь отдача нужного куска контента on-demand — просто must-have.
                  А потом уже — пусть висит, другие скачивают. Я УЖЕ посмотрел, и мне не жалко (у меня средний уровень раздачи в клиенте — 80 и выше. Т.е. отдал в 80 раз больше, чем скаяал).
                  Насчёт «торрент только что выложен» — тут да. Но до сих пор никогда не возникало проблемы по поводу «посмотреть сегодня что-нибудь другое».
                  • 0
                    Читаю вас и пазл не сходится:
                    1. Откуда «файлы такие есть» клиент будет знать — какие файлы надо сразу загрузить, а какие нет? Если допустим речь идёт о BD?
                    2. Супруге проще в линуховой консоле что то делать, недели в гуёвом торрент-клиенте добавить закачку?
                    3. Самое главное на мой взгляд: если вам «никогда не возникало проблемы по поводу «посмотреть сегодня что-нибудь другое»» — зачем тогда эти извращения, почему нельзя просто качать как все?

                    пс «отдал в 80 раз больше, чем скаяал» не верю. Я, вставая на раздачу в первом десятке, имея крайне неплохой канал на отдачу и реальную статику, редко вижу цифру выше 30, а чем больше раздача, тем ниже этот показатель.
                    • 0
                      Возможно, вам не очень много лет, и вы привыкли всё чётко делить на чёрное и белое. Но тут не так, есть и «серое».
                      1. Речь всё же о фильмах. С БД пока не сталкивались. Столкнёмся — будем решать персонально (хотя что-то мне подсказывает, что тот же myhomelib при тычке на конретный файл тоже «вздрочнёт» лежащего под FUSE torrent-клиента, и тот тоже возьмётся по-скорее скачать тыкнутый файл.
                      2. Супруге всяко проще в гуе. Но порой фантазия не срабатывает и мне проще «тыкнуть» (уже неважно где, в con, tui или gui самому. И начать смотреть. Чем скорее, тем лучше!)
                      3. То, что до сих пор не возникало — вовсе не говорит о том, что такой режим «комфортен». Каждый раз оказывалось в запасе что-то на посмотреть из серии «про запас». Но это «что-то» каждый раз одно. Гораздо комфортнее сразу ткнуть и начать смотреть желаемое, чем лезть «в загажник».
                    • 0
                      1. Да с базами данных тоже можно так работать. Клиент будет знать, что нужно скачать. У меня своя файловая система. Любой запрос к ней проходит через мою программу. Получив запрос на какой-либо блок, программа по-быстрому его качает, а затем говорит файловой системе, то что можно ответить на запрос.
                      2. Например, команда для встраивания в систему для открытия торрент файлов/магнет ссылок:
                      xterm -e qlivebittorrent %filename%
                      При этом появится вопрос куда качать и монтировать.
                    • 0
                      «отдал в 80 раз больше, чем скаяал» не верю.

                      Легко, если качаешь раз в неделю, а то и в месяц, а на раздачах стоишь 24/7. По крайней мере с плохим каналом и за провайдерским натом — 20 легко можно получить.
    • +6
      Найти онлайн фильм в 720 или 1080 практически невозможно, а ниже смотреть мне религия не позволяет )
      Я для этих целей использую Torrent Stream.
      • –7
        Да фильмы в 720 или 1080 даже вконтакте есть, чего их искать? :)))))
        • 0
          Не все и не сразу, а я хочу сразу как он вышел и не ждать еще пару часов пока он скачается! )
        • +4
          Во-первых, ВК не поддерживает 1080p, во вторых — у фильмов с торрентов есть возможность выбора звуковой дорожки, языка субтитров, а иногда даже автора перевода. Даже если загрузить в ВК все нужные их комбинации, текст субтитров будет безжалостно пожат видеокодеком.
    • 0
      На онлайновых обычно и ассортимент, и качество хуже. Да и навигация по сериям для сериалов. Плюс различные озвучки и сабы. А по качеству даже если разрешение 1080p, то чаще всего видеоряд сильно пережат, битрейт даже DVD не соответствует.
  • +5
    Вопрос разумный.

    1) Самообразование — цель №1.
    2) Возможность открывания архивов и любыми другими данными.
    3) Не устраивает функционал онлайн плееров. (несколько дорожек, субтитры — где они?)
    4) Непонятки с качеством. Количество пикселов ширину иногда очень слабо характеризует качество. Если у jpg картинки знать ее разрешение — вам это о чем-нибудь скажет? В моем случае размер файла хорошо его характеризует.
    • –3
      1. Ну за это можно только хвалить, посмотрев профиль я вообще порадовался что у нас ещё есть такая молодёжь, к этому претензий не имею
      2. Вот на скриншоте у вас исошка качается, вот объясните возможность её использования в недокачаном виде — на практике?
      3. Да на многих ресурсах и оригинальные дорожки есть и сабы и выбор качества и запоминание серий (правда сейчас подумал что встречал это только для сериалов, но думаю фильмы не отстают, на том же ютубе уже есть сабы :)) и другие плюшки
      4. А что — в торрент клиенте уже нельзя посмотреть размер загружаемого файла? Вот как раз размер файла так же может ничего не сказать — кривые руки решают этот вопрос на раз-два-три, так же как и с разрешением :)
      • +1
        2. Вот хочу я допустим потыкать LiveCD Rebecca Black Linux. Было бы здорово начать загружать виртуалу с ним задолго до того, как образ скачается целиком.
        3. С ума сойти! Я пробовал смотреть, как обстоят дела с удобством в легальных онлайн кинотеатрах на примере ivi.ru и близко не заметил там подобной функциональности. Можно пример?
        Я заранее уверен, что даже этим гипотетическим ресурсам с оригинальной звуковой дорожкой и субтитрами далеко по удобству до нормального десктопного плеера. Например, я хочу переключать дорожки звука/субтитров клавиатурными хоткеями и просматривать неинтересные сцены на скорости 130%.
        Но на пример всё равно очень интересно посмотреть.
  • +7
    Честно говоря, когда вы мне писали о идее реализовать что-то подобное под Linux, мне казалось, что у вас ничего не получится (С нуля, без опыта). Рад что не стал разубеждать и вдвойне рад что ошибался. Желаю успехов в дальнейшем развитии.

    Кстати, LiveDC стартует фильмы в считанные секунды а не минуты :P
    • +1
      Может связано с тем, что DC очень популярен в «локалках»?
      • 0
        Конечно, выше связанность сети, почти всегда чистые 100 Мбит. На самом деле и с торрентов скорость достаточная для запуска просмотра быстрее чем за минуту.
        • +1
          Проблема нахождения быстрых пиров. На это у меня и уходит время. Когда я качал через 127.0.0.1 у меня тоже был отклик на старт/перемотку ~0.5c
        • 0
          Ну так и надо указывать «за считанные секунды в условиях локалки» :) А то я уже чуть не полез устанавливать, а у нас локалки вообще нет, не уверен даже что два хоста с внешним IP могут связаться, а за NAT вообще весь трафик между хостами заблокирован после серии распространения вирусов.
  • 0
    Вы можете еще послать SIGQUIT с помощью CTRL+\ или SIGTSTP с помощью CTRL+Z
    • 0
      Спасибо)

      Мне уже ximaera написал про SIGQUIT, я даже уже исправил.

      А SIGTSTP, видимо, обрабатывать не нужно. Я же могу предполагать, то что после приостановки процесса, если пользователь не хочет потерять данные, то он его продолжит?
  • +3
    Да, сигналы дело такое :).
    SIGTERM чаще всего бывает при перезагрузке/остановке системы. Типа — э, мужики, закругляйтесь! Первое китайское предупреждение! (за ним через какое-то время следует SIGKILL — это уже для тех, кто не понял).
    А Ctrl+C — да, это SIGINT. Почувствуйте разницу между TERMinate (завершить) и INTerrupt (прервать). Типа, э, там юзер Ctrl+C жамкнул. Будем чо делать, или послать его? (а может юзер — прыщавый юнец, и ничего кроме Ctrl+C не знает. Команду kill в консоли набрать не сможет, и уж тем более kill -9. Можно и проигнорить, если дело сильно важное)
  • –3
    А ничего, что я это уже сто лет юзаю в Vuze, Deluge и uTorrent? А тут опять какие-то велосипеды.
    • +1
      Вот ссылка на инструкцию для uTorrent: habrahabr.ru/post/87632/
      Плагин для Deluge: dev.deluge-torrent.org/wiki/Plugins/Pieces
      Спецверсия Vuze: patraulea.com/azureus-ordered-download.patch/
      qBittorrent умеет из коробки.
      • 0
        qBittorrent[мой любимый торрент клиент] умеет скачивать файлы последовательно. Можно открыть файл в плеере, но перемотка не будет работать/будет работать плохо. И уж точно нельзя смотреть с середины и открывать архивы.
        uTorrent — то же самое.
        Vuze, насколько я понимаю, то же самое.
        Deluge — по указанной ссылке не понятно, как он умеет решать данную проблему. По-моему вы ошиблись.

        Единственный аналог — оригинал LiveDC.
        Но LiveDC только под виндой.
        • 0
          по указанной ссылке не понятно, как он умеет решать данную проблему. По-моему вы ошиблись.
          По-моему, вы не ставили плагин. Во-первых, он умеет последовательную закачку, во-вторых, умеет качать только нужные части.

          uTorrent перемотку умеет, у него встроенный плеер для этих целей имеется (в платной версии точно, в бесплатной не помню). Vuze тоже умеет в платной версии.

          Я не говорю, что эта штука бесполезна, просто идея совсем не нова.
          • +4
            То есть если пользователю после начала просмотра взбредёт в голову перемотать фильм на середину, то ему сначала нужно будет переключить на торент клиент, повысить приоритет для чанков возле середины файла, подождать, а потом уже перематывать в плеере?

            Предложенное в топике решение сделает всё автомагически.
            • +1
              В Deluge да, увы. Надо как-то уговаривать разработчиков хотя бы открытых клиентов включить в их программы полноценные возможности для последовательной закачки (без плагинов, скрытых настроек и т.п.). Проблема не в коде, он давно готов. Проблема в косности мышления.

              автомагически
              Хорошая опечатка, возьму на заметку.
            • 0
              Ещё веселее в случае iso-образов. Там даже непонятно, какие именно чанки приоритизировать.

              Перехват запросов на чтение из файловой системы решает эту проблему на раз. Замечательная идея.
          • +2
            Про deluge, видимо уже ответили, а платные версии utorrent и vuze мне не конкуренты. Мое решение абсолютно универсально. На всякий случай еще раз скажу — с помощью моей программы вы можете поставить на закачку какой-нибудь live-дистрибутив линукса, сразу же подключить его к виртуальной машине, и сразу же ее запустить.
            • 0
              Хочу уточнить. В начале и в конце скачивается фиксированное число блоков? А то бывают нехорошие файлы с несколькими аудио и видео-дорожками, у которых заголовки в достаточной мере размазаны по файлу. Отслеживается ли как-то, к каким именно данным хочет получить доступ плеер?
              • +2
                Вы не поняли. Я не зависим от форматов. Я перехватываю запросы плейера / программы, которая читает. И качаю те куски, которые нужны. В частности, в статье я упоминал:

                … на канале 600КБ/с фильм весом 1.45G с внешней звуковой дорожкой и субтитрами проигрывается без лагов.


                Я могу обрабатывать любое конечное число файлов. Соответственно никаких проблем с внешними дорожками, субтитрами / n-ым количеством одновременно проигрываемых видеофайлов не возникает. Лишь бы канала хватило.
                • 0
                  Вот это я и хотел уточнить, спасибо.
          • +2
            > просто идея совсем не нова.

            Ну так автор же во первых строках сообщает, что идею он позаимствовал. Вопрос в удобстве реализации.

            > у него встроенный плеер для этих целей имеется

            С одной стороны — любимый тёплый ламповый mplayer с плагинами и шорткатами плюс консольный torrent-клиент, предоставляющий перемотку. С другой стороны — [какой-то] встроенный плеер в платной версии torrent-клиента. Что вы выберете?
            • 0
              Да я сам VLC юзаю давно для этого дела. И плагин самописный к Vuze.
              • +4
                > «плагин самописный к Vuze» [1]
                > «А тут опять какие-то велосипеды» [2]

                :-)
                • 0
                  Мне можно, я же статью о нём не писал :)
  • 0
    Кстати, я очень долго пытался продвигать подобную функциональность в различных торрент-клиентах (отключение медленных пиров, последовательная закачка, игнорирование флага private). Зачастую разработчики относятся к таким вещам крайне негативно, так что я бросил это неблагодарное занятие.

    В feedback к uTorrent вообще забанили за одно предложение добавить поиск по DHT в клиент.
  • 0
    Ухты, какой приятный моноширинный шрифт. Подскажите название пожалуйста!
    • 0
      Terminus-18-bold. Программа terminology. Шрифт по-умолчанию)
  • 0
    Ещё один вопрос. Можно к этому делу прикрутить приоритеты подсетей? Вот у меня есть, допустим, подсеть провайдера, с которой у меня заведомо 100 МБит/с. Хотелось бы, чтобы подключение велось преимущественно к ним (чтобы разгрузить канал до инета).
    • 0
      Специфичная задача.

      Я никак не связан соединениями. Вопрос к используемой библиотеке libtorrent-rasterbar
      Мне кажется для того, чтобы таковое сделать, надо править ее исходники.
      • 0
        ОК. Просто вот этой фичи очень не хватает и я её действительно нигде не видел.
  • 0
    запустил называется :)

    $ qlivebittorrent -g
    Waiting for metadata
    fusermount: entry for /home/sergey/Загрузки/archlinux-2013.07.01-dual.iso not found in /etc/mtab
    Sending information about (upload/download) sizes to tracker
    fusermount: entry for /home/sergey/Загрузки/archlinux-2013.07.01-dual.iso not found in /etc/mtab

    чяднт?

    если прописать в как в примере
    $ qlivebittorrent -t /home/sergey/Загрузки/archlinux-2013.07.01-dual.iso.torrent -d /home/sergey/Загрузки -m /home/sergey/mount1 -r 200
    то сообшений об ошибке не видно, качать начинает но всё равно не монтирует.
    • 0
      очень странно перезагрузился всё заработало :))
    • 0
      Вы не собрали драйвер для fuse (см. README.MD)
      • 0
        устанавливал yaourt -ом. оно само всё собирает по скрипту из aur. в котором я проверил есть строчка

        gcc -g `pkg-config fuse --cflags --libs` driver.c -o qlivebittorrent-driver

        я её специально даже обнёс паузами чтоб посмотреть
        никаких ошибок или вообше сообшений во время её исполнения не появляется…
        похоже сообшения fusermount просто являются как-бы проверочными что всё точно правильно отключилось.
        у меня всё вообшемто заработало после того как я перезапускался о чём я писал выше, хотя я думаю это никак не связано просто я наверное гдето ошибся буковкой принаписании команды в консоли… всё вообщем то работает если запускать как в примере из самой программы.
        а запускать -g была глупая затея ведь сообственно об этом и первая часть статьи — оно естевственно недопилено…
        • 0
          fusermount выводит хрень, это нормально. Это он пытается, на всякий случай, отмонтировать еще не подмонтированный каталог. А проблему с GUI я исправил (костыль подогнал). Файлы перезалиты.
  • 0
    Осталось пойти ещё дальше, чтобы была возможность, которую я давно ещё хотел (сейчас уже подостыл в этом направлении). Смысл её в том, чтобы для домашней фильмотеки не держать терабайты пространства, а держать пачку торрент файлов. В итоге виртуальная файловая система показывает файлы изнутри торрентов, а пользователь гуляет по этим файлам и запускает любой для просмотра. А система сама определяет какой из скачанного контента ей сидировать в пределах доступного пространства и частоты обращений к файлам или количеству сидов (сидировать-то тоже желательно подольше). Правда по хорошему это должны быть не просто файлы, а какой-нибудь плагин, например, к xbmc. Чтобы в медиатеку добавлялись не видео файлы, а торренты от видеофайлов.
    • 0
      Прикольная идея, хотя вот торренты в медиатеку не очень хочется добавлять. Лучше, по-моему именно как ФС. А лично для меня дело даже не в терабайтах, а что они заканчиваются и надо решать, что удалять, а что оставить.
  • 0
    а возможно ли это использовать при обычном скачивании с интернета? тоесть не торенты.
    • 0
      Нет.

      Я думал над тем, чтобы добавить другие протоколы, но пришел к выводу, что мне будет неизвестен ни один способ их использования.

      Распространение любых образов дисков — обычно торренты тоже есть.
      Распространение фильмов — единственный компьютер, с которого будет идти раздача — засудят.
      Любые сервисы типа depositfiles и т.п. — недостаточно скорости + запрещено качать непоследовательно (вроде бы).
      Нормальные облачные сервисы (яндекс, google, др.) — уже реализовано.

      Может вы знаете другие способы?
      • 0
        использовать для онлайн игр. например wow. не скачивая все локации можно былобы прогулятся по начальным а оно бы кокрас в это время докачивало остальные… счас так уже делают некоторые онлайн игры. но они всеровно сначало скачивают гигов 10 и только потом позволяют играть. А ваш метод позволил бы скачать только то что нужно в данный момент…
        вопшем я пытался скачать world of warcraft(сразу распакованую версию) и запустить его. даже на 30% оно не запускалось хотя пыталось :) незнаю возможно но проверяет хеши или ещё чё но упорно пытается качать последовательно… в итоге оно не дождавшись чтения просто вылетает с ошибкой.
        тык вот оно пытается создать фаилы отчётов об ошибке в примонтированой директории, но она доступна только для чтения. тут его и клинит :)
        очень хотелось бы директории доступные не только для чтения.
        • 0
          также почемуто в один прекрасный момент почему-то оно саморазмонтирует папку ...(было около 56% всё тогоже wow)
          затем я решил его перезапустить нажал ctrl+c и оно выдало теже сообшения что были выше +
          «Ошибка сегментирования (core dumped)»
          • 0
            а ещё
            QXcbWindow: Unhandled client message: "_GTK_LOAD_ICONTHEMES"
            в процессе работы…
        • 0
          >… а оно бы кокрас в это время докачивало остальные

          Я три раза перечитал, прежде чем сумел понять, что имелось в виду «как раз»… >_<
          • 0
            а вы виделибы нашу учительницу по русскому…
            • +1
              Грамотность появляется не от учителя, грамотность появляется от чтения книг.
              • 0
                спасибо, а сколько конкретно нужно прочитать книг чтобы заменить с 6-го по 9-тый класс?
                • +1
                  Думаю, у каждого это индивидуально. Что касается меня, то я читал постоянно. Забросил только с рождением ребёнка и появлением сторонних проектов, так что теперь читаю только в самолётах и на отдыхе.
  • +1
    у меня новое предложение сделайте поддержку магнет ссылок.
    • +2
      Поддержка магнет ссылок есть. Достаточно вместо *.torrent файла указать магнет ссылку, видимо, в кавычках.
  • 0
    гы получилось запустить warcraft 3 первую миссию скачав чуть более 400 мб… однако игра постоянно ругается на то что ей нехватает места… я думаю это следсвие того что директория доступна только для чтения…
  • 0
    PPA для убунты есть?
  • 0
    А под OS X собирается? Какую версию FUSE в этом случае нужно использовать?
  • 0
    Появился альтернативный проект в виде только FUSE файловой системы, без специализированного клиента/интерфейса
    https://github.com/johang/btfs
    Очень популярный.
    • 0
      Затестил, хорошо работает. Из отличий:
      1) Не остается скачанных файлов
      2) Есть в официальных репозиториях
      3) Не глючит (все можно отмонтировать в любой момент)
      4) Непонятно что происходит (нет интерфейса)

      Но мне мой нравится больше, все же таки он больше информации дает.
      • 0
        Забыли добавить, что btfs активно развивается, а у вас 3 года коммитов не было :)

        Я вижу у btfs ключ
        --keep -k keep files after unmount
        Во время моих тестов он правда не сработал. Может потому что тестовый файл я не скачал целиком в процессе теста?

        Получение информации о статусе подмонтированного торрента явно разрабам надо допилить… Правда гуй/отдельный интерфейс для этого не нужен, можно обойтись xattr, например.

        А вообще в идеале всё-таки хочется видеть эту функциональность в составе полноценного торрент клиента. Или вот например чтоб была обвязка: после получения *.torrent файла он монтируется через btfs и потихоньку качается по мере возможности. А после того как скачивается целиком, отмонтируется от btfs и запихивается в <%мой любимый торрент клиент%> с указанием директории для скачивания, в которой уже всё есть. Чтоб удобно сидировать. Но это так, мечты.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.