Показано с 1 по 13 из 13

Тема: Как корректно делать перестримы

  1. #1
    Новичок
    Регистрация
    17.05.2010
    Сообщений
    5
    <br />Часть первая.<br /><br />Известно, что ныне перестримы делаются через чудовищную вещь — захват с экрана. Более того, судя по всему, это единственный известный сообществу и оттого поощряемый способ.<br /><br />Пришло время положить этому безобразию конец!<br /><br />Дело в том, что существует ffmpeg — милая мультиплатформенная утилита для кодирования видео, которая умеет практически все известные форматы и кодеки (к которым есть документация, и даже несколько реверс-инженернутых), а с недавнего времени она умеет и вещать в rtmp, через который делается подавляющее большинство стримов.<br /><br />Итак, нам нужно будет три вещи:<br />1) сам ffmpeg. если у вас линукс, то, как правило, эта софтина уже установлена, либо есть в репозиториях вашего дистрибутива. для виндовс есть сборки здесь: <a href="http://ffmpeg.arrozcru.org/autobuilds/" target="_blank">http://ffmpeg.arrozcru.org/autobuilds/</a>http://ffmpeg.arrozcru.org/autobuilds/<br />2) rtmp-урл исходного вещания. для этого надо будет либо обратиться к автору стрима, или посмотреть в исходник страницы и найти его в параметрах, передаваемых флеш-плееру. например, для rambler-стримов надо найти параметр flashvars, который будет выглядеть примерно так: <!--code1--><div class="scriptcode"><!--ecode1-->flashvars=&#34;comment=sc2tv_stream_1q&amp;st=htt p&#58;//sc2tv.ru/player/styles/<br />video28-1242.txt&amp;file=rtmp&#58;//fms.rambler.ru/live/sc2tv1&#34;<!--code2--></div><!--ecode2--> &quot;rtmp://fms.rambler.ru/live/sc2tv1&quot; и есть искомый url.<br />3) rtmp-урл сервера, куда вещать (вы должны это знать и без меня).<br /><br />Вещание ffmpeg запускается из консоли командой следующего вида (для кодека h264):<br /><!--code1--><div class="scriptcode"><!--ecode1-->ffmpeg -i УРЛ_ИСХОДНОГО_СТРИМА -acodec copy -vcodec libx264 -vpre veryfast -b БИТРЕЙТ -f flv УРЛ_СЕРВЕРА<br /><!--code2--></div><!--ecode2--><br />Битрейт задается в битах, либо в килобитах, если приписать в конец k. <br /><br />Пример вещания (итоговый поток будет примерно 600кбит):<br /><!--code1--><div class="scriptcode"><!--ecode1-->ffmpeg -i rtmp&#58;//fms.rambler.ru/live/sc2tv1 -acodec copy -vcodec libx264 -vpre veryfast -b 512k -f flv rtmp&#58;//localhost&#58;1935/live/myStream<!--code2--></div><!--ecode2--><br /><br />Особое удобство здесь в том, что перестримы можно делать с (юниксовых) серверов и не бояться ничего.<br /><br />А перестрим без реенкода (чтобы просто разделить нагрузку на вещающий сервер) делается вообще тривиально:<br /><!--code1--><div class="scriptcode"><!--ecode1-->ffmpeg -i УРЛ_ИСХОДНОГО_СТРИМА -acodec copy -vcodec copy -f flv УРЛ_СЕРВЕРА<!--code2--></div><!--ecode2--><br /><br /><br />Часть вторая.<br /><br />Наблюдая за постоянными страданиями комментаторов, связанными с синхронизацией, лаганием исходного потока и прочим, появилась мысль написать специальную софтину для комментирования, которая бы брала исходный поток и лишь подмешивала к нему комментаторский звук, оставляя видео как есть (т.е. никакого видеозахвата и перекодирования, и тем самым никакой потери качества).<br />Плюсы:<br /> - автоматическая синхронизация видео<br /> - не надо перекодировать ничего — можно комментировать со слабых тачек<br />Потенциальные плюсы:<br /> - т.к. она работает у каждого из комментаторов (исходно для синка), можно избавиться от скайпа.<br /> - можно комментировать любой источник видео (что угодно, что понимает libavformat из ffmpeg, а понимает он почти всё, что существует).<br /> - можно прикрутить нативно любую требуемую функциональность, например проигрывание видео вставок, фидбэк от зрителей в реальном времени (чтобы не пялиться в чат все время), ...<br />Минусы:<br /> - это надо писать (при отсуствии финансирования, но должной мотивации работы тут мне одному на месяца два)<br /> - нет особого смысла это проделывать с шифрованными стримами и сильно кастомными плеерами, где нельзя ручками добраться до самого потока.<br /><br />Если комментаторам это покажется интересным, буду рад обсуждению.

  2. #2
    Активный участник Аватар для cosm
    Регистрация
    24.05.2009
    Адрес
    Ukraine, Kyiv
    Сообщений
    544
    Я думаю мог бы помочь писать, если комментаторы захотят юзать (будет быстрее чем 2 месяца).
    Доброняка!! \(^__^)/

  3. #3
    Новичок
    Регистрация
    17.05.2010
    Сообщений
    5
    <b>cosm</b>, это хорошо. Осталось дождаться реакции комментаторов и выслушать, что именно им нужно, и нужно ли вообще .

  4. #4
    Администратор
    Регистрация
    19.04.2010
    Сообщений
    8,380
    Это просто отличный вариант! А то с этими перестримами просто замучались. Надо дать ссылку нашим админам на тему.

  5. #5
    Активный участник Аватар для cosm
    Регистрация
    24.05.2009
    Адрес
    Ukraine, Kyiv
    Сообщений
    544
    <b>w23</b>, вообще если я не ошибаюсь, более востребована функция стрима с одного енкодера на несколько серверов. Я думаю если реализовать этот функционал - было бы просто замечательно.
    Доброняка!! \(^__^)/

  6. #6
    Новичок
    Регистрация
    17.05.2010
    Сообщений
    5
    <b>cosm</b>, а какой выход у енкодера? Я так понимаю, что речь идет о чем-то дефолтном адобовском, так он, полагаю, умеет вещать только на ртмп-сервер. Здесь есть вариант первый, тупой, но зато ничего не надо писать вообще и делать его можно сразу: запустить у себя локальный rtmp-сервер (ту же wowza, ее можно бесплатно скачать; но запросто есть варианты и полегче/попроще), а с него уже из консоли тем же ffmpeg&#039;ом перераздать поток через -acodec copy -vcodec copy на N нужных серваков. Разумеется, чтобы не перегружать исходящий канал, можно возложить эту функцию на какой-нибудь выделенный сервер с каналом потолще, чтобы с енкодерского компа выходной поток был только один.<br />И есть вариант второй: написать простейшую реализацию rtmp-сервера, которая бы уже сама копировала-перераздавала на нужные серваки. Этот вариант, конечно, с точки зрения производительности гораздо легче и лучше, но его надо писать, а зачем это делать, когда из готовых компонентов решение собрать можно, я не очень понимаю.

  7. #7
    Новичок
    Регистрация
    17.05.2010
    Сообщений
    13
    <!--QuoteBegin w23 --><div class="title_quote">Цитата: w23</div><div class="quote"><!--QuoteEBegin-->&quot;rtmp://fms.rambler.ru/live/sc2tv1&quot; и есть искомый url.<!--QuoteEnd--></div><!--QuoteEEnd--><br /><br />Такой url у меня не открывается ни одним плеером. Надо попробовать на следущем стриме с помощью твоей утилиты.<br /> Rtmp стрим с гудгейма открывался, но была очень долгая буферизация, и через несколько минут видео останавливалось.<br />

  8. #8
    Новичок
    Регистрация
    17.05.2010
    Сообщений
    5
    <b>Corr</b>, на этом урле был стрим финала осл сегодня днем. Сейчас он наверняка пустой. А так он вполне себе открывается mplayer&#039;ом свежим (у меня он из svn собран, так что я не скажу с ходу, какой именно даты версия нужна).

  9. #9
    Стример Аватар для kaby
    Регистрация
    17.05.2010
    Сообщений
    2,331
    По части второй есть огромный вопрос<br />насколько я понимаю, ты никогда не получишь исходный поток для того, чтобы в него монтировать. Типичные примеры применения - ustream, livestream, ongamenet.com - потоки у них закодированы.<br />пока что вижу применение только для перестримов.

  10. #10
    Освоившийся
    Регистрация
    17.05.2010
    Сообщений
    215
    Попрбую поучавствовать в обсуждении, тк есть некоторый опыт в этом направлении, хотя только в пределах одной локальной сети.<br /><br />Я согласен с первой частью, ффмпег хорошая программа для кодирования перекодирования и потокового вещания, но она консольная и не позволяет смотреть стрим, который ты перестримливаешь. Все что может сделать ффмпег вожет сделать vlc, тк успользует те же библиотеки avcodec. Ффмпег можно использовать на отдельном стрим- или рестрим-сервере, написав скрипты (батники) для автоматизации запуска стрима или рестрима. Стриммер для добавления рестрима заходит на стрим-сервер запускает соответсвующий скрип.<br /><br />В последнее время с avccodec есть проблема, точнее проблема из-за лицензии с форматом rtmp, он закрытый и его поддержку убрали в последних релизах.<br /><br />Про вторую часть я или не понял или она полностью не раскрыта. В общем, при перестримливании чужого стрима с добавлением своих комметариев есть проблемы с синхронизацией звука. Например если перестримливать с использованием vlc, когда в vlc смотреть оригинальный поток и комметриовать, то звук запаздывает, там вроде можно подкоректировать время задержки видео для синхронизации, но я не пробовал. Если синхронизацию нормально настроить то практически ничего не надо писать, нужно только подготовить уже проверенные коммандные строки для запуска vlc.<br /><br />Идея хорошая, нужны энтузиасты. Но у меня не хватает времени и ноут напару с интернетом у меня слабоваты для экпериментов. Или просто я ленивый.<br /><br />Поставлю +1 топикстартеру.<br /><br />upd: исправил орф ошибки

  11. #11
    Новичок
    Регистрация
    17.05.2010
    Сообщений
    5
    <b>kaby[raGe]</b>,<br />да, я про случай закодированных потоков так и написал. <br />Но, во-первых, если мне не изменяет память, то поток с livestream я смотрел как-то mplayer&#039;ом намедни, а это значит, что поток сырой у них можно получить (надо перепроверить). Помню точно, что с justin были проблемы, да. Остальные источники надо проверять, но даже там, раз уж поток приходит на машину и как-то разжимается, то можно будет хотя бы попробовать как-нибудь &quot;найти&quot; ключик к нему.<br />И, во-вторых, даже тогда можно будет спокойно комментировать игры, уже записанные в видео. Например, с youtube, или то, что выкладывают teamliquid.<br /><br /><b>alex.fin</b>,<br />спасибо. Я и забыл про vlc — действительно, им гораздо удобнее было бы и смотреть стрим и отдавать перестрим. Только надо будет проверить, что он умеет ртмп, ибо та версия, что есть у меня (довольно пожилая), не умела. И тогда еще надо будет только написать подробную инструкцию, как это делать, чтобы уже сами пользователи могли делать перестримы, буде никто из администраторов и приближенных не сделает автоматический перестрим на своих серверах (я бы мог один, максимум два держать, но это надо обсуждать в деталях).<br /><br />Второй момент, про libavcodec и rtmp. Про то, что rtmp закрытый протокол, вас дезинформировали. По нему лежит вполне себе официальная открытая пдф&#039;ка на не менее официальном и открытом сайте адоб. Там есть ограничения по DMCA на сохранение потока, но мы можем отправить их в кусты в силу ряда причин. Ну и поддержку rtmp из libavformat (не avcodec) никто не убирал, а даже наоборот (возможность вещания была добавлена в декабре 2009, афаир).<br /><br />Вторую часть я написал несколько сумбурно, попробую переформулировать позже.<br /><br />upd: мой браузер сошел с ума и перепутал посты

  12. #12
    Освоившийся
    Регистрация
    17.05.2010
    Сообщений
    215
    <b>w23</b>,<br />Почему написал про проблемы c rtmp. Я не давно обновил vlc (ubuntu), после чего не мог напрямую смотреть стримы ск2тв на рамблере, тк как vlc начал ругаться на rtmp. Потом я прочитал на ихнем сайте и как я понял они специально убрали его поддержу, но хотят вернуть поддержку более старой версии который открыт. Насколько понял, новая версия rtmp с поддержкой шифрования потока у них закрытая, возможно я не прав. Почитал гугл и нашел, что новый формат поддерживается утилитой, которая входит в mplayer, называется rtmpdump. C rtmpdump я не разбирался, но в интернете пишут что с помощью него можно смотреть джастинтв, юстрим и тп.<br /><br />На счет avcodec и avformat я ошибся, хотя для меня это одно и тоже.

  13. #13
    Новобранец Аватар для Stifix
    Регистрация
    22.08.2010
    Сообщений
    52
    rtmpdump -r rtmp://fms.rambler.ru/live/olg -W ttp://sc2tv.ru/player/player.swf -v -e -b 0|mplayer -
    Вот пример как через mlayer смотреть стрим Ванласта)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •