Клиент Periscope для компьютера 27.03.2016


Наверняка многие уже знают приложение для прямых видеотрансляций со смартфонов, которое называется Periscope. Единственный его недостаток - это отсутствие программы-клиента для настольных компьютеров. Впервые я это осознал, когда почувствовал, как греется мой телефон во время просмотра трансляции, и когда увидел, сколько трафика оно кушает. Поиски в интернете особо ничего не дали, в основном все сторонние решения представляли из себя сайты - агрегаторы трансляций, собранные по какому-то непонятному алгоритму, либо "статьи", рассказывающие о том, что пользоваться Перископом на компьютере можно через эмулятор Android, правда умалчивающие о том, что запуск Periscope в эмуляторе больше похож на рулетку - никогда не знаешь, когда вылетит приложение и вообще работают ли функции. Просмотр и создание трансляций не работают вообще, а для просмотра карты нужно серьезно постараться.

И тогда я решил написать свой неофициальный клиент Periscope для ПК.

Сразу отмечу, что на тот момент (январь 2016) уже существовали некоторые попытки реверс-инжиниринга приложения. Не все из них выжили, однако одна из них, periscope_api (библиотека Ruby), с апреля 2015 года набрала хорошую популярность, даже несмотря на то, что по сути она реализует только одну функцию - создание трансляций в Periscope из файла с помощью FFmpeg. Эти трансляции можно было смотреть только в браузере, потому что мобильные приложения просто вылетали при попытке их просмотра. Но не могу сказать, что этот проект был бесполезным - автор предоставил описание основ работы Periscope API.

Взяв в одну руку отладочный прокси, а в другую - редактор Javascript, я начал исследовать API перископа и писать свой клиент к нему. Для его написания была выбрана технология пользовательских скриптов (userscript), потому что она позволяет довольно быстро писать приложения, которые к тому же будут весить очень мало, будут максимально кросс-платформенными, не требующими сложной компиляции и сборки. Браузеры есть у всех, так зачем же писать нечто дублирующее их функционал?

После того, как я залил первую едва рабочую версию на Github, мне стали приходить письма поддержки, среди которых было письмо со ссылкой на более полную документацию API, правда ссылка вела на веб-архив, потому что сайт исчез из интернета, пробыв там совсем недолго. Я разместил копию этого сайта в отдельной ветке репозитория моего клиента, и стал регулярно её обновлять, как только обнаруживал что-то новенькое в API. Вот сам этот сайт: http://static.pmmlabs.ru/OpenPeriscope

Изучая Periscope API, я понял, что в официальных мобильных приложениях могло быть больше функционала, если бы API использовался по максимуму. Скорее всего, так сделано для большего юзабилити, но для меня интересно сделать такое приложение, которое использует все предоставленные возможности. Поэтому я реализовал в своем клиенте некоторые недокументированные функции - например, загрузка полной истории сообщений чата и неисчезающие сообщения этого самого чата. На сегодняшний день в моем клиенте реализованы почти все функции мобильных приложений. Только лишь одна проблема не давала мне опубликовать его весь последний месяц - трансляции, создаваемые из файла, не работают на iPhone, т.к. приложение вылетает. Данная проблема до сих пор не решена, и поэтому я решил выпустить клиента таким, каким он есть.

Итак, обзор первого неофициального клиента для настольных компьютеров, OpenPeriscope.

Для начала, процесс установки:

  1. Установите менеджер пользовательских скриптов
  2. Кликните на ссылку и потом "Установить"
  3. Перейдите на сайт http://example.net

либо

  1. Скачайте и запустите портативную версию из раздела релизов. Имеются сборки для Windows, Windows x64 и Linux x64.

2016-03-27 11 47 53

При первом запуске потребуется ввести секретный ключ приложения Periscope, который необходим для авторизации якобы в мобильном приложении. Разработчики Periscope хранят его в секрете, но тем не менее, он утек в сеть, и сейчас его можно легко найти в интернете по запросу "Periscope Consumer/Secret Key". Я не могу его встроить в приложение, т.к. в этом случае если разработчики Periscope увидят мой клиент, то сменят ключи и мы с вами останемся у разбитого корыта. Кроме того, встраивание ключа в код клиента увеличит количество спама и ботов в Periscope, а это не является моей целью. Моя цель - сделать Periscope открытым и дать возможность каждому получать доступную информацию из Periscope в полном объеме.

2016-03-27 16 07 58

