Master255
@Master255

Как сделать Torrent streaming?

Есть у меня прекрасный проект прокси на Андроиде вот.
Задача простая - внедрить в него torrent :) .

Суть в том что у меня есть некий файл где-то в интернете на сервере.
Сервер может прислать SHA1 этого файла для поиска по торрент трекерам (этого файла).
Т.е. я получаю sha1, ищу по трекерам. Нахожу. Получаю список пиров. Начинаю последовательную загрузку файла с этих пиров.
Затем скачивание обрывается (например) и начинается скачивание этого же файла, только со средины.
Т.е. полноценный стриминг для видео\аудио плеера.

Вопроса четыре:
Как получить sha1 файла на компьютере, что бы он был такой же, как на торрент трекере. Пока они у меня почему-то разные.

Правильно ли я понимаю процесс скачивания торрент файла?

Как можно подключится к торрент трекеру вручную, для отладки и наглядного понимания процесса получения файлов. Может через telnet какой...

Как реализовать программно?

Программно мне надо получить InputStream c возможностью рестарта скачивания с определённого байта.
Причём InputStream из скаченного файла не подойдёт. Так как не понятно какая информация в нём точно есть.
Могу ошибаться. Поправьте.
  • Вопрос задан
  • 3348 просмотров
Решения вопроса 1
Master255
@Master255 Автор вопроса
Внимание правильный ответ!
В torrent файлах содержатся хеши кусков файлов и самого .torrent файла, но не файла который будет скачиваться. Поэтому хеш скачиваемого файла нигде не фигурирует. И уж темболее по этому хешу нельзя производить поиск. В принцип работы торрентов не входит механизма поиска файла по хешу, а входит поиск части файла по его хешу. Причём, если файл разделён хоть на один байт иначе чем на торрент трекере, то хеш его кусков будет абсолютно другим. Всё это делает невозможным поиск файлов по торрент трекерам с помощью их хешей.
Следовательно необходимо отказаться от торрент технологии в пользу другой.
Судя по статье lurkmore.to/P2P . Становится понятно, что есть только одна другая подобная технология, на которую можно опереться - это Direct Connect (NMDC, DC++, ADC).
Она работает в текстовом режиме и умеет искать по TTH хешу файла, который может быть использован даже для восстановления файла!
В связи с чем у меня появился новый вопрос Можно ли подключиться к p2p через telnet?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Jump
@Jump
Системный администратор со стажем.
Убрал первоначальный вариант ответ под спойлер
spoiler
У вас довольно неверное представление о торрентах вообще и о торрент стриминге в частности.
Вот к примеру -
Суть в том что у меня есть некий файл где-то в интернете на сервере.
Сервер может прислать SHA1 этого файла для поиска по торрент трекерам (этого файла).

Зачем искать файл по торрент трекерам? Какой в этом смысл?
Поясню - возможны два варианта.
a. Вы раздаете популярное видео, размещенное на популярном торрент трекере. В этом случае вам не нужно считать хэш и искать его где-то, достаточно просто скачать торрент файл с трекера.

b. Вы раздаете нечто уникальное что есть только на вашем сервере- но тогда какой смысл искать его на других серверах если оно уникальное и его нигде нет?

Теперь подробно пройдемся по вопросам:

1)
Как получить sha1 файла на компьютере, что бы он был такой же, как на торрент трекере. Пока они у меня почему-то разные.

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

2)
Правильно ли я понимаю процесс скачивания торрент файла?

Не знаю, я не телепат и не могу знать как вы понимаете процесс скачивания.

3)
Как можно подключится к торрент трекеру вручную, для отладки и наглядного понимания процесса получения файлов. Может через telnet какой...

Если вы имеете ввиду подключение для управления трекером, то подключиться может администратор торрент трекера. Т.е если не являетесь администратором, то не подключитесь, а если являетесь то знаете как к нему подключится. К тому же это зависит от самого торрент трекера, они разные и управление у них разное.
Если же речь про обычное подключение как пользователя - изучайте спецификацию протокола, пишите свой клиент, или отправляйте команды на трекер иным образом.
Только не понятно какое это имеет отношение к скачиванию? С торрент трекера ничего не скачивается, кроме списка пиров.

4)
Как реализовать программно?

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

После прочтения ваших комментариев к ответам я не вижу смысла обсуждать что-то не прояснив несколько принципиальных моментов.
1)Торрент трекер не имеет никакого отношения к скачиванию файла по протоколу торрент. Вообще. И он никак не нужен для скачивания.
2)По поводу хэша - непонятно какой хэш вы имеете ввиду.
В протоколе torrent используется множество хэшей.
Любой файл для передачи разбивается на множество мелких кусков. Для каждого куска считается свой хэш.
Эти хэши нужны для скачивания и определения наличия куска у пира.
Есть еще так называемый хэш торрента, по которому ищут торренты. Это хэш секции info.

Т.е к примеру вы решили раздать фильм Аватар размером 10гб.
Вы разбиваете его на тысячу кусков по 10мб и подсчитываете хэш для каждого куска.
Количество получившихся кусков и все получившиеся хэши записываете в специальный torrent файл, добавляете туда название, и другую информацию о файле.
Потом считаете хэш от этого торрент файла (заметьте не от фильма, а от его описания) и это будет торрент хэш по которому его можно искать.
Причем заметьте - если кто то другой раздает точно такой же файл, то он может разбить его не на тысячу кусков, а на две тысячи, и назвать по другому, в результате получившийся хэш торрента будет совершенно другим. Хотя файлы в раздаче и абсолютно идентичны.
Ответ написан
@386DX
Никак. Виндовые программы развиваются с 2009 года и все равно глюк на глюке. Врят ли у вас получится сделать нормальный стрим на андроиде.
Ответ написан
@Nc_Soft
Хеш можно сгенерить так https://github.com/adriengibrat/torrent-rw генерит вполне адекватно, можете покопаться внутри и посмотреть как оно это делает
<?php 
$torrent = new Torrent('file.mp4');
echo $torrent->hash_info();

Также сгенерить торрент можно коснольной утилитой mktorrent.
Можно даже заюзать rtorrent или transmission, но только для генерации хеша это как-то накладно.

Только я не очень понимаю как вы хотите раздать этот торрент имея только хеш.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы