Відповіді:
Я використовую мультикаст. Це посилає один потік всім приймачам одночасно.
Мережа має провідні та wifi сегменти.
За допомогою багатоадресної передачі потік використовує лише один раз свою пропускну здатність на кожному сегменті
Це означає також, що всі комп'ютери отримують один і той же пакет приблизно в один і той же час, менші затримки розповсюдження через мої комутатори. Затримка розповсюдження є незначною для звукового та видимого для людини відео (30 кадрів в секунду).
Єдине, що може статися, це те, що різні комп’ютери працюють у різних місцях свого мережевого кешу. Щоб тримати їх якомога ближче, я відключив кешування, поки найповільніша система (32-бітовий ноутбук на wifi) не почне іноді виключатися, а потім дайте їй трохи більше.
Причина: як тільки vlc починає їсти буфер, потрібно тривати час, щоб повернутися до початку буфера, здається, що кодування не надає пріоритету повернутися до "нульового буфера", але зручно залишатися там.
Я також використовую на сервері два клієнта VLC: один генерує потік і не відображається локально. Другий - клієнт, що відображає, який слухає потік, як і всі інші системи, з однаковими настройками мережевого кешу.
У командному рядку:
клієнт, що генерує потік, який підключається до інтернет-потоку (у цього є великий кеш, тому він не вирізається та забезпечує постійний потік у мою мережу багатоадресної передачі):
vlc -vvv http://yp.shoutcast.com/sbin/tunein-station.pls?id=154 --sout udp:239.0.0.1 --no-sout-display --sout-keep --ttl 4
(це повинно бути в одному рядку)
Як бачите, --no-sout-display задається: вихідний потік генерується, але немає локального виводу. Я роблю те саме, незалежно від того, чи відтворюю я локальні файли / DVD-диски або мережевий вміст.
І переконайтеся, що для цього --ttl встановлено> 1, якщо десь є бездротовий маршрутизатор. Я завжди встановлюю це на 4, щоб не отримувати "сюрпризів". Однак якщо у вас є мережа з декількома маршрутизаторами, і хости в одній мережі не можуть бачити багатоадресну передачу, то вам може знадобитися підняти цей ttl на виїмку або два (або перевірити, чи ваш маршрутизатор взагалі пропускає багатоадресову передачу, не всі бездротові маршрутизатори є встановити це за замовчуванням).
Для кожної системи, включаючи таку, яка генерує потік і працює невихідний vlc, у мене є такий vlc:
vlc udp://@239.0.0.1 --network-caching 60 --sout-keep
Це встановлює кешування мережі в моїй мережі та з продуктивністю найповільнішої системи макс. .06 секунд кеш-пам'яті.
Для звуку це відповідає відстані поширення приблизно до 100 футів, що означає, якщо кеш буде з'їдено до максимуму, то повільна система звучить так, ніби вона була б на відстані 100 футів.
Моя мережна затримка становить 5 Мс або вище (не пінг, це низька пріоритетність стеку в обидва кінці та кілька мс).
На моєму місці, де я ніколи не бачу і не чую одночасно дві системи, що знаходяться на відстані> 100 футів один від одного (я не підриваюсь наверх та в підвал, перевага робити це таким чином - це однаково скрізь, не підриваючи підсилювач вітальні).
Ноутбук у спальні: якщо він вирізається занадто часто, я просто повертаю його кеш локально, я не чую його у підвалі чи наверху, а коли я там, я, ймовірно, відключив інших :-).
Дуже важливо: коли мені потрібно перекодування, у мене є всі приймачі за одним і тим же протоколом і кодуванням, і я перекодую непровідний vlc, який генерує потік.
Я не перекодую на багатоадресних клієнтів. Це призведе до поганих затримок, оскільки кожна система відрізняється продуктивністю.
Для цього аудіоприкладу взагалі немає перекодування, усі можуть зрозуміти кодовані джерела shoutcast. (насправді мені не потрібно перекодувати для vid ніколи ... всі мають повний набір кодеків).
Чи допомагає це?
Так, в мережі є приклади робити синхронізований vlc, використовуючи майстер / клієнт-мережу синхронізації та декілька одноадресних потоків (цільовий рядок довжиною 10 миль на сервері :-D).
Однак: трансляція одноадресних n клієнтів на сегменті змушує потік n разів з’являтися на цьому сегменті, і чим вище ви йдете до вихідного сервера, тим більше множень того ж потоку харчується пропускною здатністю. Я б не зміг переглянути своє 1080p відео. Мій бездротовий зв’язок ледве справляється з одним із них, не завжди (56Mb).
О, ви запитаєте, як у графічному інтерфейсі:
у вікні потокової передачі натисніть «додаткові параметри» та зніміть позначку «відтворити локально» для екземпляра vlc, який генерує потік (як вхід містить локальний файл, список відтворення чи Інтернет-потік). Залиште кешування за замовчуванням (кеш-пам'ять коштує 1000 мс). Якщо хтось із інших клієнтів не може зрозуміти ваш кодек, тоді вирішіть його, який усі розуміють, і перекодуйте його до цієї ж системи.
У параметрах пунктів призначення ви залишаєте увімкнено "відобразити локально" за замовчуванням і змінюєте кешування: грайте з цим (почніть з 100 і відключіть його) до тих пір, поки ваша повільна система не вимкнеться, а потім встановіть всі швидші системи на однакові. З короткими буферами: коли клієнт запускається, потрібно приблизно 10 - 15 секунд розбризкування, поки він "не отримає".
Мої клієнти займають 100% часу, коли я припиняю трансляцію, вони просто продовжують слухати адресу багатоадресної передачі.
Не вказано порт: за замовчуванням 1234 скрізь, я запускаю один вихідний сервер. Якщо ви запускаєте більше одного, вам потрібно вказати номер порту так: ... 239.0.0.1:65535. Мої приклади: виберіть будь-яку адресу для багатоадресної розсилки в 239/8. Порти: вибрали будь-яке вище 1024 (так, 1024, оскільки Microsoft використовує 1024 також у MC).
Якщо ніхто не слухає, то потік взагалі не відображається в мережі, він починається лише після того, як перший слухач приєднається до сеансу багатоадресної передачі. Отже, якщо у вас є десять визначених і ви прослуховуєте лише один, то у вас є один потік, що їсть пропускну здатність. Якщо ви слухаєте різні потоки, то ви отримаєте n разів більше пропускної здатності, з'їденої для n потоків.
Багатоадресна передача: використовувана пропускна здатність однакова для одного або 10000 клієнтів на потік.
Використання одноадресної передачі: кожен клієнт переходить на потік відправника в різний час, а це означає, що ваші відставання все ще присутні, навіть якщо ви посилили кешування. Робота з одноадресною і багатоадресною різницею. Ось чому unicast має функцію синхронізації.
Існує інший спосіб, якщо ви передаєте те саме, щоб сказати цілий магазин Target: тоді ви будете передавати одноадресну синхронізацію із супутниковими клієнтами vlc та обслуговувати тих, які знаходяться в межах "акустичного діапазону". В офісах я роблю один або два на поверсі, тому всі поверхи щільно синхронізовані за допомогою одноадресної та мережевої синхронізації. У підлозі зазвичай затримка поширення мережі набагато коротша, ніж акустична затримка, а акустична вимкнена, тому ви не чуєте всіх динаміків, а лише тих, хто поруч.
напишіть мені на електронну адресу sirhelpsalot@gmail.com, якщо вам потрібна допомога, я можу також поставити це на YouTube.
:-)
Як сказав spc-stm, VLC дозволяє синхронізувати потокове передавання. Перевірте це: http://www.hackedexistence.com/project-vlc.html