При вводе верного секретного ключа открывается сайт Twitter, с помощью которого можно зайти в свой аккаунт. Разрешите приложению доступ к информации профиля, и она будет передана в OpenPeriscope. Вход по номеру телефона пока что не возможен, и я сомневаюсь, что буду его делать, потому что лично я не хочу светить свой номер Твиттеру.

2016-03-27 16 34 57

Первый раздел - это тест API: тут можно написать любой метод и любые параметры (в формате JSON), и в нижней части страницы появится ответ в формате JSON. Этот раздел интересен только для разработчиков, так что идем дальше.

2016-03-27 16 40 31

Раздел "Карта" - как раз тот раздел, ради которого я и начал писать своего клиента, т.к. мне интересно посмотреть, что происходит в моем городе да и просто вдруг узнаю кого-то знакомого :) Красные кружки означают прямые трансляции, синие - записи, т.е. всё как в мобильном приложении. При нажатии на любой кружок появляется информация о трансляции, а при щелчке на название трансляции можно открыть её на сайте periscope.tv. Обратите внимание на иконку загрузки вверху слева, около кнопки выхода из аккаунта. Пока она видна, идет загрузка данных с сервера перископа. Дождитесь её исчезновения, прежде чем думать, что ничего не работает.

2016-03-27 16 59 12

Раздел "Топ" содержит популярные трансляции. При клике на "Get stream link" можно получить либо прямую ссылку на трансляцию (т.е. на чистый видеопоток), либо скачать плейлист, содержащий повтор. Ссылку на прямую трансляцию можно вставить в какой-нибудь внешний медиа-плеер, как и плейлист с повтором. Используя эти ссылку и плейлист можно также и скачивать трансляции, например, подав их программе FFmpeg. Цифры около иконок с чёрными человечками обозначают количество зрителей трансляций, по ним можно делать сортировку, нажав на ссылку "Sort by watching". Разделы Following и Newest содержат списки трансяций от подписок и новейшие трансляции, соответственно. А при нажатии на ссылку Chat мы попадаем в раздел безудержного веселья комментариев к трансляции.

2016-03-27 17 16 07

Раздел "Чат" я выполнил в стиле IRC, тот же дизайн и функционал. Комментарии никуда не исчезают через 2 секунды, кроме того, нажав на ссылку "Load history" можно загрузить все сообщения чата, отправленные до вашего входа в комнату. При установленной галочке Autoscroll чат будет автоматически прокручиваться вниз при каждом новом сообщении. Самые внимательные заметили на скриншоте ссылку "RTMP Link" и подумали, что можно смотреть трансляции по RTMP. Но это не так, ни одна ссылка RTMP у меня не заработала.

2016-03-27 17 24 20

Список людей - такой же, как и в мобильном приложении. Есть возможность поиска. Справа есть ссылки на профиль пользователя на сайте periscope.tv и twitter.com, а также количество подписчиков. При нажатии на аватарку открывается аватарка в наилучшем имеющемся качетсве, а при нажатии на имя - профиль пользователя, полученный по API

2016-03-27 17 28 01

В профиле пользователя можно увидеть все трансляции и повторы пользователя, а также подписок и подписанных

2016-03-27 17 33 52

Ну и, пожалуй, самый интересный раздел - создание трансляции. На данный момент созданная трансляция нормально воспроизводится только в браузере и в приложении Periscope для Android. После заполнения всех полей и нажатия кнопки Create внизу появляется текст bash скрипта и ссылка для его скачивания в виде файла. Да, пока что для Windows не формируется скрипт, поэтому попробуйте воспользоваться виртуальными машинами или эмулятором Cygwin. Пользователи Mac OS и FreeBSD могут попробовать запустить сгенерированный скрипт, если установлен bash. В любом случае, для функционирования скрипта потребуются установленные программы: FFmpeg, h264bitstream и curl. Причем FFmpeg придется пропатчить вручную моим патчем и собрать из исходников, иначе Android-приложение тоже будет падать. По умолчанию в качестве фотографии-миниатюры трансляции используется первый кадр видеофайла, но подредактировав bash скрипт, вы можете установить любую картинку. Ну и если вы сидите на Linux, то можете нажать на галочку "From camera", и тогда видео будет браться с веб-камеры или любого любого устройства, поддерживаемого программой FFmpeg (а это все устройства V4L)

На этом всё, со временем я буду вносить правки, повышающие производительность и стабильность клиента, а пока приглашаю всех заинтересованных разработчиков присоединиться ко мне и создать полную альтернативу официальным приложениям, которая будет превосходить их по количеству полезного функционала.

Исходники на Github Скачать



Теги: Поделки, Javascript, OpenPeriscope, Periscope