Skip to content

cactus666/LiveStream

Repository files navigation

Шаг 1: авторизация Google аккаунта через их библиотеку Подключить библиотеку в зависимости проекта. В файле build.gradle, находящемся в папке с исходным кодом, необходимо добавить в dependencies «implementation 'com.google.android.gms:play-services-auth:15.0.1'». После в activity, где располагается кнопка аутентификации, вызываются соответствующие методы, позволяющие пользователю авторизоваться. В процессе этого можно получить два токена, один позволяет совершать различные действия(он необходим для создании трансляции), а второй используется для продления(получение нового и замена старого) первого.

Шаг 2: написать стек запросов для создания трансляции YouTube Live Streaming API позволяет управлять событиями на YouTube(трансляция в том числе). Broadcasts и streams — это ресурсы, которые необходимо задействовать. Broadcast - это сама трансляция, которую можно смотреть(если вкратце, то это окно, перейдя по которому можно воспроизвести какой-то контент на YouTube). Stream - это поток самого контента, то есть непосредственно множество байт, передаваемых по сети.
Все запросы к серверу должны осуществляться со специальным ключом, полученным после авторизации через Google аккаунт. Результаты запросов будут передаваться в формате json. В контексте данной задачи мне понадобились следующие ресурсы: liveBroadcast и liveStream. Операции, которые можно использовать для ресурсов следующие: list, insert, update, bind, transition, control, delete. К liveBroadcast можно использовать все операции, а к liveStream все кроме bind, transition, control.

В формате ресурса можно увидеть структуру самого ресурса. По каждому запросу сервер будет возвращать те части ресурса, которые были указаны в запросе. Сам ресурс делится на несколько частей, например liveBroadcast делится на: id, snippet, contentDetails, and status, где каждая часть несет в себе некую сгруппированную информацию. В самом запросе должны указываться в параметре part те части, которые необходимо получить от сервера. Не стоит указывать все части, это может привести к патовым ситуациям в дальнейшем. Узнать о том, какие бывают части можно из структуры ресурса или из описания part для каждого запроса.

Рассмотрим ресурс liveBroadcast. Чтобы создать трансляцию нужен метод insert. Я опишу подробно только этот метод, т.к. все остальные методы схожи по построению. В Request body указываются все параметры запроса, которые формируют саму трансляцию(например название трансляции). Request body должны содержать некоторые обязательный параметры, для данного метода и ресурса - это snippet.title, snippet.scheduledStartTime, status.privacyStatus. О том, что означает каждый параметр можно узнать из свойств ресурса. snippet.title - название трансляции, snippet.scheduledStartTime - дата и время начала трансляции, в формате ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ), status.privacyStatus - статус конфиденциальности трансляции. Полученный id из ответа необходимо сохранить, он еще понадобится в дальнейших запросах(например при связывании трансляции и потока). Вот пример POST запроса https://www.googleapis.com/youtube/v3/liveBroadcasts?part=id%2Csnippet%2CcontentDetails%2Cstatus&key={YOUR_API_KEY} Здесь YOUR_API_KEY - ключ, полученный при аутентификации через Google аккаунт.

Метод insert для liveStreams создается по тому же принципу, что и для liveBroadcasts, но уже будут использоваться немного другие параметры. Приведу пример только обязательных: snippet.title, cdn.format, cdn.ingestionType. snippet.title - имя потока, cdn.format - формат видео, позволяющий задать частоту кадров и разрешение. Это свойство считается устаревшим начиная с 18 апреля 2016 г. Вместо этого используется cdn.frameRate и cdn.resolutionсвойство, чтобы определить частоту кадров и разрешение отдельно. cdn.ingestionType — протокол передачи данных. cdn.ingestionType может принимать одно из двух возможных значений dash и rtmp(его я и использую). RTMP - проприетарный протокол потоковой передачи данных, в основном используется для передачи потокового видео и аудио потоков с веб-камер через интернет. DASH - технология адаптивной потоковой передачи данных, предоставляющая возможность доставки потокового мультимедиа-контента через Интернет по протоколу HTTP. Отправляю запрос, получаю ответ, сохраняю id.

Метод bind ресурса liveBroadcasts отвечает за связывание Broadcast с Streams. Тут используются id, созданных ресурсов.

Метод transition отвечает за тестирование, запуск и остановку трансляции. Параметр broadcastStatus принимает одно из трех значений: testing(для тестирования), live(для запуска трансляции), complete(для остановки трансляции).

На этом шаге я создаю broadcast и stream, связываю их методом bind. Далее должен выполниться шаг 3, а сразу после вызываются метод transition (сначала с параметром testing, потом live).

Шаг 3: передача данных с камеры или использование видеокодера Чтобы трансляция началась данные должны поступать в ресурс liveStream. Для этого я использовал стороннюю библиотеку. Подключается она в том же месте, что и библиотека из шага 1. В dependencies добавляется строка «implementation project(path: ':library')», а в файле settings.gradle необходимо добавить «include ':app', ':library'», в каталог library помещается необходимая библиотека. Она позволяет передавать данные с камеры на заданный rtmp адрес.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors