Online Video Stream в Linux

Изображение пользователя Chibiko.

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

Немного теории:

Техническая сторона вопроса (железо)

Кодирование видео – очень требовательный к железу процесс. Особенно это касается процессора, видеокарта особой роли не играет. Поэтому если вы собрались стримить, то обновите проц. В идеале это должен быть какой-нибудь Intel Core i5-2500K или выше. Это для стрима в высоком качестве ресурсоёмких приложений. А для задач попроще (стрим рабочего стола) подойдет почти любой двухъядерный проц с частотой более 2 Ггц . Конечно, придётся повозиться с настройками, чтобы выжать все что можно и качество будет не совсем торт, но все же это возможно.

Техническая сторона вопроса (интернет)

Для качественного стрима вам потребуется широкополосный интернет. Оптимальный битрейт для трансляции 1000 – 1500 кб/с, накинем еще сверху 500-1000кб/с на другие программы и получим 1500 – 2500 кб/с нужной скорости интернета. Это минимум, чем больше тем лучше, разумеется. Причем, скорость отдачи (upload speed) тут важнее чем скорость скачки (download speed). Проверить свою скорость скачки/отдачи можно тут (сервер выбираете в зависимости от выбранного стрим сервиса, к примеру, для Justin.tv/Twitch.tv это США).

А теперь детектив:

И тут же столкнулся с кучей проблем.
1) Никаких нативных программ не существует.
2) Ни гуя нет.
3) Вообще нет. Ничего. Нормального.

В общем понятно. Всё. На этом статью можно заканчивать. Не, ну реально. Для оффтопика есть всякие Xsplit, даже Adobe Flash Media Live Encoder для яблокофилов. А нас обделили. Как обычно. Вот. И стимщиков среди кодеров нет. Никто не пишет. Ничегошеньки.

Отчаиться? Не, будем копать. Глубже.

Что такое стрим? Это видео-поток. А точнее Real Time Messaging Protocol (сокращённо англ. RTMP) проприетарный протокол потоковой передачи данных, в основном используется для передачи потокового видео и аудиопотоков с веб-камер через интернет.

И как это запустить? Да легко!

У нас же есть ffmpeg!

а теперь открываем man ffmpeg...

Не, вы конечно думаете что я взял словарик, сел, перевел всё и написал супер-пупер гуёвый отправитель в стрим с косынкой и пирожными? Вы ошибаетесь....

Для начала я полез опять в гуголь. И начал проситать всё, что связано со стрмом и линуксом.

Оказалось - можно вещать в тырнет через upnp (Медиасервер) и rtmp, но вот незадача - первое не подходит, а второе - только с других устройств (вебкамеры и прочее).

пичалько....

Пришлось вернуться к ffmpeg...

Подвернулась статья на хабре. Значит можно!

А потом подвернулось видео на тытрубе.

И было засмотрено до дыр, скажу я Вам. Ибо его скрипт ну нифига не работал! А ман читать влом. Или не влом?
В общем из меня плохой писатель, и хватит писать детектив.
Переменные INRES - разрешение экрана; OUTRES - разрешение видео; FPS - количество кадров в секунду; QUAL - качество видео
Вот что получилось в итоге:

#! /bin/bash

# originaly from http://tinyurl.com/twitch-linux from taladan
# www.youtube.com/user/taladan

INRES="1280x1024" # Input resolution
OUTRES="640x480" # Output resolution
FPS="25" # target FPS
QUAL="medium" # one of the many FFMPEG preset on (k)ubuntu found in /usr/share/ffmpeg
# If you have low bandwidth, put the qual preset on 'fast' (upload bandwidth)
# If you have medium bandwitch put it on normal to medium

# Write your key in a file named .twitch_key in your home directory
STREAM_KEY="live_278hsdfjsfgsjnr75bsBJKVHjhKJVH39v5928b5" # This is your streamkey generated by jtv/twitch found at: http://www.justin.tv/broadcast/adv_other

avconv \
-f x11grab -s $INRES -r "$FPS" -i :0.0 \
-f alsa -ac 2 -i pulse \
-vcodec libx264 -s $OUTRES -preset $QUAL \
-acodec libmp3lame -ar 22050 -threads 6 -qscale 3 -b 1000000 -bufsize 1024k \
-f flv "rtmp://live.justin.tv/app/$STREAM_KEY"

В принципе всё понятно. Называем например stream.sh, делаем выполняемым.
Идём на http://www.justin.tv/ , регаемся, идём сюды, копируем наш ключик (никому не показываем), после чего вставляем в скрипт, запускаем.... и.... Видим на нашем канале наш монитор в мониторе в мониторе пока пикселей хватает online!!!

Как выглядит запущенный скрипт:

