P2P live streaming, libswift

Автор Ben-zin, 25 декабря 2013, 03:17:15

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ben-zin

Появилась необходимость в вещании видеопотока посредством p2p. До этого темой вообще не интересовался.

Первым делом нашлись проприетарные решения вроде acestream - ну это отпадает.

Далее наткнулся на tribler - такой особый торрент-клиент, с интересными наворотами, но на текущий момент вещание  прямо из гуя не осуществляет, однако в комплекте имеет скрипт на питоне, позволяющий его осуществлять. http://www.tribler.org/trac/wiki/Tutorials/ExampleFeedSetups - делал по этому мануалу, нифига не завелось. Скрипт работал, поток с vlc принимал, но посмотреть его удалось только локально и то лишь с помощью старой сборки swarmplayer'а. Никто подключиться так и не смог.

Но вот в git триблера нашлась такая штука как libswift  https://github.com/Tribler/libswift - её вроде как хотят прикрутить в триблеру в перспективе, однако использовать можно уже сейчас.
Скачал, сборка по-моему прошла успешно. Но вот что-то не разберусь, что делать далее. Помогите пожалуйста , товарищи ::).

Итак, необходимо локальный поток, например с vlc плеера, передавать p2p-клиентам, и чтоб каждый смог смотреть поток у себя, в том же vlc, например, или может быть на стороннем p2p-плеере. Как запускать swift у меня и как на клиентах?

Содержимое краткого мануала:

$ ./swift
Usage:
  -h, --hash    root Merkle hash for the transmission
  -f, --file    name of file to use (root hash by default)
  -l, --listen  [ip:|host:]port to listen to (default: random)
  -t, --tracker [ip:|host:]port of the tracker (default: none)
  -D, --debug   file name for debugging logs (default: stdout)
  -B    debugging logs to stdout (win32 hack)
  -p, --progress        report transfer progress
  -g, --httpgw  [ip:|host:]port to bind HTTP content gateway to (no default)
  -s, --statsgw [ip:|host:]port to bind HTTP stats listen socket to (no default)
  -c, --cmdgw   [ip:|host:]port to bind CMD listen socket to (no default)
  -o, --destdir directory for saving data (default: none)
  -u, --uprate  upload rate limit in KiB/s (default: unlimited)
  -y, --downrate        download rate limit in KiB/s (default: unlimited)
  -w, --wait    limit running time, e.g. 1[DHMs] (default: infinite with -l, -g)
  -H, --checkpoint      create checkpoint of file when complete for fast restart
  -z, --chunksize       chunk size in bytes (default: 1024)
  -m, --printurl        compose URL from tracker, file and chunksize
  -M, --multifile       create multi-file spec with given files
https://svn.tribler.org/libswift/branches/tribler-6.0.x@29186


Содержимое readme:

swift: the multiparty transport protocol
    (aka BitTorrent at the transport layer)
    Differently from TCP, the protocol does not use the ordered data stream
    abstraction. Effectively, it splits a file into 1KB packets and sends
    them around. The secret sauce is Merkle hash trees and binmaps.

    Requires libevent-2.0.17 or higher.

see doc/index.html for marketing stuff, ideas and rants
    doc/draft-ietf-ppsp-grishchenko-swift.txt for protocol draft spec
    *.cpp for the actual code
    swift.cpp is the main exec file; may run as e.g.
   
        ./swift -t node300.das2.ewi.tudelft.nl:20000 -h \
        d1502706c46779d361a1d562a10da0a45c4c40e5 -f \
        trailer.ogg
       
    ...to retrieve video and save it to a file.

    Alternatively, you might play with the HTTP gateway, the preliminary
    version. First, run the seeder-tracker:

        $ ./swift -f ~/Downloads/big_buck_bunny_480p_stereo.ogg -l 0.0.0.0:20000
        Root hash: 7c462ad1d980ba44ab4b819e29004eb0bf6e6d5f

    ...then you may try running the swift-HTTP gateway...

        $ ./swift -t 127.0.0.1:20000 -g 0.0.0.0:8080 -w

    ...and finally you may point your browser at the gateway...

        http://127.0.0.1:8080/7c462ad1d980ba44ab4b819e29004eb0bf6e6d5f

    If you use an HTML5 browser (Chrome preferred), you are likely to see
    the bunny trailer at this point...



Ben-zin

#1
Сами спрашивали - сами отвечаем (для общественной пользы  :) ). На данный момент удалось наковырять вот что:

Ну во-первых в мастер-ветке лайв режим не поддерживается, надо собирать из другой. Компилируется из этой https://github.com/Tribler/libswift/tree/svn_ppsp-03 например (это вроде как для tribler под андроид).

Далее, запускаем медиапоток по http, например в vlc.

Сид для вещания запускается таким образом:

./swift -i http://127.0.0.1:1234/ -f storage.dat -l 0.0.0.0:20000
Где -i http://127.0.0.1:1234/ - адрес:порт потока, создаваемого в vlc, -l 0.0.0.0:20000 - порт для встроенного трекера.

В ответ почему-то выдаются всего одинаковый хэш, в отличие от раздачи файла:
swift::LiveCreate: swarmid: e5a12c7ad2d8fab33c699d1e198d66f79fa610c3


Клиенты запускаются таким образом:

./swift -t [i]адрес сида[/i]:20000 -k -h e5a12c7ad2d8fab33c699d1e198d66f79fa610c3 -g 0.0.0.0:8080 -w


Теперь у клиентов по адресу http://127.0.0.1:8080/e5a12c7ad2d8fab33c699d1e198d66f79fa610c3 с помощью  того же vlc можно смотреть ТВ.

И сразу минусы/недоработки (или текущие баги  ???) :
- Поток должен быть создан ДО запуска сида, если в процессе работы поток прервался - сид его уже не находит, нужно перезапускать.  Т.е. в режиме стабильного раздающего сервера он ещё работать не может.
- После отключения от сида, клиент больше не пытается к нему подключиться, при этом не выдавая никаких ошибок, работая как ни в чём ни бывало. Всем клиентам приходится перезапускать и swift и плеер.
- Ну и хотелось бы возможности просмотра в браузере, через html5 (смотреть скачанные свифтом файлы так можно) или хотя бы плагин.

Нужно ещё поискать наработки в форках в git (вроде бы там какие-то свежие правки). Но использовать уже можно, хоть и не на таком же уровне, как acestream.



Сообщение объединено: 29 декабря 2013, 13:32:09

См. также:
http://datatracker.ietf.org/doc/draft-ietf-ppsp-peer-protocol/
http://rghost.ru/51278311