Это если ничего не напутали. В общем теперь мы умеем стримить в онлайне. Кроме того на сайте сохраняется видео, и слинковав аккаунт с тытрубой, видео появится там. А ещё слинковать можно с рукалицо лицо-книгой... В общем можно запустив скрипт начать вещание (для удобства можно повесить его на хоткеи).
Ну и делать туториталы для нас стало ещё проще!
А ещё стримить игры!
А ещё, а ещё.. я бы показал стрим, но стесняюсь публики, и у меня сломанный микрофон =\ Поэтому я это всё писал О_О
Интересные видео от меня не ждите =\

Ах, да, самое то интересное, зачем я всё это пишу!?!?
Ищу людей (хотя искать смысла нет - они тут все есть, надо им только пинка дать) для красивого оформления всего этого и дописывания гуёв и плюшек всяких разных. И в мейнстрим 8)

Хочется гуя.. зачем - не знаю =\ Просто хочется...

Да, ещё у меня задержка. Пока не понял почему.
Отставание стрима от реального времени ~ 4 секунды. Что не есть гут. У Вас так же?

Да, ещё надо будет покопаться на тему встраивания кода со своим каналом и чатом на сайт, и ещё чего-нибудь. Придумаю по мере вопросы. Если что вот тут я там. Пиар? Не, у меня там даже видео нет 8)

Спасибо за внимание, и как всегда: Вопросы и пожелания приветствуются!

ВложениеРазмер
9.png259.45 кб
0
adem4ik - 2 Июнь, 2013 - 12:52
Изображение пользователя adem4ik.

OBS обещает GUI под линукс. Задержка в 4 секунды - это нормально. И у твича есть как минимум 3 сервера в Европе, лично меня устраивает Франкфурт.

0
zotkindm - 3 Июнь, 2013 - 06:45
Изображение пользователя zotkindm.

я думал VLC умеет писать с экрана.

0
Chibiko - 3 Июнь, 2013 - 06:56
Изображение пользователя Chibiko.

Да, умеет. Но зачем?
Если проще скриптом...
Хотя и на vlc тоже можно скрипт прифигачить....
Ну ок, уговорили, попробуем и через vlc настроить....

0
dyug - 12 Август, 2014 - 10:35

vlc еще и вещать, межуд прочим, умеет. Я так устраивал внутри работы трансляцию с экрана на предмет демонстрации как оно выполняет рабочие задачи для меня, и скоко денех нада для использования windows (r)(c) в таких же условиях. :-)

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

P.S. хозяину реализация трансляции сильно понравилась. :-)

0
smartass - 8 Июнь, 2013 - 21:51
Изображение пользователя smartass.

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

0
Chibiko - 10 Июнь, 2013 - 08:54
Изображение пользователя Chibiko.

Мне надо было заточить именно под justin.tv (не сочтите за рекламу).
Если есть чем дополнить, подсказать/улучшить - давайте общаться на эту тему, и совместными усилиями сделаем статью про Online Stream from Linux достойной подшивки!

+1
adem4ik - 22 Август, 2013 - 00:48
Изображение пользователя adem4ik.

не получилось у меня настроить скрипт ни на avconv ни на ffmpeg так, чтобы стрим шел без постоянных фризов и рассихрона звука и видео, почти забил пока не наткнулся на одну полезную утилитку, а именно SimpleScreenRecorder, оказывается кроме того что ей можно записывать видео с рабочего стола и игр, она так же позволяет стримить. Примерное описание тут. Настройка довольна проста, объясню на примере twitch.tv, на котором для начала нужно зарегистрироваться:

1) Установка:
sudo add-apt-repository ppa:maarten-baert/simplescreenrecorder
sudo apt-get update
sudo apt-get install simplescreenrecorder

2) Запускаем. Ниже представлены мои настройки для примера:

Жмем Continue и появится окошко с самыми важными настройками.

Контейнер и кодек советую выставить такими же как на скриншоте, а вот в "Save as" надо прописать нужный URL по образцу "rtmp://live-fra.twitch.tv/app/live_id". Первая часть может быть различной в зависимости от того, на какой сервер собираетесь стримить, в данном случае на Франкфурт в Германии (см. сюда). А вот "live_id" берем отсюда, нажав на Show Key.

3) Снова жмем Continue, а затем Start Recording и запустится стрим. Останавливать стрим советую при помощи "Cancel recording".

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

0
Chibiko - 22 Август, 2013 - 07:23
Изображение пользователя Chibiko.

О, а вот этого не знал. Сегодня вечером затестируем 8)
Поэтому пока на данный момент люто-бешено плюсую >__<

0
Гость - 11 Август, 2014 - 09:49

У меня нихрена не пашет. Пробую через SimpleScreenRecorder - зависает loading video на твиче. Подскажите, если это ещё актуально, пжл.

0
adem4ik - 12 Август, 2014 - 19:35
Изображение пользователя adem4ik.

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

еще можно попробовать поменять сервер на который стримите, швеция/германия/англия/нидерланды - наиболее подходящи

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры